The Go Blog

App Engine の新しい Go 1.11 ランタイムを発表

Eno Compton と Tyler Bui-Palsulich
2018 年 10 月 16 日

App Engine は、2011 年に Go の実験的なサポートを開始しました。その後数年間で、Go コミュニティは大きく成長し、クラウドベースのアプリケーション向けに慣用的なパターンが定着しました。本日、Google Cloud は、慣用的な Go をサポートしながら、使用した分だけ支払う、自動スケーリング、マネージド インフラストラクチャといった App Engine のすべての機能を備えた App Engine スタンダード環境向けの新しい Go 1.11 ランタイムを発表しました。

Go 1.11 以降、App Engine の Go には、アプリケーション構造、サポートされるパッケージ、context.Context の値、または HTTP クライアントに制限はありません。好みの方法で Go アプリケーションを作成し、app.yaml ファイルを追加するだけで、アプリを App Engine にデプロイする準備が整います。依存関係の指定では、新しいランタイムが依存関係管理のためにベンダー化モジュール(実験的)をどのようにサポートするかを説明しています。

Cloud Functions の Go サポート(詳細は今後の投稿で)と合わせて、App Engine は、基盤となるインフラストラクチャを気にすることなく、Google Cloud Platform(GCP)で Go コードを実行する魅力的な方法を提供します。

App Engine 用の小さなアプリケーションを作成してみましょう。ここでの例では、GOPATH ベースのワークフローを想定していますが、Go モジュールも実験的なサポートを受けています。

まず、GOPATH にアプリケーションを作成します。

// This server can run on App Engine.
package main

import (
    "fmt"
    "log"
    "net/http"
    "os"
)

func main() {
    port := os.Getenv("PORT")
    if port == "" {
        port = "8080"
    }
    http.HandleFunc("/", hello)

    log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), nil))
}

func hello(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Hello, 世界"))
}

コードには、「Hello, 世界」と応答する小さな HTTP サーバーの慣用的なセットアップが含まれています。以前 App Engine を使用した経験がある場合は、appengine.Main() への呼び出しがないことに気付くでしょう。これは完全にオプションになりました。さらに、アプリケーション コードは完全にポータブルであり、アプリケーションがデプロイされるインフラストラクチャへの依存関係はありません。

外部依存関係を使用する必要がある場合は、それらの依存関係を vendor ディレクトリまたは go.mod ファイルに追加できます。新しいランタイムはどちらもサポートしています。

アプリケーション コードが完成したら、ランタイムを指定するための app.yaml ファイルを作成します。

runtime: go111

最後に、マシンを Google Cloud Platform アカウントに設定します。

すべての設定が完了したら、1 つのコマンドでデプロイできます。

gcloud app deploy

Go 開発者は、App Engine の新しい Go 1.11 ランタイムが Go アプリケーションを実行するための利用可能なオプションに刺激的な追加になると考えています。無料枠があります。スタートガイドまたは移行ガイドをチェックして、今日、新しいランタイムにアプリをデプロイしてください!

次の記事: 2018 年 Go ユーザーアンケートにご参加ください
前の記事: Go Cloud の Wire を使用したコンパイル時依存性注入
ブログインデックス