MetaGatewayに見る次世代Webサービス

第3回 開発環境としてのGoogle App Engine

この記事を読むのに必要な時間:およそ 3 分

インデックスの張り方(図3)

図3

図3

AppEngineではインデックスのはっていないクエリーは発行することができません。⁠発行しようとするとNeedIndexErrorのexceptionが発生します。)

これ自体は賛否両論じゃないかと思いますが,私的にはわかりやすくていいかなと思っています。⁠パフォーマンスもある意味バグと考えているので)

インデックスを張る方法は非常に簡単でindex.yamlというファイルにindexを記述するだけです。

開発環境ではindexが張られていなくても動作し,一度でもそのクエリーが流れればindex.yamlに自動的に記述されます。

つまり,一度でも動作させてからアップすればindexの漏れは発生しないことになります。

もちろん,バージョンアップの際もindex.yamlに追加されていれば差分だけをきちんとindexを張ってくれます。いきなりはservingになりませんがほっておけば張られるのであまり心配はいりません。

バージョンアップ方法

私が,バージョンアップにおいて重要と考えていることは,既存のシステムを停止しない,また問題があった場合にすぐに前にシステムにロールバック可能だということです。

完全にメンテナンス状態にして終了後にはずすという方法では,システムが停止します。また,ステージングサーバにアップして確認,本番へシンクなどの方法では非常にロールバックが非常に大変です。その点,Google App Engineではすさまじく簡単です。app.yamlのversionを1つあげてアップするだけです。すると,新しいバージョンの完全なコピーが生成されます。

完全にユニークなURLが生成されるので,そこで動作確認し,問題なかったら,それを現在のバージョンに設定するだけです。もし問題があれば前のバージョンを現在のバージョンに戻すだけです。きわめて理想的なバージョンアップ方法になります。コマンド一発でアップしたあとは,GUIですべて操作可能です。

そのほかにもいろいろありますが,一度さわってみれば,Google App Engineのすさまじく洗練されたバックエンドを理解していただけるのではないかなと思います。

Webサービスを作成する

Google App Engineを使っている方は,下回りを気にしなくていいのでここから入ることになります。

Google App Engineを利用するということは,当然ながらGoogleのルールにしたがってアプリケーションを作成する必要があります。ロードマップでは別の言語も使用できる予定にありますが,今のところPythonしか利用できません。つまり,GoogleAppEngieを利用するにはPythonを覚える必要があるのです。Google App Engineという開発環境には興味をもちつつも,あえて新しい言語を覚えることに違和感を感じる人は多いのではないかと思います。

私自身はC/C++, Javaを使うことが多いのですが,実は軽量言語の領域ではあまりしっくりとくるものがありませんでした。今回,私ははじめてpythonに触れたのですが,その哲学なども含めて非常に魅了された一人です。さらにフレームワークで利用したDjangoとあわせて覚えておいて決して損にはならないものだと思います。

特に私が気に入った点は,Pythonはユーザが必要とする最小限の機能のみを提供するように作られているため,誰が書いても同じようなコードに収束すること(複数のやりかたを提供しません)⁠また,インデントによってブロック構造が決まるので,常に読みやすいコードになること。これらの特性はチーム開発やメンテナンス性重視の私には非常に合っていました。また歴史の長い言語でもあるので,ライブラリなども非常に沢山あり,洗練されています。

私はC/C++, Javaと並んで今後よく使うことになるのは間違いないと思います。

なお,Google App Engineではファイルシステムを使用したり,socketを直接開いたりと制限にかかるようなことはできませんが,そのような使い方でなければ,ほとんどのPythonのライブラリはそのまま使用することができます。直接利用できないとしても,ほとんどのライブラリはロジックは利用できますので,問題となる部分だけをさしかえて利用したりもできます。

たとえばMetaGatewayでは,xmlrpcのライブラリなどはトランスポート部分だけをurlfetchに差し替えて利用していたりします。

Google App EngineはWebサービスを作る上でも,面倒な処理を行うAPIが多数用意されているので是非確認してみてください。

たとえば,ユーザのログイン処理があります。Google App Engineを使えば,Googleのユーザ管理の仕組みをそのまま利用できるので,なにも作りこむ必要がありません。実際数行記述するだけです。ログイン後に自分らのサービスへコールバックされ,get_current_userをコールするだけでログインユーザが取得できます。

MetaGatewayではopenIDなども含めてgoogle以外の認証方法にも対応したいと考えているので,それへの布石が行えるような構造としてユーザ管理を行っていますが,おおむねやっていることは同じです。

デプロイして公開する

Google App Engineでは,コマンド1回でアプリケーションのアップロードが終了します。

python appcfg.py update metagateway

上記のようにコールするだけで終了です。後はアップロードしたバージョンの動作確認をして,現在のバージョンにGUIから設定するだけです図4)⁠問題があれば再度同じコマンドを打てば,差分だけがアップされます。アップした後に,問題が起きた場合は,1つ前のバージョンに戻せばいいだけです。

図4

図4

すべてが一瞬で終了するこのプロセスに慣れてしまうと,今までの公開作業の煩雑さに面食らうかもしれません。まずは一度触れてみることをお勧めします。

次回はMetaGatewayの中身について説明していきます。

著者プロフィール

Techmonkey

コンビのWebビジネスプロデューサー。

社内マイクロブログ - しゃべるエンタープライズサーチ - どこかな?次世代投稿管理サービス - MetaGateway などを2人で開発。今はクラウド型の究極のチームコラボレーションソフトウェアを開発中です。