Google Cloud CLI には、ローカル開発用サーバー(dev_appserver.py)が含まれています。ローカル開発用サーバーを使用すると、本番環境での App Engine アプリケーションの実行をシミュレートしながら、App Engine のレガシー バンドル サービスにアクセスできます。シミュレートされた環境では、システム関数やランタイム言語モジュールによるインポート機能の制限など、サンドボックスにある程度制限がありますが、リクエストのタイムアウトや割り当てには制限がありません。
App Engine 用 SDK のライブラリによって提供される Datastore、Memcache、タスクキューなどのサービスを、ローカル開発用サーバーでローカルに実行してシミュレートすることもできます。アプリケーションが開発用サーバーで動作している場合でも、Google API HTTP エンドポイントを使用して、本番環境のインフラストラクチャに対するリモート API 呼び出しを行えます。
ローカル開発用サーバーの設定
ローカル開発用サーバーツールを実行するには、次の設定を行う必要があります。
- gcloud CLI に必要な Python バージョンと互換性がある Python 3 インタープリタがインストールされていることを確認します。
Python 3 用の App Engine 拡張機能(
app-engine-python)を含む Google Cloud CLI コンポーネントがインストールされていることを確認します。gcloud components listapp-engine-pythonコンポーネントがインストールされていない場合は、次のコマンドを実行します。gcloud components install app-engine-python次のコマンドを実行して、Google Cloud SDK のインストール パスを確認します。
gcloud infoこのコマンドは、Google Cloud SDK がインストールされているルート ディレクトリを返します。次に例を示します。
Installation Root: [/Users/myname/google-cloud-sdk]Google Cloud CLI をインストールした
/bin/フォルダの下にあるdev_appserver.pyツールを見つけます。次に例を示します。CLOUD_SDK_ROOT/bin/dev_appserver.py後で使用できるように、
dev_appserver.pyへのパスをメモします。
ローカル開発用サーバーの実行
ローカル開発用サーバーを設定し、アプリの app.yaml 構成ファイルを作成した後、dev_appserver.py コマンドを使用すると、アプリをローカルで実行できます。
ローカル開発用サーバーを起動するには:
-
app.yaml構成ファイルのあるディレクトリでdev_appserver.pyコマンドを実行します。dev_appserver.py
アプリへのディレクトリ パスを指定します。たとえば次のようにします。
python3 CLOUD_SDK_ROOT/bin/dev_appserver.py PATH_TO_YOUR_APPまた、特定のサービスの構成ファイルを指定することもできます。たとえば次のようにします。
python3 CLOUD_SDK_ROOT/bin/dev_appserver.py app.yamlポートを変更する場合は、
--portオプションを含めます。python3 CLOUD_SDK_ROOT/bin/dev_appserver.py --port=9999 PATH_TO_YOUR_APPgoapp serve
goapp serveコマンドは、元の App Engine SDK for Go に含まれており、基になるdev_appserver.pyPython ツールをラップします。ローカル開発用サーバーを起動するには、次のコマンドを実行します。goapp serve - ローカル開発用サーバーが起動し、リクエストを待機します。ウェブブラウザで http://localhost:8080/ にアクセスすると、アプリの動作を確認できます。
--portオプションでカスタムポートを指定した場合は、そのポートでブラウザを開くようにしてください。
ローカル サーバーをコマンドラインから停止するには、次のキーを押します。
- macOS または Linux: Control+C
- Windows: Ctrl+Break
アプリケーション ID の指定
メールアドレスのなりすましなどのために、ローカル サーバーでアプリ ID にアクセスする必要がある場合は、appengine.AppID 関数を使用します。
実行中のアプリのホスト名を取得するには、appengine.DefaultVersionHostname 関数を使用します。
アプリケーションのランタイム環境の検出
コードが本番環境とローカル開発用サーバーのどちらで実行されているかを確認するには、IsDevAppServer() メソッドを呼び出します。これが true コードである場合、ローカル開発環境で実行されています。それ以外の場合は、本番環境で実行されています。
例については、GitHub をご覧ください。
ローカル Datastore サービスの使用
ローカル開発用サーバーは、ローカル サーバーの呼び出し間で持続するローカル ファイルを使用して App Engine Datastore をシミュレートします。
インデックスと index.yaml の詳細については、Datastore インデックス ページと Datastore インデックスの構成ページをご覧ください。
ローカル Datastore を参照する { :#browse}
ローカル開発用サーバーを使用してアプリがローカル Datastore にデータを書き込んでいる場合は、ローカル開発用コンソールでそのデータを参照できます。
ローカル Datastore を参照するには:
ローカル開発用コンソールで Datastore Viewer にアクセスします。URL は
http://localhost:8000/datastoreです。ローカル Datastore のコンテンツを参照します。
ID 割り当てポリシーの指定
本番環境の App Engine の場合、エンティティ ID を自動的に生成するように Datastore を設定できます。
本番環境用サーバーの自動 ID 割り当てポリシーは、開発用サーバーで使用されるポリシーとは完全に異なりますが、ローカル サーバー用に自動 ID 割り当てポリシーを設定することもできます。
自動 ID 割り当てポリシーを指定するには、--auto_id_policy オプションを使用します。
python3 CLOUD_SDK_ROOT/bin/dev_appserver.py --auto_id_policy=sequential
ここで、--auto_id_policy には次のいずれか 1 つを指定できます。
scattered: (デフォルト)ID は、ほぼ均一に分布する整数の繰り返しのないシーケンスから割り当てられます。sequential: ID は、連続する整数のシーケンスから割り当てられます。
ローカル Datastore をクリアする { :#clear_local_datastore}
アプリケーション用のローカル Datastore をクリアするには、ローカル開発用サーバーを次のように呼び出します。
python3 CLOUD_SDK_ROOT/bin/dev_appserver.py --clear_datastore=yes app.yaml
ローカル Datastore のロケーションを変更する { :#change_datastore_location}
Datastore ファイルの場所を変更するには、--datastore_path オプションを使用します。
python3 CLOUD_SDK_ROOT/bin/dev_appserver.py --datastore_path=/tmp/myapp_datastore app.yaml
メールサービスの使用
ローカル開発用サーバーは、SMTP サーバーまたはローカルにインストールされた Sendmail を使用して、呼び出しのメールを App Engine のメールサービスに送信できます。
SMTP の使用
SMTP サーバーを使用してメールサポートを有効にするには、次のように dev_appserver.py を呼び出します。
python3 [CLOUD_SDK_ROOT]/bin/dev_appserver.py --smtp_host=smtp.example.com --smtp_port=25 \
--smtp_user=ajohnson --smtp_password=k1tt3ns [PATH_TO_YOUR_APP]
ここで、--smtp_host、--smtp_port、--smtp_user、--smtp_password の各オプションに実際の値を設定します。
Sendmail の使用
Sendmail でメールサポートを有効にするには、次のように dev_appserver.py を呼び出します。
python3 [CLOUD_SDK_ROOT]/bin/dev_appserver.py --enable_sendmail=yes [PATH_TO_YOUR_APP]
ローカル サーバーは、sendmail コマンドを使用して、インストールのデフォルト構成でメールを送信します。
URL 取得サービスの使用
アプリケーションが URL 取得 API を使用して HTTP リクエストを送信する場合、ローカル開発用サーバーはデベロッパーのコンピュータからリクエストを直接送信します。プロキシ サーバーを使用してウェブサイトにアクセスしている場合、ローカル サーバーでの URL 取得の動作は本番環境の App Engine と異なることがあります。
ユーザー サービスを使用する
App Engine には、アプリケーションの認証と認可を簡素化するためのユーザー サービスが用意されています。ローカル開発用サーバーは、独自のログインページとログアウト ページで Google アカウントの動作をシミュレートします。
ローカル開発用サーバーでの実行中、LoginURL および LogoutURL 関数は、ローカル サーバー上の /_ah/login および /_ah/logout の URL を返します。
コマンドライン引数
ローカル開発用サーバーのコマンド オプションについては、ローカル開発用サーバーのオプションをご覧ください。