ChangeLog - noissefnoc

日々のChangeLog。趣味のコードとかの話

dep で管理していた Go言語のレポジトリを go modules に移行しました

Go言語の依存関係管理に dep を使っていたのですが、Go言語標準になる go modules に重い腰をあげて移行しました。

github.com

dep を使っていると以下で対応完了し、マイグレーションは簡単でした。

  • 1 環境変数設定
  • 2 初期化
  • 3 依存関係抽出
  • 4 dep 関連ファイル削除
  • 5 ビルド・CI関連ファイル修正

Go1.13になるまではモードが混在するので、やや使いにくいケースもあると思いますが、先行して使ってみようと思います。

以下詳細です。

1. 環境変数設定

現状、環境変数 GO11MODULE で GOPATHモードとモジュールモードを切り替える仕様になっているので、モジュールモードになるように設定します。

$ export GO11MODULE=on

2. 初期化

レポジトリのルートディレクトリで初期化コマンドを実行します。これで go.mod ファイルが作成されます。

$ go mod init

3. 依存関係抽出

go mod tidy で依存関係を抽出します。

$ go mod tidy

4. dep 関連ファイル削除

dep が使っていた設定ファイルやインストールディレクトリが不要になるので削除。

$ rm -r Gopkg.toml Gopkg.lock vendor/

5. ビルド・CI関連ファイル修正

ビルドに Makefile 、CI に TravisCI を使っていたので .travis.yml をそれぞれ修正。

Makefile

これまでは

  • dep をインストール
  • dep ensure で依存をインストール

だったのが

  • go mod download

だけでよくなりました。

.travis.yml

TravisCI の標準の GO11MODULE の値は auto でこのモードの場合は GOPATH 配下のコードはモジュールモードで動作しないので、 on にセット。

env: GO11MODULE=on

before_install ないしは install セクションで依存モジュールをインストールするが、Makefile 側で対応したので、この点は対応する必要なし。