依存関係の指定

Go 1.11 のスタンダード ランタイムで動作するアプリでは、任意の linux / amd64 互換パッケージを使用できます。

Go モジュールを使用する

Go モジュールを使用して Go アプリの依存関係を管理することをおすすめしますが、Go モジュールに移行する準備ができていない場合は、引き続き以前の GOPATH モードを使用できます。

アプリをデプロイすると、App Engine は go build コマンドでアプリをビルドします。結果として、これは Go 自体の動作と一致します。アプリでモジュール対応モードを使用するには、開発環境で次のようにします。

  • app.yaml ファイルと同じディレクトリにモジュールの go.mod ファイルを作成します。App Engine は go.mod ファイルが見つかるまで、現在のディレクトリ、次に親ディレクトリを順に検索します。

    App Engine は go.mod ファイルが見つからない場合、GOPATH モードに従います。

  • たとえば、GO111MODULE 環境変数を設定する場合、変数の値でモジュール対応モードを有効にしていることを確認します。アプリをデプロイするときに、App Engine は GO111MODULE の有無について環境をチェックします。これは Go 自体の動作と一致します。App Engine は、アプリに go.mod ファイルを含めた場合にのみ、GO111MODULE 変数の設定を適用します。

  • アプリのディレクトリを $GOPATH/src 以下の場所に配置しないでください。アプリが $GOPATH/src ディレクトリ ツリー内の任意の場所にある場合、アプリに go.mod ファイルを定義した場合でも App Engine は GOPATH モードに従います。

プライベート依存関係を使用する

App Engine はビルドプロセス中にプライベート依存関係をダウンロードできないため、デプロイ時にアプリケーション コードとともにそれらを組み込む必要があります。

プライベート依存関係を宣言するには、go.mod ファイルで replace ディレクティブを使用する必要があります。次の例では、アプリが /myapp/ ディレクトリにあると想定しています。

  1. アプリのディレクトリに移動します。

    cd /myapp
    
  2. プライベート依存関係を含むディレクトリを作成します。

    mkdir private
    

    プライベート依存関係が、private ディレクトリにあることを確認します。この確認には、シンボリック リンクを作成するなどの方法を使用できます。

    mkdir private/private.example.com
    ln -s /path/to/private.example.com/foo private/private.example.com/foo
    
  3. replace ディレクティブを使用して、依存関係に private ディレクトリを使用するように go.mod ファイルを更新します。

    go mod edit -replace=private.example.com/foo=./private/private.example.com/foo
    

    go.mod ファイルは次のようになります。

    最終的な go.mod ファイル

    module private.example.com/myapp
    
    require private.example.com/foo v1.2.3
    
    replace private.example.com/foo => ./private/private.example.com/foo
    

    元の go.mod ファイル

    module private.example.com/myapp
    
    require private.example.com/foo v1.2.3
    
  4. プライベート パッケージのインポート方法や使用方法は変更しないでください。import ステートメントは、次のようになります。

    import "private.example.com/foo"
    
  5. アプリをデプロイして、デプロイメント内にプライベート依存関係を含めます。

    gcloud app deploy