概要
GO言語依存管理ツール depはもう古いので使わない方がいいです。
golangのバージョンが1.13からはgomodが標準として使われています。gomodはGo Modulesのことです。まだ知らないでDepを使い続けている人もいるので記事にしました。
目次
Go言語の依存管理ツールのとある話
つい最近までDepが主流だったのですがもう主流ではありません。今も主流だと思っている人もいるかもしれません。
なぜ、Depを辞める必要があるのか
Go 1.14からはモジュールサポートは実稼働で使用できる状態にあると見なされ、すべてのユーザーは他の依存関係管理システムからモジュールに移行することが推奨されます。とGoオフィシャルチームが言っています。
実際、Go言語のフレームワークでるEchoのバージョンが4ですがDepではバージョン3までしか対応していないためです。今後も対応する予定はなさそうです。
Go言語フレームワークのGinも同様にアップデートしようとするとエラーになって最新版は使えないようです。その他のフレームワークまでは確かめてないですが更新していかない可能性があります。
go getはglideやdepが主流だった頃は使ってはいけないぐらいな言われ方してましたが今では普通に使います。なんならもうdep ensureはもう古いのでもう使ってはいけないです。
Go Modulesの使い方
step
1環境変数設定
現状、環境変数 GO11MODULE で GOPATHモードとモジュールモードを切り替える仕様になっているので、モジュールモードになるように設定します。
常時この設定にするには.bash_profileファイルに書き込んでください。
Goバージョン1.12までは環境変数にGO111MODULE=onを追加する。1.13ではデフォルトでonになってるので設定の必要はありません。モジュールモードではGOPATHは必要なくなります。つまり、今後はGOPATHは必要なくなるということです。
この設定について説明
GO111MODULE=on // モジュールモード(GOPATHは使用しない)
GO111MODULE=off // 今まで通りのGOPATHモード
step
2初期化
レポジトリのルートディレクトリで初期化コマンドを実行します。これで go.mod ファイルが作成されます。
step
3go mod tidy で依存関係を今のプロジェクト内から抽出します。
step
4明示的な依存パッケージのダウンロードコマンド
step
5依存パッケージの追加
Modules では,go.mod が存在するディレクトリで go get をするだけで適切にバージョン管理されます.
これは一例です。
現プロジェクトのdepからgomodへの移行の考え
depからgo modulesに変更する場合は自分で作ったモジュールのimportパスは全て変わるので重要なバッチ処理やAPI機能を動かしてる場合はリスクが高すぎます。新しいプロジェクトからGo Modulesに変更すべきかと思います。もしくは危険度外視で気合いで変更してください。(おすすめしません)
まとめ
Go言語の需要はますます高まっています。
それによって、Goのバージョンが変わるごとに機能も追加変更されていくので、技術を追っていかないといけません。
技術の進歩が好きな人に向いている技術ですね。著者である私も最新を追い続けるのが好きです。
おすすめの本
昨年の夏に2版が出た本です。かなり参考になる本でしたので紹介します。ユニットテストの詳細な書き方や私も知らなかった機能まで紹介されています。
今回のGo Modulesについての記載は見なかったですが参考になる本です。