This documentation explains how to use the Paketo Go Buildpack to build applications for several common use-cases. For more in-depth description of the buildpack’s behavior and configuration see the Paketo Go Buildpack Reference documentation.
Paketo Buildpacks を使用すると、ローカル PC で Go 言語のサンプルアプリケーションの OCI イメージを簡単にビルドできます。
必要なもの
git clone https://github.com/paketo-buildpacks/samples cd samples/go/modCopied!
pack build my-app --buildpack gcr.io/paketo-buildpacks/go \ --builder paketobuildpacks/builder:baseCopied!
README を参照して、アプリケーションを実行します。注意:この例では Paketo Base ビルダーを使っていますが、Paketo Go Buildpack は Paketo Full ビルダー、および、Paketo Tiny ビルダーと互換性があります
Paketo Go Buildpack は、 go.mod の内容から Go 処理系の正確なバージョンを自動的に検出します。
ビルド時に使用する Go 処理系のバージョンは、環境変数 BP_GO_VERSION で変更できます。
環境変数 BP_GO_VERSION には semver 形式のバージョン番号を指定できます(例えば 1.14.1 や 1.14.* など)。
Paketo Go Buildpack で使用できる Go 処理系のバージョンは、 Go Distribution Cloud Native Buildpack のリリースノート で確認できます。
Go 処理系のバージョンは明示的に指定しなくても構いません。
その場合、Go Distribution Cloud Native Buildpack に同梱された buildpack.toml で定義されたバージョンを使用します。
pack build コマンドのフラグで指定する
pack コマンドでビルドするとき、 --env フラグで BP_GO_VERSION を指定できます。
pack build my-app --buildpack gcr.io/paketo-buildpacks/go \ --env BP_GO_VERSION="1.14.1"Copied!
project.toml で指定する
pack コマンドでビルドするとき、アプリケーションディレクトリに配置した project.toml で BP_GO_VERSION を指定できます。
# project.toml [ build ] [[ build.env ]] name="BP_GO_VERSION" value="1.41.1"Copied!
buildpack.yml を参照する
Go Distribution Cloud Native Buildpack の v1.0.0 から、buildpack.yml で Go 処理系のバージョンを指定するのは非推奨になりました。
go build コマンドを変更する
Paketo Go Buildpack は、ソースコードをコンパイルするとき、go build にいくつかのフラグを指定します(詳しくは Go 言語のリファレンス を参照してください)。
環境変数 BP_GO_BUILD_FLAGS や BP_GO_BUILD_LDFLAGS で go build に指定するフラグを変更できます。
go build に -ldflags を指定する
Paketo Go Buildpack では、-ldflags を指定するための独立した環境変数を使用できます。
pack build コマンドのフラグで指定する
pack コマンドでビルドするとき、 --env フラグで BP_GO_BUILD_LDFLAGS を指定できます。
例えば、-ldflags="-X main.variable=some-value" を指定するには次のように実行します。
pack build my-app --buildpack gcr.io/paketo-buildpacks/go \ --env BP_GO_BUILD_LDFLAGS="-X main.variable=some-value"Copied!
project.toml で指定する
pack コマンドでビルドするとき、アプリケーションディレクトリに配置した project.toml で BP_GO_BUILD_LDFLAGS を指定できます。
例えば、-ldflags="-X main.variable=some-value" を指定するには次のように記述します。
# project.toml [ build ] [[ build.env ]] name="BP_GO_BUILD_LDFLAGS" value="-X main.variable=some-value"Copied!
go-build に -ldflags 以外のフラグを指定する
Paketo Go Buildpack では、環境変数 BP_GO_BUILD_FLAGS でビルドフラグの初期値を変更できます。
詳しくは Go 言語のリファレンス を参照してください。
pack build コマンドのフラグで指定する
pack コマンドでビルドするとき、 --env フラグで BP_GO_BUILD_FLAGS を指定できます。
例えば、-buildmode=default -tags=paketo を指定するには次のように実行します。
pack build my-app --buildpack gcr.io/paketo-buildpacks/go \ --env BP_GO_BUILD_FLAGS="-buildmode=default -tags=paketo"Copied!
project.toml で指定する
pack コマンドでビルドするとき、アプリケーションディレクトリに配置した project.toml で BP_GO_BUILD_FLAGS を指定できます。
例えば、-buildmode=default -tags=paketo を指定するには次のように記述します。
# project.toml [ build ] [[ build.env ]] name="BP_GO_BUILD_FLAGS" value="-buildmode=default -tags=paketo"Copied!
buildpack.yml を参照する
Go Build Cloud Native Buildpack の v1.0.0 から、buildpack.yml でフラグセットを指定するのは非推奨になりました。
環境変数 $BP_GO_BUILD_FLAGS を使用してください。
初期設定の Paketo Go Buildpack は、コードベースのルートディレクトリのパッケージをコンパイルします。
他の(複数の)パッケージをコンパイルするには、環境変数 BP_GO_TARGETS を指定します。
次のようなディレクトリ構成で、second というサブディレクトリにビルドしたいパッケージが存在する場合を考えてみましょう。
app-directory
├── first
│ └── main.go
├── second
│ └── main.go
└── third
└── main.go
pack build コマンドのフラグで指定する
pack コマンドでビルドするとき、 --env フラグで BP_GO_TARGETS を指定できます。
pack build my-app --buildpack gcr.io/paketo-buildpacks/go \ --env BP_GO_TARGETS="./second"Copied!
project.toml で指定する
pack コマンドでビルドするとき、アプリケーションディレクトリに配置した project.toml で BP_GO_TARGETS を指定できます。
# project.toml [ build ] [[ build.env ]] name="BP_GO_TARGETS" value="./second"Copied!
buildpack.yml を参照する
Go Build Cloud Native Buildpack の v1.0.0 から、buildpack.yml でコンパイルターゲットを指定するのは非推奨になりました。
環境変数 $BP_GO_TARGETS を使用してください。
環境変数 BP_GO_TARGETS には、コロンを区切り文字とする対象パッケージのリストを指定できます。
それぞれのパッケージに対応する実行可能ファイルは、コンテナイメージの 起動プロセス に指定できます。
前に説明したディレクトリ構造 において、first と second を 両方とも 指定する場合を説明します。
pack build コマンドのフラグで指定する
pack コマンドでビルドするとき、 --env フラグで BP_GO_TARGETS を指定できます。
pack build my-app --buildpack gcr.io/paketo-buildpacks/go \ --env BP_GO_TARGETS="./first:./second"Copied!
project.toml で指定する
pack コマンドでビルドするとき、アプリケーションディレクトリに配置した project.toml で BP_GO_TARGETS を指定できます。
# project.toml [ build ] [[ build.env ]] name="BP_GO_TARGETS" value="./first:./second"Copied!
buildpack.yml を参照する
Go Build Cloud Native Buildpack の v1.0.0 から、buildpack.yml でコンパイルターゲットを指定するのは非推奨になりました。
環境変数 $BP_GO_TARGETS を使用してください。
$GOPATH を使用して、同じコードベースのサブパッケージをインポートするアプリケーションをビルドするときは、それぞれのサブパッケージのためのインポートパスを指定しなければなりません。
Paketo Go Buildpack では、環境変数 BP_GO_BUILD_IMPORT_PATH でインポートパスを変更できます。
次のようなディレクトリ構成のコードベースについて考えてみましょう。
app-directory
├── handlers
│ └── details.go
└── main.go
main.go の import ブロックには次のように記述されていることにします。
import (
"github.com/app-developer/app-directory/handlers"
)
pack build コマンドのフラグで指定する
pack コマンドでビルドするとき、 --env フラグで BP_GO_BUILD_IMPORT_PATH を指定できます。
pack build my-app --buildpack gcr.io/paketo-buildpacks/go \ --env BP_GO_BUILD_IMPORT_PATH="github.com/app-developer/app-directory"Copied!
project.toml で指定する
pack コマンドでビルドするとき、アプリケーションディレクトリに配置した project.toml で BP_GO_BUILD_IMPORT_PATH を指定できます。
# project.toml [ build ] [[ build.env ]] name="BP_GO_BUILD_IMPORT_PATH" value="github.com/app-developer/app-directory"Copied!
buildpack.yml を参照する
Go Build Cloud Native Buildpack の v1.0.0 から、buildpack.yml でコンパイルターゲットを指定するのは非推奨になりました。
環境変数 $BP_GO_BUILD_IMPORT_PATH を使用してください。
初期設定の Paketo Go Buildpack は、ビルド成果物を除いて、ソース―コードディレクトリから全てのファイルを削除します。
コンテナイメージに静的アセットファイルを残しておきたいときは、環境変数 BP_KEEP_FILES を設定してください。
例えば、サブディレクトリ assets/ と public/ のファイルをコンテナイメージに残すには次のようにします。
pack build コマンドのフラグで指定する
pack コマンドでビルドするとき、 --env フラグで BP_KEEP_FILES を指定できます。
pack build my-app --buildpack gcr.io/paketo-buildpacks/go \ --env BP_KEEP_FILES="assets/*:public/*"Copied!
project.toml で指定する
pack コマンドでビルドするとき、アプリケーションディレクトリに配置した project.toml で BP_KEEP_FILES を指定できます。
# project.toml [ build ] [[ build.env ]] name="BP_KEEP_FILES" value="assets/*:public/*"Copied!
Paketo Go Buildpack では、ビルド時や実行時のどちらでも、CA 証明書の構成 手順に従って、ユーザーが自分で用意した CA 証明書をコンテナのルートトラストストアへ配置できます。
Paketo Go Buildpack では、Procfiles の導入 手順に従って、アプリケーションのコンテナイメージが起動するプロセスを変更できます。
Paketo Go Buildpack では、環境変数の構成 手順に従って、アプリケーションのコンテナイメージを実行するときの環境変数を変更できます。
Paketo Go Buildpack では、ラベルの構成 手順に従って、アプリケーションのコンテナイメージにラベルを指定できます。
Last modified: September 10, 2021