Table of Contents [expand]
最終更新日 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.21require: このフィールドはインストールする必要があるモジュールと、そのモジュールの最小バージョンを定義します。これらのモジュールが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" で変更をコミットします。