docs community blog github
Edit

Go Buildpack リファレンス

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 モジュールによるパッケージ管理

アプリケーションのソースコードに go.mod ファイルがあるとき、Buildpack は Go モジュール機能で依存パッケージを外部化します。 ビルドフェーズでは go-mod-vendor Buildpackgo mod vendor コマンドを実行し、依存パッケージを展開した vendor ディレクトリを、アプリケーションのルートディレクトリに作成します。

dep によるパッケージ管理

dep は Go モジュールとは異なる Go アプリケーションのパッケージ管理ツールです。 アプリケーションのソースコードに Gopkg.toml ファイルがあるとき、Buildpack は dep コマンドで依存パッケージを外部化します(詳しくは dep のドキュメント を参照してください。)。 Gopkg.lock ファイルでパッケージごとのバージョン番号を指定する場合もあります。 ビルドフェーズでは dep-ensure Buildpackdep ensure コマンドを実行し、依存パッケージを展開した vendor ディレクトリを、アプリケーションのルートディレクトリに作成します。

パッケージを管理しない

Buildpack は独自に依存パッケージを外部化したアプリケーションと、依存パッケージを使用しないアプリケーションの両方に対応しています。 どちらの場合でも外部化処理(vendoring)をしないで、その場にあるソースコードを対象に go build コマンドを実行します。

コンパイル

Go CNB は go build コマンドでソースコードをコンパイルして実行可能ファイルを作成します。 初期設定では -buildmode=pie を指定します。 アプリケーションのルートディレクトリに go.mod ファイルがある場合は -mode=vendor も追加します。 go build について詳しくは Go コマンドのドキュメント を参照してください。

Buildpack の設定する環境変数

Go CNB はアプリケーションライフサイクルのビルドフェーズや起動フェーズでいくつかの環境変数を設定します。 このセクションではアプリケーションに影響するであろう環境変数について説明します。

GOPATH

環境変数 GOPATH は Go 処理系がソースコードやバイナリファイルなどのアーティファクトを探索する場所を教えるために使用します。 Go CNB はアプリケーションの使用するパッケージ管理方法に応じて GOPATH を設定します。

  • Set by: go-mod-vendor, dep-ensure and go-build
  • Phases: build
  • Value: path to Go workspace

Go モジュール

Go CNB は Go モジュールを使用するとき、アプリケーションをビルドするためのコンテナイメージに追加するキャッシュモジュールレイヤーのパスを環境変数 GOPATH へ設定します。 後に続くビルド処理では依存ライブラリをダウンロードする必要がなくなります。 基本的には go mod vendor で依存ライブラリを探索するときに GOPATH を参照します。 この時点では関係ありませんが、GOPATH は依存ライブラリを外部化(vendoring)した後、そのまま永続化され続けるわけではありません。 後に続く Buildpack が上書きする可能性があります。

dep

Go CNB は dep を使用するとき、環境変数 GOPATH に一時ディレクトリのパスを設定します。 アプリケーションのソースコードを GOPATH のパスへコピーするため、 dep ensure コマンドはソースコードを探索する場所と、依存ライブラリを格納する vendor ディレクトリの場所を知っている状態になります。 一時ディレクトリの下に作成した vendor ディレクトリは、元のソースコードディレクトリへコピーします。 環境変数 GOPATHdep ensure を実行するためにだけ変更するため、後に続く処理では元に戻ります。

ビルド

Go CNB では、アプリケーションのパッケージ管理方法に依らず、常に go-build Buildpack を使用します。 環境変数 GOPATH には、アプリケーションのソースコードとローカルサブパッケージを含む一時ディレクトリのパスを設定します。 環境変数 GOPATH はアプリケーションをコンパイルする go build コマンドが使用します。

GOCACHE

環境変数 GOCACHE は、後に続くビルド処理で再利用することになるビルド結果の出力先を設定します。 go-build Buildpack がビルド用コンテナイメージのキャッシュレイヤーとして作成するため、ビルド処理をしている間は永続的に利用できます。

  • Set by: go-build
  • Phases: build
  • Value: Go Cache layer path

DEPCACHEDIR

環境変数 DEPCACHEDIR は、dep が使用するために上流の依存対象が提供するソースコードの場所を設定します。 コンテナイメージのキャッシュレイヤーに存在するパスを、dep-ensure Buildpack が設定します。

  • Set by: dep-ensure
  • Phases: build
  • Value: Dep Cache layer path

コンポーネント

名前 必須/任意 用途
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 任意 コンテナイメージにラベルを設定する
Edit

Last modified: September 15, 2021