依存関係を指定する

App Engine フレキシブル環境で実行されているインスタンスでは、任意の linux / amd64 互換パッケージを使用できます。ここで説明する手順は、go get コマンドを使用して、GitHub、Bitbucket、LaunchPad などのサポートされているリポジトリから直接パッケージを取得することを前提としています。

Go バージョン 1.22 以降では:

  • 以前の GOPATH モード(GO111MODULE = off)のモジュール外で go get を使用することはできません。詳細については、ツールをご覧ください。

  • Go では、依存関係の管理に go.mod ファイルを使用することをおすすめしています。デプロイ中に依存関係をインストールするには、app.yaml ファイルと同じフォルダに go.mod ファイルを含めます。Go のバージョンと、ベンダー ディレクトリの依存関係の管理については、GOPATH とモジュールをご覧ください。

依存関係を宣言して管理する

Go アプリケーションは、ソースファイルのディレクトリ構造を反映するパッケージに編成されています。import ステートメントに指定されているパスは相対パスとして解釈されます。GOPATH で指定されるすべてのディレクトリの src サブディレクトリに関連する完全修飾パスが有効なインポートパスになります。

たとえば、次のように定義するアプリの例を考えます。

  • GOPATH モジュール:

     export GOPATH=/home/fred/go.
    
  • src1-1.go ファイル:

    import "foo/bar"
    
  • gcloud CLI は、アプリを実行またはデプロイするときに、/home/fred/go/src/foo/bar の場所にある foo/bar パッケージを探します。

GOPATH にパッケージのソースを含める場合は、app.yaml ファイルがあるアプリのディレクトリ内にソースコードを配置しないように注意する必要があります。この位置に配置すると、パッケージが 2 回、つまりサービス ディレクトリの相対パスに対して 1 回、完全修飾パスに対して 1 回読み込まれ、問題が発生することがあります。問題を回避するため、gcloud CLI はアプリのディレクトリと GOPATH の両方をスキャンし、検出した競合をエラーとして報告します。

最良の結果を得るため、次のことをおすすめします。

  • アプリのディレクトリの下に、サービスごとに別々のディレクトリを作成します。
  • 各サービスのディレクトリには、サービスの app.yaml ファイルと 1 つ以上の .go ファイルを含めます。
  • サービスのディレクトリにはサブディレクトリを含めないでください。
  • GOPATH には、アプリのディレクトリの外にあり、アプリがインポートするすべての依存関係が含まれているディレクトリを指定する必要があります。

必要なパッケージをダウンロードする

パッケージをダウンロードするには、go get コマンドを使用します。たとえば、GitHub my_repo から packagename をダウンロードするには、次のコマンドを実行します。

go get github.com/my_repo/packagename

App Engine にデプロイする

アプリケーションを App Engine にデプロイするには、アプリが必要とするライブラリをアプリケーション コードとともにデプロイする必要があります。詳細については、アプリケーションのテストとデプロイをご覧ください。