Go モジュール
最終更新日 2024年08月30日(金)
このガイドでは、Go モジュールを使用して Go ツールチェーン、Heroku の依存関係を管理する方法について説明します。
「Using Go Modules」(Go モジュールを使用する) のブログ投稿では、このツールの最も一般的な使用方法について説明しています。この記事では最も一般的なアクティビティについて説明します。
ビルド設定
go.mod ディレクティブ
Go モジュールを使用するコードをプッシュする場合、Heroku は go.mod
ファイル内のいくつかのディレクティブを使用してビルドを設定します。これらのディレクティブは次のとおりです。
go
: 通常、このディレクティブはgo.mod
ファイルの先頭に記述されます。アプリをコンパイルするために使用できる Go の最小バージョンを指定します。この値はビルド時に Heroku にインストールする Go のバージョンを選択するために使用されます。この値にはマイナーバージョンは含まれません。Heroku はマイナーバージョンを最新のバージョンに解決します。例: go 1.21
require
: このフィールドはインストールする必要があるモジュールと、そのモジュールの最小バージョンを定義します。これらのモジュールがvendor/
ディレクトリに存在しない場合はダウンロードされます。例: require github.com/gin-gonic/gin v1.10.0
go.mod Heroku ビルドディレクティブ
さらに、Heroku は go.mod
ファイル内のビルドディレクティブもサポートしています。
// +heroku goVersion <version>
: このフィールドを使用して、go ディレクティブで指定されたものとは異なる Go バージョンを指定できます。このディレクティブを使用すると、Go バージョン選択用のgo
ディレクティブを上書きできます。例: // +heroku goVersion go1.22.6
// +heroku install <packagespec>[ <packagespec>]
: ここでインストールするパッケージをスペースで区切ってリストで指定できます。指定しない場合、Heroku はデフォルトでコードベース内のmain
パッケージを検出してインストールします。このプロセスが望ましくない場合は、このオプションを使用して、buildpack に対して特定のパッケージのみをビルドするように指示できます。その他の一般的な選択肢には、./cmd/...
(cmd ディレクトリ内のすべてのパッケージとサブパッケージ) および./...
(カレントディレクトリのすべてのパッケージとサブパッケージ) があります。例: // +heroku install ./cmd/... ./special
go.sum を使用した Go モジュール認証
go.sum
が指定されている場合、Go ツールチェーンはインストールされているモジュールが予想される暗号ハッシュと一致するかどうかを検証します。このファイルは、多くの go モジュール対応コマンドによって生成および更新されます。Heroku では、セキュリティを強化するため、go.sum
をリポジトリにコミットすることをお勧めします。
vendor/modules.txt を使用した Go モジュールベンダリング
vendor/modules.txt
が存在する場合、Go ツールチェーンはインターネットからダウンロードするのではなく、/vendor
ディレクトリの下のリポジトリに含まれるモジュールを使用しようとします。このベンダリング戦略を使用すると、ビルドのタイムアウトやエラーを削減したりビルド速度を向上したりできます。必要なファイルは、go mod vendor
を実行し、その結果をコミットすることで生成できます。
Go モジュールのインストールまたは更新
Go モジュールは Go ツールチェーンに含まれています。Go ツールチェーンのインストールに関する手順を参照してください。
プロジェクトの初期化
go mod init <project>
を実行し、go.mod
を生成します。go mod tidy
を実行し、依存モジュールをインストールしてgo.sum
を生成します。- 必要に応じて、ベンダー依存関係に対して
go mod vendor
を実行してモジュールをベンダリングします。 git diff
または同様のコマンドで変更を確認します。git add -A; git commit -am "Setup Go modules"
で変更をコミットします。
依存関係の追加
go get -u <module>
を実行します。たとえば、go get -u github.com/gin-gonic/gin
とします。- 必要な場所で
.go
.ファイルにimport <module>
ディレクティブを追加します。 git diff
または同様のコマンドで変更を確認します。git add -A vendor; git commit -am "Add dependency <package>"
で変更をコミットします。
依存関係ステータス
go mod graph
を実行し、モジュールの概要を取得します。go mod verify
を実行し、モジュールの信頼性を確認します。
既存の依存関係の更新
go get <module>
またはgo get <module>@<version>
を実行します。git diff
または同様のコマンドで変更を確認します。git add -A vendor; git commit -m "Update <module>"
で変更をコミットします。
使用されていない依存関係の削除
go mod tidy
を実行しますgit diff
または同様のコマンドで変更を確認します。git add -A vendor; git commit -m "Remove unused dependencies"
で変更をコミットします。