Go アプリケーションの構築

Go バージョンの指定

デフォルトでは、Go Buildpack は Go コンパイラの最新の安定版を使用します。アプリケーションで特定のバージョンが必要な場合は、GOOGLE_GO_VERSION 環境変数に semver 制約を指定して、利用可能な Go バージョンの選択で使用できます。

pack build sample-go --builder=gcr.io/buildpacks/builder \
  --env GOOGLE_GO_VERSION="17.x.x"

コンパイル フラグ

Go Buildpack は、go build command を使用してアプリケーション ソースを実行ファイルとしてコンパイルします。次の環境変数を使用して、ビルドの動作を構成できます。

  • GOOGLE_BUILDABLE ビルド可能ユニットへのパスを指定します。例: Go の ./maindir は、maindir をルートとするパッケージをビルドします。

  • GOOGLE_CLEAR_SOURCE アプリケーション イメージからソースコードを省略します。アプリケーションが Go テンプレートなどの静的ファイルに依存している場合、この変数を設定すると、アプリケーションが適切に動作しない可能性があります。例: trueTrue1 はソースを消去します。

  • GOOGLE_GOGCFLAGS 解釈なしで -gcflags 値として go buildgo run に渡されます。例: all=-N -l は、競合状態分析を有効にし、ソースのファイルパスをバイナリに記録する方法を変更します。

  • GOOGLE_GOLDFLAGS 解釈なしに -ldflags 値として go build と go run に渡されます。例: -s -w は、バイナリサイズを除去してサイズを小さくする場合に使用します。

依存関係の管理

Go モジュールを使用して、Go アプリの依存関係を管理することをおすすめします。Go Buildpack は go build コマンドを使用してアプリをビルドしますが、結果として、これは Go 自体の動作と一致します。アプリでモジュール対応モードを使用するには、アプリケーションのルートに go.mod ファイルを配置する必要があります。

依存関係のベンダリング

ベンダリングでは、ビルドプロセス中にソースからモジュールをダウンロードする代わりに、アプリが使用するパッケージがアプリケーションのディレクトリにコピーされます。Go には、アプリのルート ディレクトリにある vendor というディレクトリにアプリに必要なパッケージをベンダリングするための go build コマンドが用意されています。

アプリケーション エントリポイントを構成する

デフォルトでは、Go Buildpack は、アプリケーション ソースのコンパイル時に生成される main 実行可能ファイルを呼び出すように、アプリケーション コンテナのエントリを構成します。これをオーバーライドする場合は、Procfile を指定するか、GOOGLE_ENTRYPOINT 環境変数を渡します。

環境変数

Go Buildpack は、コンテナをカスタマイズするために次の環境変数をサポートしています。

GO

環境変数については、Go のドキュメントをご覧ください。

例: GOFLAGS=-flag=value-flag=valuego コマンドに渡します。