Go 開発サーバー

Cloud SDKApp Engine SDK for Go 1.9 には、本番環境の App Engine で実行するアプリケーションをローカルで実行してシミュレートできるローカル開発用サーバー(dev_appserver.py)が付属しています。シミュレートされた環境では、システム関数や Go 1.9 モジュールによるインポート機能の制限など、サンドボックスの制限が一部存在しますが、それ以外(リクエストのタイムアウトや割り当てなど)の制限はありません。

App Engine 用 SDK のライブラリによって提供される 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 には次のいずれか 1 つを指定できます。

  • 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 には、アプリケーションの認証と承認を簡素化するための ユーザー サービスが用意されています。ローカル開発用サーバーは、独自のログインページとログアウト ページで Google アカウントの動作をシミュレートします。ローカル開発サーバーで実行中、LoginURL および LogoutURL 関数は、ローカル サーバー上の /_ah/login および /_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 取得の動作は本番環境の App Engine と異なることがあります。

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

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

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