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
ファイルを作成するか、そのファイルを編集します。
開発用サーバーでのデータストアの参照
開発用ウェブサーバーを使用して、ローカル データストアを参照するには:
- 前述したように、開発用サーバーを起動します。
- 開発用コンソールに移動します。
- 左側のナビゲーション パネルで [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/admin
(http://localhost:8080/_ah/admin)に移動します。
コマンドライン引数
ローカル開発用サーバーのコマンド オプションについては、こちらをご覧ください。