技術向上

プログラミングの学び、気になるテクノロジーやビジネストレンドを発信

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で行う - ブロックチェーンエンジニアとして生きる