ローカルの開発用サーバーは、App Engine の Java Runtime Environment や Datastore を含むすべてのサービスをエミュレートします。
始める前に
Java 8 はサポートが終了しているため、dev_appserver.py
の最新バージョンを使用してアプリケーションをローカルで実行することはできません。devapp_server.py
のアーカイブ バージョンをダウンロードする手順は次のとおりです。
アーカイブから、サポートが終了したランタイム用の
dev_appserver.py
サーバーを含む zip フォルダをダウンロードします。ディレクトリの内容をローカル ファイル システム(
/home
ディレクトリなど)に解凍します。dev_appserver.py
はgoogle_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
ファイルを作成するか、そのファイルを編集します。
開発用サーバーでのデータストアの参照
開発用ウェブサーバーを使用して、ローカル データストアを参照するには:
- 前述したように、開発用サーバーを起動します。
- 開発用コンソールに移動します。
- 左側のナビゲーション パネルで [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/admin
(http://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 バージョンの確認に使用するサーバー。