Golangのパッケージバージョン管理をdepで行う




dep

depはGolangで使うパッケージのバージョン管理を行ってくれます。Node.jsでいうところのnpmですね。

Golangにはデフォルトでgo getというコマンドでパッケージのインストールができますが、バージョンの固定ができないので実運用には耐えられません。

なのでdepを使ってパッケージ管理をするようにしましょう。

インストール

macの場合はbrewで簡単にインストールできます。

$ brew install dep
$ brew upgrade dep

他の環境では下記curlでダウンロードできます。

$ curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh

使い方

だいたいの使い方はhelpを見れば分かるくらい簡単です。

$ dep help
Dep is a tool for managing dependencies for Go projects

Usage: "dep [command]"

Commands:

  init     Set up a new Go project, or migrate an existing one
  status   Report the status of the project's dependencies
  ensure   Ensure a dependency is safely vendored in the project
  prune    Pruning is now performed automatically by dep ensure.
  version  Show the dep version information

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 -add github.com/pkg/errors  add a dependency to the project

Use "dep help [command]" for more information about a command.

この中からよく使うものを紹介します。

dep init

まず一番最初はdep initを行います。この初期化コマンドでGopkg.lockとGopkg.tomlとvendorディレクトリが作成されます。

Gopkg.lockはソースコード上でimportしている使っているものの最新バージョンを設定ファイルとして書き出してくれます。このファイルを見ればどんなパッケージを使っているか一目瞭然となります。

次にGopkg.tomlですが、これは使用しているパッケージのバージョンを固定する役割を持ちます。dep initではバージョンが発行されているGitHubリポジトリはtomlファイルに書き出されます。

最後にvendorディレクトリに全てのパッケージがまとめてインストールされます。このディレクトリは.gitignoreで除外してGopkg.lockとGopkg.tomlだけgitで管理するようにしてください。

dep ensure

ensureコマンドはすでに作成されているGopkg.lockとGopkg.tomlをもとにパッケージをインストールしてくれます。

dep ensure -update

ensureに-updateオプションをつけることでGopkg.tomlに設定してあるパッケージも最新に更新し、vendorも更新してくれます。

dep ensure -vendor-only

dep ensureだけだとtomlに記述していなパッケージが更新されてしまうので、-vendor-onlyオプションを付けることで何も更新せずにGopkg.lockとGopkg.tomlの通りにvendorにインストールしてくれます。

なので、厳密に運用する場合はこのプションをつけてパッケージを管理することを推奨します。

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です