Go 開発用サーバー

Cloud SDKApp Engine SDK for Go には、本番環境の App Engine で動作しているアプリケーションをシミュレートするために、ローカルで動作させることが可能なローカル開発用サーバーが同梱されています。シミュレートされた環境では、システム関数や Go モジュールによるインポート機能の制限など、サンドボックスにある程度制限がありますが、リクエストのタイムアウトや割り当てには制限がありません。

SDK for App Engine のライブラリによって提供される Datastore、Memcache、タスクキューなどのサービスを、ローカル開発用サーバーでローカルに実行してシミュレートすることもできます。アプリケーションが開発用サーバーで動作している場合でも、Google API の HTTP エンドポイントを使用して、本番環境のインフラに対するリモート API 呼び出しを実行できます。

ローカル開発用サーバーの実行

アプリ用の app.yaml 構成ファイルを作成したら、dev_appserver.py コマンドでローカル開発用サーバーを起動して、アプリをローカルで実行できます。

ローカル開発用サーバーを起動するには:

  1. アプリケーションの app.yaml 設定ファイルが格納されているディレクトリから、次のように dev_appserver.py コマンドを実行します。
    dev_appserver.py

    アプリケーションへのディレクトリパスを指定します。たとえば次のようにします。

    dev_appserver.py [PATH_TO_YOUR_APP]

    また、特定のサービスの設定ファイルを指定することもできます。たとえば次のようにします。

    dev_appserver.py app.yaml

    ポートを変更する場合は、--port オプションを含めます。

    dev_appserver.py --port=9999 [PATH_TO_YOUR_APP]
    goapp serve

    goapp serve コマンドは元の App Engine SDK for Go に含まれており、基になる dev_appserver.py Python ツールをラップします。ローカル開発用サーバーを起動するには、次のコマンドを実行します。

    goapp serve

    ヒント: Python ツールを直接 dev_appserver.py として使用すると、ローカル開発用サーバーをより詳細に制御できます。

    dev_appserver.py が機能しない場合

    dev_appserver.py コマンド オプションの詳細については、ローカル開発用サーバーのオプションをご覧ください。

  2. ローカルの開発用サーバーが起動し、リクエストを待機します。ウェブブラウザで http://localhost:8080/ にアクセスすると、アプリの動作を確認できます。

    --port オプションでカスタムポートを指定した場合は、そのポートにブラウザを開くようにしてください。

ローカル サーバーをコマンドラインから停止するには、次のキーを押します。

  • macOS または Linux: Control-C
  • Windows: Ctrl-Break

アプリケーション ID の指定

メールアドレスのスプーフィングなどのために、ローカル サーバーでアプリ ID にアクセスするには、appengine.AppID 関数を使用します。動作中のアプリのホスト名を取得するには、appengine.DefaultVersionHostname 関数を使用します。

アプリケーションのランタイム環境の検出

コードが本番環境とローカル開発用サーバーのどちらで動作しているかを確認するには、IsDevAppServer() メソッドを呼び出します。true の場合、コードはローカル開発環境で、それ以外の場合は本番環境で動作しています。

package devserver

import (
	"fmt"
	"net/http"

	"google.golang.org/appengine"
)

func init() {
	http.HandleFunc("/", handler)
}

func handler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "IsDevAppServer: %v", appengine.IsDevAppServer())
}

ローカル Datastore の使用

ローカル開発用サーバーは、ローカル サーバーの呼び出し間で持続するローカル ファイルを使用した App Engine データストアをシミュレートします。

インデックスと index.yaml に関する詳細は、Datastore インデックスDatastore インデックス構成のページをご覧ください。

ローカル Datastore の参照

ローカル開発用サーバーを使用してアプリがローカル Datastore にデータを書き込んでいる場合は、ローカル開発コンソールでそのデータを参照できます。

ローカル Datastore を参照するには:

  1. 開発用サーバーを起動します

  2. ローカル開発コンソールで Datastore Viewer にアクセスします(URL は http://localhost:8000/datastore です)。

  3. ローカル Datastore のコンテンツを参照します。

ID 割り当てポリシーの指定

本番環境の App Engine の場合、エンティティ ID を自動的に生成するように Datastore を設定できます。

本番用サーバーの自動 ID 割り当てポリシーは、開発用サーバーで使用されるポリシーとは完全に異なりますが、ローカル サーバー用に自動 ID 割り当てポリシーを設定することもできます。

自動 ID 割り当てポリシーを指定するには、--auto_id_policy オプションを使用します。

dev_appserver.py --auto_id_policy=sequential

ここで、--auto_id_policy には次のどちらかを指定できます。

  • scattered:(デフォルト)ID は、ほぼ均一に分布する整数の繰り返しのないシーケンスから割り当てられます。
  • sequential: ID は、連続する整数のシーケンスから割り当てられます。

ローカル Datastore のクリア

アプリケーション用のローカル データストアをクリアするには、ローカル開発用サーバーを次のように呼び出します。

dev_appserver.py --clear_datastore=yes app.yaml

ローカル Datastore の場所変更

データストア ファイルに使用する場所を変更するには、--datastore_path オプションを使用します。

dev_appserver.py --datastore_path=/tmp/myapp_datastore app.yaml

Users サービスの使用

App Engine には、アプリケーションの認証と承認を簡素化するための Users サービスが用意されています。ローカル開発用サーバーは、独自のログインページとログアウト ページで Google アカウントの動作をシミュレートします。ローカル開発用サーバーでの動作中は、LoginURL 関数はローカル サーバーの /_ah/login の URL を、LogoutURL 関数はローカル サーバーの /_ah/logout の URL を返します。

メールの使用

ローカル開発用サーバーは、SMTP サーバーかローカルにインストールされた Sendmail を使用して、呼び出しのメールを App Engine のメールサービスに送信できます。

SMTP の使用

SMTP サーバーを使用してメール サポートを有効にするには、次のようにして dev_appserver.py を呼び出します。

dev_appserver.py --smtp_host=smtp.example.com --smtp_port=25 \
    --smtp_user=ajohnson --smtp_password=k1tt3ns [PATH_TO_YOUR_APP]

ここで、--smtp_host--smtp_port--smtp_user--smtp_password の各オプションには、ご自分の環境の値を指定してください。

Sendmail の使用

Sendmail を使用してメール サポートを有効にするには、次のようにして dev_appserver.py を呼び出します。

dev_appserver.py --enable_sendmail=yes [PATH_TO_YOUR_APP]

ローカル サーバーは sendmail コマンドを使用し、インストールのデフォルト構成に従ってメールのメッセージを送信します。

URL フェッチの使用

アプリケーションが URL フェッチ API を使用して HTTP リクエストを送信する場合、ローカル開発用サーバーは開発者のコンピュータからリクエストを直接送信します。プロキシ サーバーを使用してウェブサイトにアクセスしている場合、ローカル サーバーでの URL Fetch の動作は本番環境の App Engine と異なることがあります。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Go の App Engine スタンダード環境