docs community blog github
Edit

Paketo Buildpacks で Go アプリケーションをビルドする

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 イメージを簡単にビルドできます。

必要なもの

  • docker コマンド
  • pack コマンド
  1. サンプルプロジェクトのリポジトリをローカル PC に clone して、Go 言語のアプリケーションのソースコードが入っているディレクトリへ移動します。
    git clone https://github.com/paketo-buildpacks/samples
    cd samples/go/mod
    copy to clipboard
    Copied!
  1. 移動したディレクトリで pack コマンドを実行し、Paketo Go Buildpack でアプリケーションのコンテナイメージを作成します。
    pack build my-app --buildpack gcr.io/paketo-buildpacks/go \
      --builder paketobuildpacks/builder:base
    copy to clipboard
    Copied!
  1. 同じディレクトリにある README を参照して、アプリケーションを実行します。

注意:この例では Paketo Base ビルダーを使っていますが、Paketo Go Buildpack は Paketo Full ビルダー、および、Paketo Tiny ビルダーと互換性があります

自動的に検出する Go 言語のバージョンを上書きする

Paketo Go Buildpack は、 go.mod の内容から Go 処理系の正確なバージョンを自動的に検出します。 ビルド時に使用する Go 処理系のバージョンは、環境変数 BP_GO_VERSION で変更できます。

環境変数 BP_GO_VERSION には semver 形式のバージョン番号を指定できます(例えば 1.14.11.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"
copy to clipboard
Copied!

project.toml で指定する

pack コマンドでビルドするとき、アプリケーションディレクトリに配置した project.tomlBP_GO_VERSION を指定できます。

# project.toml
[ build ]
  [[ build.env ]]
    name="BP_GO_VERSION"
    value="1.41.1"
copy to clipboard
Copied!

非推奨:pack コマンドから buildpack.yml を参照する

Go Distribution Cloud Native Buildpack の v1.0.0 から、buildpack.yml で Go 処理系のバージョンを指定するのは非推奨になりました。

go build コマンドを変更する

Paketo Go Buildpack は、ソースコードをコンパイルするとき、go build にいくつかのフラグを指定します(詳しくは Go 言語のリファレンス を参照してください)。 環境変数 BP_GO_BUILD_FLAGSBP_GO_BUILD_LDFLAGSgo 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"
copy to clipboard
Copied!

project.toml で指定する

pack コマンドでビルドするとき、アプリケーションディレクトリに配置した project.tomlBP_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"
copy to clipboard
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"
copy to clipboard
Copied!

project.toml で指定する

pack コマンドでビルドするとき、アプリケーションディレクトリに配置した project.tomlBP_GO_BUILD_FLAGS を指定できます。 例えば、-buildmode=default -tags=paketo を指定するには次のように記述します。

# project.toml
[ build ]
  [[ build.env ]]
    name="BP_GO_BUILD_FLAGS"
    value="-buildmode=default -tags=paketo"
copy to clipboard
Copied!

非推奨:pack コマンドから 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"
copy to clipboard
Copied!

project.toml で指定する

pack コマンドでビルドするとき、アプリケーションディレクトリに配置した project.tomlBP_GO_TARGETS を指定できます。

# project.toml
[ build ]
  [[ build.env ]]
    name="BP_GO_TARGETS"
    value="./second"
copy to clipboard
Copied!

非推奨:pack コマンドから buildpack.yml を参照する

Go Build Cloud Native Buildpack の v1.0.0 から、buildpack.yml でコンパイルターゲットを指定するのは非推奨になりました。 環境変数 $BP_GO_TARGETS を使用してください。

複数のパッケージをビルドしてコンテナイメージにする

環境変数 BP_GO_TARGETS には、コロンを区切り文字とする対象パッケージのリストを指定できます。 それぞれのパッケージに対応する実行可能ファイルは、コンテナイメージの 起動プロセス に指定できます。 前に説明したディレクトリ構造 において、firstsecond両方とも 指定する場合を説明します。

pack build コマンドのフラグで指定する

pack コマンドでビルドするとき、 --env フラグで BP_GO_TARGETS を指定できます。

pack build my-app --buildpack gcr.io/paketo-buildpacks/go \
  --env BP_GO_TARGETS="./first:./second"
copy to clipboard
Copied!

project.toml で指定する

pack コマンドでビルドするとき、アプリケーションディレクトリに配置した project.tomlBP_GO_TARGETS を指定できます。

# project.toml
[ build ]
  [[ build.env ]]
    name="BP_GO_TARGETS"
    value="./first:./second"
copy to clipboard
Copied!

非推奨:pack コマンドから 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"
copy to clipboard
Copied!

project.toml で指定する

pack コマンドでビルドするとき、アプリケーションディレクトリに配置した project.tomlBP_GO_BUILD_IMPORT_PATH を指定できます。

# project.toml
[ build ]
  [[ build.env ]]
    name="BP_GO_BUILD_IMPORT_PATH"
    value="github.com/app-developer/app-directory"
copy to clipboard
Copied!

非推奨:pack コマンドから 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/*"
copy to clipboard
Copied!

project.toml で指定する

pack コマンドでビルドするとき、アプリケーションディレクトリに配置した project.tomlBP_KEEP_FILES を指定できます。

# project.toml
[ build ]
  [[ build.env ]]
    name="BP_KEEP_FILES"
    value="assets/*:public/*"
copy to clipboard
Copied!

独自の CA 証明書をインストールする

Paketo Go Buildpack では、ビルド時や実行時のどちらでも、CA 証明書の構成 手順に従って、ユーザーが自分で用意した CA 証明書をコンテナのルートトラストストアへ配置できます。

Buildpack の設定する起動プロセスを変更する

Paketo Go Buildpack では、Procfiles の導入 手順に従って、アプリケーションのコンテナイメージが起動するプロセスを変更できます。

アプリケーションを起動するときの環境変数を設定する

Paketo Go Buildpack では、環境変数の構成 手順に従って、アプリケーションのコンテナイメージを実行するときの環境変数を変更できます。

アプリケーションのコンテナイメージにラベルを設定する

Paketo Go Buildpack では、ラベルの構成 手順に従って、アプリケーションのコンテナイメージにラベルを指定できます。

Edit

Last modified: September 10, 2021