皆さんこんにちは、Janです。最近シンプルなGo言語にハマって学び始めました。初めてのブログでGoのパッケージ管理ツールについて説明します。
dep とは
npm
のようなパッケージ管理・依存関係管理ツールです。
dep と go getの違い
dep
とgo get
は類似のことをやっていますが、違う目的で使用されています。
ではそれらの違いを見てみましょう。
- go get
- 自分のgoプロジェクトに外部パッケージを取得することで作業できるようになり、それ全てが
$GOPATH/src/github.com/
の下にダウンロードかつインストールされて共有で使用できるようになります。
- 自分のgoプロジェクトに外部パッケージを取得することで作業できるようになり、それ全てが
- dep
- 自分のコードに依存関係を使いたいなら、それをダウンロードして使用することができます。
ワークフローとして,コードにインポートを追加して、dep ensure
コマンドで実行することによってGopkg.toml
,Gopkg.lock
,vendor
が更新されます。vendor
ディレクトリ下にダウンロードされ、同じプロジェクトの皆んなで安全に確保された同じ依存関係のバージョンが使用できるようになります。
- 自分のコードに依存関係を使いたいなら、それをダウンロードして使用することができます。
depの使い方
depのインストール
$ go get -u github.com/golang/dep/cmd/dep
depコマンドの説明
$ dep help
dep is a tool for managing dependencies for Go projects
Usage: dep <command>
Commands:
init Initialize a new project with manifest and lock files
status Report the status of the project's dependencies
ensure Ensure a dependency is safely vendored in the project
prune Prune the vendor tree of unused packages
Examples:
dep init set up a new project
dep ensure install the project's dependencies
dep ensure -update update the locked versions of all dependencies
dep ensure github.com/pkg/errors add a dependency to the project
Use "dep help [command]" for more information about a command.
上記英語の説明文を日本語に翻訳したらもっとわかりやすいかもしれません。
$ dep help
depはGoプロジェクトを管理するための一つのツールです。
使い方:dep <コマンド>
コマンド:
init プロジェクトを初期化し、マニフェストファイル「Gopkg.toml」とロックファイル「Gopkg.lock」ファイルが生成されます。
status プロジェクトの依存関係のステータス(状況)を報告します。
ensure 依存関係がプロジェクトで安全に確保されているかを確認します。
prune 未使用のパッケージの依存関係を削除します。
例:
dep init 新しいプロジェクトをセットアップ
dep ensure プロジェクトの依存関係をインストール
dep ensure -update 全ての依存関係のバージョンを更新
dep ensure github.com/pkg/errors プロジェクトに依存関係を追加
新しいプロジェクトを作成
$ mkdir $GOPATH/src/github.com/trydep
プロジェクトを初期化
- 新しく作成したプロジェクト
trydep
内で実行するコマンドです。
$ dep init
dep init
コマンドで実行することによってプロジェクト内にGopkg.toml
マニフェストファイルとGopkg.lock
ロックファイルとvendor
ディレクトリが生成されます。
-
Gopkg.toml
- このファイルが編集することができ、アプリケーションの直接的な依存関係のリストとそれらをどこで取得するかが含まれています。
-
Gopkg.lock
- このファイルはマニフェストから生成され、アプリケーションのコードを解析します。アプリケーションの直接的と遷移的な依存関係のリストが含まれています。ロックファイルの各依存関係には、どのリビジョンを使用すべきかを明確に示すための特定の
SHA
があります。
- このファイルはマニフェストから生成され、アプリケーションのコードを解析します。アプリケーションの直接的と遷移的な依存関係のリストが含まれています。ロックファイルの各依存関係には、どのリビジョンを使用すべきかを明確に示すための特定の
-
vendor
- 全てのパッケージがこのディレクトリ下にインストールされます。
golangのColor(カラー)パッケージをインストール
- 新しいmain.goファイルを作成してその中にcolorパッケージをインポートしてみましょう。
package main
import "github.com/fatih/color"
func main() {
color.Red("赤")
color.Cyan("青緑")
color.Blue("青")
color.Magenta("紫")
}
- まだ
github.com/fatih/color
パッケージをインストールしていないので、赤い波線が表示されると思います。では、早速インストールしましょう。
パッケージのインストール
$ dep ensure
-
dep ensure
コマンドを実行するとインポートしたいパッケージがvendor
ディレクトリ下にインストールされ、Gopkg.toml
ファイルとGopkg.lock
ファイル内にリストが追加されます。
現在プロジェクトの状態確認
$ dep status
PROJECT CONSTRAINT VERSION REVISION LATEST PKGS USED
github.com/aziz819/jankenGame * branch master 62ab977 62ab977 1
github.com/fatih/color * v1.5.0 570b54c 507f605 1
github.com/mattn/go-colorable * v0.0.9 167de6b 167de6b 1
github.com/mattn/go-isatty * v0.0.2 fc9e8d8 0360b2a 1
golang.org/x/crypto * branch master 91a49db 91a49db 1
golang.org/x/sys * branch master 062cd7e f6cff07 2
- 最後に
dep status
コマンドを実行することで、使う目的のパッケージなどが足りていないかどうかとプロジェクトの依存関係の状態が確認できます。ご確認ください。
参考URL
[1]Go dependency management tool, sdboyer, (最終閲覧日:2017年9月13日)
[https://github.com/golang/dep]
[2]dep Coming to Unify Package Management in Go, Tony Wong, (最終閲覧日:2017年9月13日)
[http://engineering.pivotal.io/post/go-dep-intro/]
[3]Go開発環境構築(VSCode, gvm, delve, dep)からHello Worldするまで, B.C.Rikko, (最終閲覧日:2017年9月13日)
[http://kuroeveryday.blogspot.jp/2017/08/golang-hello-world.html]
[4]初窥dep, Tony Bai, (最終閲覧日:2017年9月13日)
[http://tonybai.com/2017/06/08/first-glimpse-of-dep/]
[5]Color package for Go (golang), fatih, (最終閲覧日:2017年9月13日)
[https://github.com/fatih/color]