This reference documentation offers an in-depth description of the behavior and configuration options of the Paketo Go Buildpack. For explanations of how to use the buildpack for several common use-cases, see the Paketo Go Buildpack How To documentation.
Go Paketo Buildpack は Go 処理系の複数のバージョンに対応しています。 具体的なバージョンは Buildpack のリリースノート で確認してください。
Paketo Go Buildpack は Go アプリケーションをビルドするために設計された 合成 Buildpack です。
Go CNB の対応しているアプリケーションのパッケージ管理方法は次のとおりです。
アプリケーションのパッケージ管理方法は二者択一です。 以降の内容は、それぞれの管理方法に関する説明です。
アプリケーションのソースコードに go.mod
ファイルがあるとき、Buildpack は Go モジュール機能で依存パッケージを外部化します。
ビルドフェーズでは go-mod-vendor
Buildpack が go mod vendor
コマンドを実行し、依存パッケージを展開した vendor
ディレクトリを、アプリケーションのルートディレクトリに作成します。
dep は Go モジュールとは異なる Go アプリケーションのパッケージ管理ツールです。
アプリケーションのソースコードに Gopkg.toml
ファイルがあるとき、Buildpack は dep
コマンドで依存パッケージを外部化します(詳しくは dep のドキュメント を参照してください。)。
Gopkg.lock
ファイルでパッケージごとのバージョン番号を指定する場合もあります。
ビルドフェーズでは dep-ensure
Buildpack が dep ensure
コマンドを実行し、依存パッケージを展開した vendor
ディレクトリを、アプリケーションのルートディレクトリに作成します。
Buildpack は独自に依存パッケージを外部化したアプリケーションと、依存パッケージを使用しないアプリケーションの両方に対応しています。
どちらの場合でも外部化処理(vendoring)をしないで、その場にあるソースコードを対象に go build
コマンドを実行します。
Go CNB は go build
コマンドでソースコードをコンパイルして実行可能ファイルを作成します。
初期設定では -buildmode=pie
を指定します。
アプリケーションのルートディレクトリに go.mod
ファイルがある場合は -mode=vendor
も追加します。
go build
について詳しくは Go コマンドのドキュメント を参照してください。
Go CNB はアプリケーションライフサイクルのビルドフェーズや起動フェーズでいくつかの環境変数を設定します。 このセクションではアプリケーションに影響するであろう環境変数について説明します。
GOPATH
環境変数 GOPATH
は Go 処理系がソースコードやバイナリファイルなどのアーティファクトを探索する場所を教えるために使用します。
Go CNB はアプリケーションの使用するパッケージ管理方法に応じて GOPATH
を設定します。
go-mod-vendor
, dep-ensure
and go-build
build
Go CNB は Go モジュールを使用するとき、アプリケーションをビルドするためのコンテナイメージに追加するキャッシュモジュールレイヤーのパスを環境変数 GOPATH
へ設定します。
後に続くビルド処理では依存ライブラリをダウンロードする必要がなくなります。
基本的には go mod vendor
で依存ライブラリを探索するときに GOPATH
を参照します。
この時点では関係ありませんが、GOPATH
は依存ライブラリを外部化(vendoring)した後、そのまま永続化され続けるわけではありません。
後に続く Buildpack が上書きする可能性があります。
Go CNB は dep を使用するとき、環境変数 GOPATH
に一時ディレクトリのパスを設定します。
アプリケーションのソースコードを GOPATH
のパスへコピーするため、 dep ensure
コマンドはソースコードを探索する場所と、依存ライブラリを格納する vendor
ディレクトリの場所を知っている状態になります。
一時ディレクトリの下に作成した vendor
ディレクトリは、元のソースコードディレクトリへコピーします。
環境変数 GOPATH
は dep ensure
を実行するためにだけ変更するため、後に続く処理では元に戻ります。
Go CNB では、アプリケーションのパッケージ管理方法に依らず、常に go-build
Buildpack を使用します。
環境変数 GOPATH
には、アプリケーションのソースコードとローカルサブパッケージを含む一時ディレクトリのパスを設定します。
環境変数 GOPATH
はアプリケーションをコンパイルする go build
コマンドが使用します。
GOCACHE
環境変数 GOCACHE
は、後に続くビルド処理で再利用することになるビルド結果の出力先を設定します。
go-build
Buildpack がビルド用コンテナイメージのキャッシュレイヤーとして作成するため、ビルド処理をしている間は永続的に利用できます。
go-build
build
DEPCACHEDIR
環境変数 DEPCACHEDIR
は、dep が使用するために上流の依存対象が提供するソースコードの場所を設定します。
コンテナイメージのキャッシュレイヤーに存在するパスを、dep-ensure
Buildpack が設定します。
dep-ensure
build
名前 | 必須/任意 | 用途 |
---|---|---|
Paketo CA Certificates Buildpack | 任意 | 独自の CA certificates をインストールする |
Paketo Go Dist Buildpack | 必須 | Go 処理系のツールチェインをインストールする |
Paketo Go Mod Vendor Buildpack | 任意 | Go モジュールでアプリケーションの依存パッケージをインストールする |
Paketo Dep Buildpack | 任意 | dep をインストールする |
Paketo Dep Ensure Buildpack | 任意 | dep でアプリケーションの依存パッケージをインストールする |
Paketo Go Build Buildpack | 必須 | ソースコードをコンパイルする |
Paketo Procfile Buildpack | 任意 | 起動コマンドを指定する |
Paketo Environment Variables Buildpack | 任意 | 起動時の環境変数を指定する |
Paketo Image Labels Buildpack | 任意 | コンテナイメージにラベルを設定する |
Last modified: September 15, 2021