Ad Network

あわせて読みたい

  • あわせて読みたい

« 「リニアにスケールするように作れる」からこそのGoogle App Engine | Main | Twitterを使ったブクマを格段に簡単にするTiny Quote »

Google App Engine入門:フレームワークの選択

 Google App Engine向けのアプリを作る際に最初に悩んだのはフレームワークの選択。Google App Engineにはwebappという最低限の機能を持ったフレームワークが付いて来るが、Python使いの人たちの間では、DJangoというフレームワークが広く使われているらしいし。かといって、あまり大きなフレームワークを使うと、パフォーマンスのチューニングとかもしにくくなるし、フレームワークそのもののバグや制限に悩ませられる可能性もある。

 そんな中で増井君が見つけてくれてまず試したのが、Junoというフレームワーク。DJangoと比べると遥かに小さく、WebappよりもURLのルーティングのメカニズムとかが充実している。

 そこで一旦はアプリをJunoの上で作り始めたのだが、Junoのソースコードを見ているうちにいろいろと気に入らないところが出て来た。不必要にオプションが多いし、同じことをする方法を何通りも用意している点が気に入らない。そしてどうしても我慢ができなかったのが、レスポンスをグローバル変数を通して行っていること。ちょっとこれでは使えない。

 そこで着目したのが、JunoにあってWebappに不足しているのはURLルーティングのローカルな記述だけだという点。Webappの場合、URLのルーティングの規則を以下のように一カ所に固めて書かねばならないのだが、

class LoginHandler(webapp.RequestHandler):

    def post(self):

    ... loginの実装
 

class LogoutHandler(webapp.RequestHandler):

    def get(self):

    ... logoutの実装

application = webapp.WSGIApplication([('/login', LoginHandler),

                                        ('/logout', LogoutHandler),

                                        ... URLからHandlerへのマッピングリスト

                                        ])

wsgiref.handlers.CGIHandler().run(application)

Junoの場合は以下のように、処理をするファンクションにデコレータの形でURLを記述できるのである。

@juno.post('/login')

def process_login_form(web):

    ... loginの実装
 

@juno.route('/logout')

def logout(web):

    ... logoutの実装


juno.run()

 そこで思いついたのが、同じような仕組みをwebappでできるようにするモジュールを作るということ。それさえできれば余計なフレームワークなしでwebapp上でアプリを作ることができる。

 そして試行錯誤の作ったのが、gdispatchというモジュール。使い方はほぼJunoと同じで、

@gdispatch.route(lambda:('/login', LoginHandler))

class LoginHandler(webapp.RequestHandler):

    def post(self):

    ... loginの実装

@gdispatch.route(lambda:('/logout', LogoutHandler))

class LogoutHandler(webapp.RequestHandler):

    def get(self):

    ... logoutの実装

gdispatch.run()

とするだけの話。これがあれば、RequestHandlerの数が増えて複数のファイルまたがったとしても、関連するURLマッピングのルールはそれぞれのRequestHandlerと一緒に記述できるのでとても便利である。

 ということで、結論としては「フレームワークとしては、Google App Engineに標準で付いて来るwebappに必要最小限の手を加えて使うのが一番良い」というのが私なりの結論である。

 ちなみに、gdispatchはgithubに公開しておいたので試したい方はどうぞ(http://github.com/snakajima/gdispatch)。

TrackBack

TrackBack URL for this entry:
http://www.typepad.com/services/trackback/6a00d8341c4f9853ef0120a6add20c970b

Listed below are links to weblogs that reference Google App Engine入門:フレームワークの選択:

Comments

uemura

google app engineのフレームワークはkayも良いと思います。

コード
http://code.google.com/p/kay-framework/

ドキュメント
http://kay-docs-jp.shehas.net/

Pythonの代表的なWebアプリ用のモジュールである
werkzeugやjinja2などが上手く組み合わさっていると思います。

やっぱり厚めのフレームワークも試したい時にどうぞ

root

GAEOとか良さげですよ。

http://sites.google.com/site/docjpgaeo/

junya

ディスパッチャだけであれば urlrelay も使えそうです。
http://pypi.python.org/pypi/urlrelay/0.6

Post a comment

This weblog only allows comments from registered users. To comment, please Sign In.