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

App Engine SDK for Java には、デベロッパーのパソコンでアプリケーションをテストするためのローカルの開発用サーバーが含まれています。ローカルの開発用サーバーは、App Engine の Java ランタイムやデータストアを含むすべてのサービスをシミュレートします。

開発用ウェブサーバーの実行

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

開発用ウェブサーバーは、コマンド プロンプトから実行することもできます。実行するコマンドは、SDK の appengine-java-sdk/bin/ ディレクトリ内にあります。

Windows コマンドの構文:

appengine-java-sdk\bin\dev_appserver.cmd [options] [WAR_DIRECTORY_LOCATION]

Mac OS X または Linux コマンドの構文:

appengine-java-sdk/bin/dev_appserver.sh [options] [WAR_DIRECTORY_LOCATION]

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

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

これらのコマンドは、Java クラス com.google.appengine.tools.KickStartappengine-java-sdk/lib/appengine-tools-api.jar 内)を実行する OS 固有のラッパー スクリプトです。

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

コードが本番環境またはローカルの開発用サーバーのどちらで実行されているかを特定するには、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/ ディレクトリ内にあります。これは、アプリケーションによってアップロードされることはありません。

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

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

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

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

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

Cloud Datastore の整合性モデル

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

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

-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20

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

appengine-java-sdk/bin/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 です。この範囲を超える数値を使用すると、エラーが発生します。

Maven を使用している場合は、jvmFlags を使用して、このフラグを appengine:devserver に引数として渡すことができます。

<jvmFlags>
  <jvmFlag>-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20</jvmFlag>
</jvmFlags>

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

自動エンティティ ID がローカル データストアで割り当てられる方法を設定できます。開発用サーバーでは、次に示す自動 ID 割り当てポリシーがサポートされます。

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

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

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

-Ddatastore.auto_id_allocation_policy=scattered

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

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 にしなくなります。デフォルトでは、サーバーは起動時に新しいバージョンのチェックを実行して、新しいバージョンが利用可能な場合はメッセージを出力します。

--generated_dir=...

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

--help

参考になるメッセージを出力して終了します。

--jvm_flag=...

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

--port=...

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

--sdk_root=...

App Engine の Java SDK へのパス(ツールの場所と異なる場合)。

--server=...

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

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

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