2014/06/18

AppEngineのDatastoreをローカルの開発サーバで使う方法

AppEngineのテスト環境を整えている時に欠かせないのがDatastoreなどのテストです。
実行環境と同じような環境をローカルで構築してテストしたいので、すでにオンラインにあるDatastoreを取り出してローカルの開発サーバに入れて試したのでメモしておきます。

STEP1: AppEngineアプリにリモートアクセスできるように設定する
app.yamlに以下のディレクティブを追加する。
builtins:
- remote_api: on
この状態でデプロイしておく。

STEP2: オンラインのDatastoreをダウンロードする
remote_apiがONになっていればダウンロード用のコマンドでDatastoreのデータを取得できるよう。例えば以下のコマンドを実行するだけでOK。
% appcfg.py download_data --kind=ShopData --url=http://{app-id}.appspot.com/_ah/remote_api --filename=ShopData.dump 

{app-id}はAppEngineのアプリIDです。このコマンドによりShopDataというエンティティをダウンロードできます。ローカルにShopData.dumpというファイルで保存され瑠葉に指定していますがファイル名は任意です。
ダウンロードするにはEmailとPasswordが聞かれるのでAppEngineの管理者(or 開発者)アカウントのEmailとPasswordを入力すればOKです。

STEP3: 開発サーバにDatastoreを格納する
こちらもコマンドが準備されているので以下のコマンドを実行するだけ。もちろんローカルサーバが立ち上がっている必要がある。今回は8080ポートで起動しているとします。
% appcfg.py upload_data --url=http://localhost:8080/_ah/remote_api --application=`dev~{app-id}` --filename=ShopData.dump --num_threads=5
--applicationというオプションでapp-idを指定しますが、その前に「dev~」を追加するのをお忘れなく。
アップロードにも同じようにEmailとPasswordが聞かれますのでダウンロードした時のEmailとPasswordを入力します。

これでローカルの開発環境でDatastoreを使えるようになりました。
たとえば、
shop = ShopData.all().filter('email =', 'adamrocker@gmail.com').get()
logging.info(shop.name)
などというプログラムがローカルの開発サーバでも動きます。