Cloud SDK には、本番環境の App Engine で動作しているアプリケーションをシミュレートするために、ローカルで実行できるローカル開発用サーバー(dev_appserver.py
)が含まれています。シミュレートされた環境ではサンドボックスに制限があります。たとえば、システム関数や Python 2 モジュールによるインポート機能が制限されています。また、リクエストのタイムアウトや割り当ても設定されています。
App Engine 用 SDK のライブラリによって提供される Datastore、Memcache、タスクキューなどのサービスを、ローカル開発用サーバーでローカルに実行してシミュレートすることもできます。アプリケーションが開発用サーバーで動作している場合でも、Google API の HTTP エンドポイントを使用して、本番環境のインフラストラクチャに対するリモート API 呼び出しを実行できます。
ローカル開発用サーバーの実行
アプリの app.yaml
構成ファイルを作成した後、dev_appserver.py
コマンドを使用してローカル開発用サーバーを起動し、アプリをローカルで実行できます。
ローカル開発用サーバーを起動するには:
ローカル開発用サーバーの実行(dev_appserver.py
)
ローカル開発用サーバーを実行するには、完全なディレクトリ パスを指定して dev_appserver.py
を実行するか、dev_appserver.py
を PATH 環境変数に追加します。このツールは [PATH_TO_CLOUD_SDK]/google-cloud-sdk/bin/dev_appserver.py
にあります。
ヒント: Google Cloud SDK ツールを PATH に追加し、bash シェルでコマンドの補完を有効にするには、次のコマンドを実行します。
[PATH_TO_CLOUD_SDK]/google-cloud-sdk/install.sh
- アプリの
app.yaml
構成ファイルを含むディレクトリから、次のようにdev_appserver.py
コマンドを実行します。アプリへのディレクトリ パスを指定します。たとえば次のようにします。
dev_appserver.py [PATH_TO_YOUR_APP]
また、特定のサービスの構成ファイルを指定することもできます。たとえば次のようにします。
dev_appserver.py app.yaml
ポートを変更する場合は、
--port
オプションを含めます。dev_appserver.py --port=9999 [PATH_TO_YOUR_APP]
dev_appserver.py が機能しない場合
詳しくは
dev_appserver.py
コマンド オプション、ローカル開発用サーバー オプションをご覧ください。 -
ローカル開発用サーバーが起動し、リクエストを待機します。ウェブブラウザで http://localhost:8080/ にアクセスすると、アプリの動作を確認できます。
--port
オプションでカスタムポートを指定した場合は、そのポートでブラウザを開くようにしてください。
ローカル サーバーをコマンドラインから停止するには、次のキーを押します。
- macOS または Linux: Control-C
- Windows: Ctrl-Break
アプリケーション ID の指定
メールアドレスのなりすましなどのために、ローカル サーバーでアプリ ID を使用する必要がある場合は、get_application_id()
関数を使用します。実行中のアプリのホスト名を取得するには、get_default_version_hostname()
関数を使用します。
アプリケーションのランタイム環境の検出
コードが本番環境で実行されているか、ローカル開発用サーバーで実行されているかを確認するには、SERVER_SOFTWARE
環境変数を確認します。
if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine/'):
# Production
else:
# Local development server
ローカル Datastore の使用
ローカル開発用サーバーは、ローカル サーバーの呼び出し間で持続するローカル ファイルを使用して App Engine Datastore をシミュレートします。
インデックスと index.yaml
の詳細については、Datastore インデックス ページと Datastore インデックスの構成ページをご覧ください。
ローカル Datastore の参照
ローカル開発用サーバーを使用してアプリがローカル Datastore にデータを書き込んでいる場合は、ローカル開発用コンソールでそのデータを参照できます。
ローカル Datastore を参照するには:
ローカル開発用コンソールで Datastore Viewer にアクセスしますURL:
http://localhost:8000/datastore
ローカル Datastore のコンテンツを参照します。
ID 割り当てポリシーの指定
本番環境の App Engine の場合、エンティティ ID を自動的に生成するように Datastore を設定できます。
本番環境用サーバーの自動 ID 割り当てポリシーは、開発用サーバーで使用されるポリシーとは完全に異なりますが、ローカル サーバー用に自動 ID 割り当てポリシーを設定することもできます。
自動 ID 割り当てポリシーを指定するには、--auto_id_policy
オプションを使用します。
dev_appserver.py --auto_id_policy=sequential
ここで、--auto_id_policy
には次のいずれか 1 つを指定できます。
scattered
: (デフォルト)ID は、ほぼ均一に分布する整数の繰り返しのないシーケンスから割り当てられます。sequential
: ID は、連続する整数のシーケンスから割り当てられます。
ローカル Datastore のクリア
アプリケーション用のローカル データストアをクリアするには、ローカル開発用サーバーを次のように呼び出します。
dev_appserver.py --clear_datastore=yes app.yaml
ローカル Datastore の場所変更
データストア ファイルの場所を変更するには、--datastore_path
オプションを使用します。
dev_appserver.py --datastore_path=/tmp/myapp_datastore app.yaml
ユーザー サービスの使用
App Engine には、アプリケーションの認証と承認を簡素化するための Users サービスが用意されています。ローカル開発用サーバーは、独自のログインページとログアウト ページで Google アカウントの動作をシミュレートします。ローカル開発用サーバーでの実行中、users.create_login_url
関数と users.create_logout_url
関数は、ローカル サーバー上の /_ah/login
と /_ah/logout
の URL を返します。
メールの使用
ローカル開発用サーバーは、SMTP サーバーまたはローカルにインストールされた Sendmail を使用して、呼び出しのメールを App Engine のメールサービスに送信できます。
SMTP の使用
SMTP サーバーを使用してメールサポートを有効にするには、次のように dev_appserver.py
を呼び出します。
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
を呼び出します。
dev_appserver.py --enable_sendmail=yes [PATH_TO_YOUR_APP]
ローカル サーバーは sendmail
コマンドを使用し、インストールのデフォルト構成に従ってメールのメッセージを送信します。
URL 取得の使用
アプリケーションが URL 取得 API を使用して HTTP リクエストを送信する場合、ローカル開発用サーバーはデベロッパーのコンピュータからリクエストを直接送信します。プロキシ サーバーを使用してウェブサイトにアクセスしている場合、ローカル サーバーでの URL 取得の動作は本番環境の App Engine と異なることがあります。
インタラクティブ コンソールの使用
インタラクティブ コンソールを使用すると、デベロッパーはウェブフォームに任意の Python コードを入力し、アプリの環境内で実行できます。これは、アプリ自体の内部にある .py ファイルと同様に、アプリケーションの環境とサービスに対するアクセスを提供します。
インタラクティブ コンソールを使用するには:
ローカル開発用コンソールでインタラクティブ コンソールにアクセスします。URL:
http://localhost:8000/console
テキスト ボックスに実行する必要のある任意の Python コードを入力し、フォームを送信して実行します。たとえば、次のコードは、
Hello
のテキスト コンテンツを含むGreeting
というデータストア エンティティを追加します。from google.appengine.ext import ndb class Greeting(ndb.Model): content = ndb.TextProperty() e = Greeting(content="Hello") e.put()
PDB を使用したデバッグ
Python PDB デバッガを使用するには:
コードに次の行を追加します。
import pdb; pdb.set_trace();
dev_appserver
はこの時点で中断し、PDB REPL にドロップされます。これにより、コマンドラインからコードをデバッグできます。アプリケーションが
pdb.set_trace()
を呼び出す複数のリクエストを同時に送信すると、複数のデバッグ セッションが同時に開始され、それぞれがSTDOUT
に対して出力を送信します。これを防ぐには、次のようにdev_appserver
のマルチスレッドとマルチ処理のサポートを無効にして、リクエストをシリアル化します。次のマルチスレッドを無効にします。
--threadsafe_override=false
フラグを使用するすべてのサービス。--threadsafe_override=<SERVICENAME>:false
フラグを使用する 1 つのサービス。--threadsafe_override=<SERVICE1NAME>:false,<SERVICE2NAME>:false
フラグを使用する複数のサービス。
- 次のマルチ処理を無効にします。
--max_module_instances=1
フラグを使用するすべてのサービス。--max_module_instances=<SERVICENAME>:1
フラグを使用する 1 つのサービス。--max_module_instances=<SERVICE1NAME>:1,<SERVICE2NAME>:1
フラグを使用する複数のサービス。