ローカル開発用サーバーの使用

ローカルの開発用サーバーは、App Engine の Java Runtime Environment や Datastore を含むすべてのサービスをエミュレートします。

始める前に

Java 8 はサポートが終了しているため、dev_appserver.py の最新バージョンを使用してアプリケーションをローカルで実行することはできません。devapp_server.py のアーカイブ バージョンをダウンロードする手順は次のとおりです。

  1. アーカイブから、サポートが終了したランタイム用の dev_appserver.py サーバーを含む zip フォルダをダウンロードします。

  2. ディレクトリの内容をローカル ファイル システム(/home ディレクトリなど)に解凍します。dev_appserver.pygoogle_appengine/google/appengine/tools/java/bin ディレクトリにあります。

開発用ウェブサーバーの稼働

アプリに対応するシステム プロパティと環境変数の設定についての詳細は、リクエストの処理方法を参照してください。

開発用ウェブサーバーは、コマンド プロンプトから稼働することもできます。実行するコマンドは、SDK のディレクトリにある相対パス google_appengine/google/appengine/tools/java/bin です。

Windows コマンドの構文:

google_appengine\google\appengine\tools\java\bin\java_dev_appserver.cmd [options] [WAR_DIRECTORY_LOCATION]

Linux または macOS コマンドの構文:

google_appengine/google/appengine/tools/java/bin/java_dev_appserver.sh [options] [WAR_DIRECTORY_LOCATION]

このコマンドは、アプリケーションの WAR ディレクトリの場所を引数として受け取ります。

開発用サーバーの停止

ウェブサーバーを停止する場合は、Ctrl+C キーを押してください。

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

コードが本番環境またはローカルの開発用サーバーのどちらで実行されているかを確認するには、SystemProperty.environment.value() メソッドの値を調べます。例:

if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) {
   // Production
 } else {
  // Local development server
  // which is: SystemProperty.Environment.Value.Development
}

ローカル データストア エミュレータの使用

開発用ウェブサーバーは、デベロッパーのパソコンでローカルなファイルベースのデータストアを使用して、データストアをシミュレートします。このデータストアは local_db.bin という名前で、アプリケーションの WAR ディレクトリ(WEB-INF /appengine-generated/ ディレクトリ内)に作成されます。これは、アプリケーションによってアップロードされることはありません。

このデータストアは、ウェブサーバーの呼び出し間で持続されるため、保存したデータは、ウェブサーバーの次回実行時にも使用できます。データストアのコンテンツを消去する場合は、サーバーをシャットダウンしてから、このファイルを削除します。

Datastore インデックスの構成で説明するように、アプリケーションが必要とする Datastore インデックスの構成は開発用サーバーで生成できます。このインデックスは、アプリケーションのテスト中に実行されるクエリから判断されます。これにより、WAR 内の WEB-INF/appengine-generated/ ディレクトリに datastore-indexes-auto.xml という名前のファイルが生成されます。自動インデックス構成を無効にするには、<datastore-indexes> 要素の属性 autoGenerate="false" を使用して、WEB-INF/ ディレクトリに datastore-indexes.xml ファイルを作成するか、そのファイルを編集します。

開発用サーバーでのデータストアの参照

開発用ウェブサーバーを使用して、ローカル データストアを参照するには:

  1. 前述したように、開発用サーバーを起動します。
  2. 開発用コンソールに移動します。
  3. 左側のナビゲーション パネルで [Datastore Viewer] をクリックして、ローカル データストアの内容を表示します。

Datastore の整合性モデル

デフォルトでは、ローカル データストアは、グローバル クエリですぐに表示されないデータストア書き込みの割合が 10% になるように構成されています。

この整合性のレベルを調整するには、アプリケーションが認識する結果整合性の程度に対応する値を datastore.default_high_rep_job_policy_unapplied_job_pct システム プロパティに設定します。

-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20

コマンド プロンプト java_dev_appserver.sh を使用してこのプロパティを設定する場合は、--jvm_flag=... を使用してプロパティを設定する必要があります。

google_appengine/google/appengine/tools/java/bin/java-dev_appserver.sh  --jvm_flag=-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20

datastore.default_high_rep_job_policy_unapplied_job_pct の有効範囲は、0~100 です。この範囲を超える数値を使用すると、エラーが発生します。

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

自動エンティティ ID がローカル データストアで割り当てられる方法を構成できます。

開発用サーバーでは、次に示す自動 ID 割り当てポリシーがサポートされます。

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

ローカル データストアのデフォルト ポリシーは scattered です。

自動 ID ポリシーを指定する場合は、datastore.auto_id_allocation_policy システム プロパティを sequential または scattered のどちらかに設定します。

-Ddatastore.auto_id_allocation_policy=scattered

dev_appserver マクロに渡されるフラグによって、このシステム プロパティを設定するには、次のようにします。

java_dev_appserver --jvm_flag=-Ddatastore.auto_id_allocation_policy=scattered

ユーザー アカウントのシミュレーション

開発用ウェブサーバーは、独自のログインページとログアウト ページで Google アカウントをシミュレートします。開発用ウェブサーバーでログインとログアウトの URL を生成するメソッドを実行すると、ローカル サーバー上の /_ah/login/_ah/logout の URL が返されます。

開発用のログインページには、メールアドレスを入力できるフォームが組み込まれています。セッションでは、どんなものであっても入力したメールアドレスがアクティブ ユーザーとして使用されます。

ログインしたユーザーが管理者であるとアプリケーションに認識させるには、フォームにある [Sign in as Administrator] チェックボックスをオンにします。

URL 取得の使用

HTTP リクエストを送信するためにアプリケーションで URL Fetch API を使用すると、開発用ウェブサーバーはデベロッパーのパソコンからリクエストを直接送信するようになります。App Engine でアプリケーションを実行しているときには、ウェブサイトにアクセスするためにプロキシ サーバーを使用しているかどうかによって、この動作が異なることがあります。

開発用コンソール

開発用ウェブサーバーには、コンソール ウェブ アプリケーションが組み込まれています。このコンソールでは、ローカル データストアを参照できます。

このコンソールにアクセスするには、開発用サーバーの URL /_ah/adminhttp://localhost:8080/_ah/admin)に移動します。

コマンドライン引数

開発用サーバーのコマンドは、次に示すコマンドライン引数をサポートしています。

--address=...

サーバーに使用するホストアドレス。この設定は、ネットワーク上の別のコンピュータから開発用サーバーにアクセスできるようにするために必要になることがあります。アドレスを 0.0.0.0 にすると、localhost アクセスとホスト名アクセスの両方が可能になります。デフォルト: localhost

--default_gcs_bucket=...

デフォルトの Google Cloud Storage バケット名を設定します。

--disable_update_check

指定すると、開発用サーバーは SDK の新しいリリースについて App Engine に問い合わせを行いません。デフォルトでは、サーバーは起動時に新しい SDK バージョンの確認を行い、利用可能な場合はメッセージを出力します。

--generated_dir=...

生成されるファイルの作成先ディレクトリを設定します。

--help

コマンドの簡単な説明を出力して終了します。

--jvm_flag=...

特定のフラグを JVM 引数として渡します。複数のフラグを渡すために繰り返すことができます。

--port=...

サーバーに使用するポート番号。デフォルトは、8080 です。

--sdk_root=...

gcloud CLI へのパス(ツールの場所と異なる場合)。

--server=...

最新の SDK バージョンの確認に使用するサーバー。