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-buildbuildGo 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-buildbuildDEPCACHEDIR
    
環境変数 DEPCACHEDIR は、dep が使用するために上流の依存対象が提供するソースコードの場所を設定します。
コンテナイメージのキャッシュレイヤーに存在するパスを、dep-ensure Buildpack が設定します。
dep-ensurebuild| 名前 | 必須/任意 | 用途 | 
|---|---|---|
| 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