WSGIとPythonでスマートなWebアプリケーション開発を

第4回 Google App EngineでWSGIを使う

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

はじめに

前回までで,WSGIアプリケーションの仕様,アプリケーションの作成,ミドルウェアの利用などの,WSGIの基本的な部分の説明が終わりました。

今回は,作成したWSGIアプリケーションを実行するプラットフォームとして,Google App Engine(GAE) を取り上げます。

Google App Engineとは

Google App Engineとは,Googleが提供しているWebアプリケーションのプラットフォームです。基本的に無料でGoogleのスケーラブルなWebアプリケーションインフラで,自作のWebアプリケーションを動作させることができます。アプリケーションはアカウントごとに10個まで利用できます。アプリケーションごとに利用可能なストレージ容量, CPU 処理時間,データ転送量などのサーバリソースの制限はありますが,月500万ページビュー規模までは利用できる程度の制限ということなので,個人が利用するには十分だと思います。具体的な制限事項はGAEのFAQに詳しく記載されているので,必要な方は参照してください。

この記事を執筆している2008年8月現在,GAEでサポートしている言語はPythonのみです。今後Perlをサポートする予定があるようですが,具体的な時期は発表されていません。

アプリケーションの管理には, Webベースのインターフェースが用意されていて,その画面からアクセスログ,データベースに保存されたデータの確認・変更,クオータの使用量の確認などができます。現在は管理画面からアプリケーションを削除する機能がないため,10個の制限いっぱいまでアプリケーションを作ろうとしている方は,今回のサンプルをアップロードしてみるのは控えた方が良いかもしれません。

図1 アプリケーションの管理画面

図1 アプリケーションの管理画面

GAEで動作させるWebアプリケーションは,GAEサーバ側からCGIとして呼び出されます。そこで,wsgiref.handlers.CGIHandlerを使用して,CGIからWSGIアプリケーションを呼び出すようにすることで,GAEサーバ上でWSGIアプリケーションを動作させることができます。

今回は使用していませんが,GAEにはwebappという専用のフレームワークが用意されています。webappには, URLマッピング, Djangoというフレームワークで使われているテンプレートエンジンへのラッパ, Googleのユーザ認証を利用するためのユーティリティなどが存在します。

webappも,Webサーバとの接続にWSGIを使用するため,webappでアプリケーションを作成する際も,既存のミドルウェアを組み合わせて作成することができます。

GAE SDKでの開発

今回は,実際にGAEのサーバでアプリケーションを動作させる前の段階として,ローカルで開発するためのSDKを使用してアプリケーションを動作させてみます。

今回使用するサンプルプログラムは,sample.zip(ZIPで圧縮してあります)にあります。今回のサンプルは,前回同様Hello, worldMessageBoardです。基本的にソースコード自体はほとんど変わりません。変更したのは,メッセージの保存にGAEで提供されるデータベースを使用していることと,実行方法をWSGIサーバからCGIハンドラに変更した程度です。そのため,見た目の動作はまったく同じです。

今回は,実際にGAE上でサンプルを動かしています。以下のURLでアクセスできますので,実際にアクセスして前回までのサンプルと比較してみてください。

Hello, World サンプル
MessageBoardサンプル

SDKのダウンロードとサンプルの実行

実際のサーバで開発を行う前に,ローカルで開発を行うためのSDKを使用してサンプルを動作させることができます。

まず,GAEのダウンロードページにアクセスして,ご使用のプラットフォームに合ったSDKをダウンロード,インストールしてください。

そして,インストール先のディレクトリに移動し,

図2

$ ./dev_appserver.py ${サンプルのディレクトリ}

とコマンドを入力すると,サンプルが実行できます。

実行後に http://localhost:8080/hellohttp://localhost:8080/messageにアクセスすると,前回と同様にページが表示されます。

それでは,前回から追加された部分のースの中身を見ていきましょう。

メッセージボード移植

サンプルプログラムの中身で,前回から追加されたものは,

app.yaml
appmain.py
model.py

です。

app.yamlは,アプリケーションを動作させるために必要な設定ファイルです。

appmain.pyは,アプリケーションのエントリポイントで,この中でミドルウェアやアプリケーションの設定を行い,処理しています。

model.pyは,書き込みデータをDBに保存するための設定と,入出力のための関数を定義しています。

appmain.pyは,今まで使用していたwsgiref.simple_server.make_serverをwsgiref.handlers.CGIHandlerに変更しただけですので,説明は割愛します。

著者プロフィール

保坂翔馬(ほさか しょうま)

CGプロダクションでプログラマとしてPloneで作成した社内情報共有ポータルの開発・管理,3Dモデリングソフトのツール・プラグイン開発,システム管理用補助ツール作成など幅広く仕事をしている。主たる業務はPloneポータルの開発。

仲間内ではプログラム言語オタクで通っており,好きな言語はPython, Haskell。

Twitter:@shomah4a