依存関係の指定

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

Go モジュールを使用する

App Engine では GOPATH モードとモジュール対応モードの両方がサポートされますが、モジュール対応モードを使用することをおすすめします。

App Engine は、使用するモードを決定するときに、Go 自体の動作に合わせます。アプリを App Engine にデプロイするときにアプリの依存関係を使用可能にするには、開発環境で次のことを行います。

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

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

  • たとえば、GO111MODULE 環境変数を設定する場合、変数の値でモジュール対応モードを有効にしていることを確認します。アプリをデプロイするときに、App Engine で GO111MODULE に対して環境がチェックされ、Go 自体の動作と合わせます。

  • Go 1.11 と Go 1.12 では、アプリを $GOPATH/src のディレクトリまたはそれ以下のディレクトリに配置しないでください。Go 1.11 と Go 1.12 のアプリが $GOPATH/src ディレクトリ ツリー内のどこかに存在している場合、アプリに対して go.mod ファイルを定義している場合でも、App Engine が GOPATH モードに従います。

    Go 1.13 以降では、GO111MODULE によってデフォルトがオーバーライドされたか、go.mod ファイルがアプリのディレクトリに存在していない場合を除いて、App Engine がデフォルトでモジュール対応モードを使用します。

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

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