The Go Blog
Go on App Engine: ツール、テスト、並行処理
背景
2011年5月にApp Engine 用の Go をリリースした際、SDK は Python SDK の修正版に過ぎませんでした。当時、Go プログラムをビルドしたり整理したりする標準的な方法はなかったため、Python のアプローチを採用することは理にかなっていました。それ以来、Go 1.0 がリリースされ、go ツールと Go プログラムを整理するための慣例が含まれるようになりました。
2013年1月には、Go App Engine SDK と go ツールのより良い統合を発表し、App Engine アプリでの従来のインポートパスの使用を促進し、「go get」を使用してアプリの依存関係を取得できるようにしました。
App Engine 1.8.8 の最近のリリースにより、Go on App Engine の開発者エクスペリエンスがさらに改善されたことを発表できることを嬉しく思います。
goapp ツール
Go App Engine SDK には、App Engine 固有バージョンの「go」ツールである「goapp」ツールが含まれるようになりました。新しい名前により、ユーザーは通常の「go」ツールと「goapp」ツールの両方をシステム PATH に保持できます。
既存の「go」ツールのコマンドに加えて、「goapp」ツールは App Engine アプリを操作するための新しいコマンドを提供します。「goapp serve」コマンドはローカル開発サーバーを起動し、「goapp deploy」コマンドはアプリを App Engine にアップロードします。
「goapp serve」および「goapp deploy」コマンドが提供する主な利点は、簡素化されたユーザーインターフェースと、「go get」や「go fmt」のような既存のコマンドとの一貫性です。たとえば、現在のディレクトリにあるアプリのローカルインスタンスを実行するには、次のように実行します。
$ goapp serve
App Engine にアップロードするには
$ goapp deploy
提供またはデプロイする Go インポートパスを指定することもできます
$ goapp serve github.com/user/myapp
特定のモジュールを提供またはデプロイするために YAML ファイルを指定することもできます
$ goapp deploy mymodule.yaml
これらのコマンドは、`dev_appserver.py` と `appcfg.py` のほとんどの用途を置き換えることができますが、Python ツールは、あまり一般的ではない用途のために引き続き利用可能です。
ローカル単体テスト
Go App Engine SDK は、Go のネイティブテストパッケージと「go test」コマンド(SDK によって「goapp test」として提供)を使用して、ローカル単体テストをサポートするようになりました。
さらに、App Engine サービスを使用するテストを作成できるようになりました。aetest パッケージは、開発サーバーの一時的なインスタンスにリクエストを委任する appengine.Context 値を提供します。
「goapp test」と aetest パッケージの使用に関する詳細については、Go ドキュメントのローカル単体テストを参照してください。aetest パッケージはまだ初期段階にあることに注意してください。今後、さらに機能を追加していく予定です。
より良い並行処理サポート
各アプリの動的インスタンスによって処理される並行リクエストの数を、`max_concurrent_requests` オプション(自動スケーリングモジュールのみ利用可能)を設定することで、構成できるようになりました。
以下に `app.yaml` ファイルの例を示します。
application: maxigopher
version: 1
runtime: go
api_version: go1
automatic_scaling:
max_concurrent_requests: 100
これにより、アプリの各インスタンスは最大 100 のリクエストを並行して処理するように構成されます(デフォルトの 10 から増加)。Go インスタンスは最大 500 の並行リクエストを処理するように構成できます。
この設定により、Go の効率的な並行処理の利点を活用することで、インスタンスがより多くの同時リクエストを処理できるようになり、インスタンスの利用率が向上し、最終的に課金対象のインスタンス時間が削減されます。
まとめ
これらの変更により、Go on App Engine はこれまで以上に便利で効率的になりました。これらの改善をお楽しみいただければ幸いです。google-appengine-go グループに参加して、エンジニアリングチームやコミュニティの他のメンバーと質問をしたり、これらの変更について議論したりしてください。
次の記事: FOSDEM 2014 での Go の講演
前の記事: Go Playground の内部
ブログインデックス