dep パッケージの依存関係管理ツール【Go】
depはパッケージのバージョン・依存関係管理ツールで、Node.jsでいうところのnpmにあたるものです。
go getコマンドでインストールする場合と異なり、同じプロジェクト内で安全に同じバージョンのパッケージを使うよう管理することができます。チームで開発する時には必須とも言えるツールです。
go getの場合、インストールしたパッケージは$GOPATH/src/github.comに格納されますが、depの場合はプロジェクトのapi/src/vendorディレクトリに格納されます。
depでは2つのファイル「Gopkg.toml」と「Gopkg.lock」によってパージョン管理が行われます。
Gopkg.lockはプロジェクトのソースコードをスキャンし、importに指定されているパッケージの最新バージョンを設定として書き出されたファイルです。
さらにGopkg.tomlを編集することで、パッケージの使用するバージョンを指定することができます。
ソースコード上のimportの内容と、この2つのファイルによってインストールされるパッケージが決まり、vendorディレクトリにインストールされます。
- インストール
$ go get -u github.com/golang/dep/cmd/dep // または $ brew install dep $ brew upgrade dep
以下、コマンドを紹介します。
- プロジェクトの初期化
プロジェクト内に、Gopkg.toml、Gopkg.lock、vendorディレクトリが作成されます。
$ dep init
- 依存関係の安全確保
Gopkg.toml、Gopkg.lockとimportの内容に従って、vendorディレクトリにパッケージがインストールされます。
ただし、Gopkg.tomlに記載されていないパッケージは最新のバージョンがインストールされます。
$ dep ensure
- パッケージの最新化
Gopkg.tomlに指定したバージョンを無視して最新バージョンのパッケージをインストールします。
$ dep ensure -update
- 依存関係の安全確保(厳密)
Gopkg.toml、Gopkg.lockとimportの通りに、vendorディレクトリにパッケージがインストールされます。
Gopkg.tomlに指定されていないパッケージも最新化されることはありません。
$ dep ensure -vendor-only
- パッケージの追加
vendorディレクトリにパッケージがインストールされ、Gopkg.tomlとGopkg.lockにそのパッケージが指定されます。
ただし、importにそのパッケージを指定せず、dep ensureを行なった場合、Gopkg.lockとvendorからそのパッケージが削除されます。
$ dep ensure -add <パッケージ名>
dep を使用した Go の依存関係管理 | Boatswainブログ
Golangのパッケージバージョン管理をdepで行う - ブロックチェーンエンジニアとして生きる