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

Google Cloud CLI for Java には、ローカルの開発用サーバーが含まれています。このサーバーを使用すると、手元にあるマシン上でアプリケーションをテストできます。ローカルの開発用サーバーは、App Engine の Java Runtime Environment や Datastore を含むすべてのサービスをエミュレートします。

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

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

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

Windows コマンドの構文:

google-cloud-sdk\bin\java_dev_appserver.cmd [options] [WAR_DIRECTORY_LOCATION]

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

google-cloud-sdk/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] をクリックして、ローカル データストアのコンテンツを表示します。

Cloud 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_cloud_sdk/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 がローカル Datastore で割り当てられる方法を構成できます(この情報は Java 11 ランタイムと Java 8 ランタイムに適用されます)。

開発用サーバーでは、次に示す自動 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)に移動します。

コマンドライン引数

ローカル開発用サーバーのコマンド オプションについては、こちらをご覧ください。