【特集】Google App Engineで開発するためのフレームワーク × 16 + α

http://coolcoding.com/2010/01/frameworks_for_gae/

Google App Engine(以下GAE)はGoogleが提供するクラウド環境です。元々Pythonが利用できましたが、2009年にはJavaも対応しました。これにより元々日本では開発者の多くなかったPythonのみならず、Java開発者まで取り込めるようになりました。特にJavaはレンタルサーバやVPSサーバレベルでの本格的運用は難しかったので、GAEを使うことで個人レベルでもJavaを使ったWebアプリケーションを提供することが考えられるようになりました。

いざGAEで開発をはじめるとしても、素のままで書き始める必要はありません。すでに多様なフレームワークが提供されており、そうしたフレームワークを活用することでより素早くGAE上での開発ができるようになります。今回はGAEで開発を行う際にチェックしたいフレームワークを紹介したいと思います。

GAEの注意点

GAEと通常のWebサーバと異なる点は、やはりクラウドサービスであることになります。クラウドであるがゆえの簡易性はありますが、逆にシステム的な制限もあります。そのため既存のフレームワークがそのまま使えないことがほとんどで、GAEに特化したフレームワークが必要になります。さらに以下のような制限もあります。

一部のPythonモジュールが動作しない

セキュリティ上の理由でC言語を使って作成されたPythonモジュールが一部無効にされています。

ディスクへの書き込みができない

GAEにアップロードしたプログラムは世界中のサーバに分散して設置されるため、ディスクへの書き込みはできないようになっています。そうしたライブラリも利用できません。

データベースはデータストアのみ

最大の制約はこの点かと思われます。GQLと呼ばれるSQLに似たクエリ言語は提供されますが、制約は大きいので慣れるまで時間を要すようです。

タイムアウトが8秒(旧来?)

ローカルではエラーが出ないようですが、9秒以上かかる処理は自動的に切断されてしまいます。外部コンテンツを取得して処理する場合や、何らかの重たい処理を実行する際にはバックグラウンドで行うのが推奨されています。今は30秒以内と言われています。

現状では30秒以内のレスポンスに緩和されています。元々は10秒でした。

規制緩和されました - Google-App-Engine-Japan | Google グループ
http://groups.google.com/group/google-app-engine-japan/browse_thread/thread/91420303e0d78809

取得できるデータは1000件まで

データストアにアクセスして一度に取得できるデータ件数は1000件までという制約があります。ただしJDOを使った場合、それ以上取得できるようです。

1000件以上のクエリ結果件数の取得 - スティルハウスの書庫

http://d.hatena.ne.jp/kazunori_279/20090826/1251241803

アップロードできるファイル数が3,0001,000まで

なおこの制限はアップロード時に関係するものであり、ZipやJarとして固めておき、アップロード後に展開するという方法があるようです。

こちら現状では3,000までとなっています。

GAE にアップロードできるファイル数が増えたようです - Google-App-Engine-Japan | Google グループ
http://groups.google.co.jp/group/google-app-engine-japan/browse_thread/thread/a039961a45f6b476

では次に利用できるフレームワークを紹介していきます。

Java向け

Google Web Toolkit - Google Code

ピクチャ 181.png

http://code.google.com/intl/ja/webtoolkit/

Google製のJavaフレームワークです。特徴としてJavaを使ってAjaxアプリケーションが開発できるという点が挙げられます。JavaScriptを駆使して多数のブラウザへの対応を考慮することなく、Webアプリケーションが開発できるようになります。Eclipse/NetBeans/JDeveloper向けのプラグインも提供されています。

Apache Wicket - Home

ピクチャ 144.png

http://wicket.apache.org/

Apacheの提供するJavaフレームワークです。DB周りは提供しないため、データストアに対応したものを別途用意する必要があります。フルスタックなフレームワークではDB周りで引っかかることが多いのでWicketの方が導入はスムーズかも知れません。

Google App Engine上でWicketを動かす - 矢野勉のはてな日記

http://d.hatena.ne.jp/t_yano/20090412/1239498549

appengine上でWicketを使う際のポイント (TOPGATE Google関連技術サイト)

https://sites.google.com/a/topgate.co.jp/systemsolution/Home/googleappengine/wicket

slim3 - Project Hosting on Google Code

ピクチャ 145.png

http://code.google.com/p/slim3/

GAE/Jに対応したフルスタックなフレームワークです。Slim3は日本製Javaフレームワークとして知られるSeasar2の後継プロジェクトです。フルスタックなフレームワークであり、アジャイルシステム開発をターゲットとしています。ただしGAEの制約によって幾つかの機能が省かれていたり、制限が発生しています。

Slim3 for Google App Engine/Java - ひがやすを blog

http://d.hatena.ne.jp/higayasuo/20090411/1239460908

Gaelyk - a lightweight Groovy toolkit for Google App Engine Java

ピクチャ 182.png

http://gaelyk.appspot.com/

はGaelykはGAE上でGroovyを利用可能にするフレームワークです。GroovyはJava VM上で動作するアジャイルな動的言語です。動的言語とあって、Java製の小さなWebアプリケーションを開発するのに向いています。

Gaelyk - Google App Engine Java用軽量Groovyツールキット
http://dl.dropbox.com/u/132573/Gaelyk-Tutorial.html

Python向け

GAEではJavaの他、Pythonも動作します。Pythonの方が先であった分、フレームワークも多いようです。

Django | The Web framework for perfectionists with deadlines

ピクチャ 146.png

http://www.djangoproject.com/

Pythonで有名なフレームワークです。標準で管理画面が提供され、シンプルなWebアプリケーションを素早く開発できます。GAE公式でサポートされているので、より開発がスムーズに行えそうです。

CherryPy - Trac

ピクチャ 147.png

http://www.cherrypy.org/

CherryPyもまたGAEの公式サイトに名称のあがっているPythonフレームワークです。パワフルな設定システム、フレキシブルなプラグイン機能、セッションや認証、静的コンテンツ、キャッシュといった機能がフレームワークで提供されています。テスト機能もあります。なお標準のままではPure Pythonでない部分があるために動作しない箇所があるようです。

Big Sky :: Google App Engineでweb.pyやCherryPyを動かす方法

http://mattn.kaoriya.net/software/lang/python/20080423174140.htm

Pylons - Home

ピクチャ 148.png

http://pylonshq.com/

Pylonsは開発者だけではなく、すべての人が簡単に使えるように設計されています。そのためデザイナーの方を含めたチーム開発に向いているかも知れません。システムはMVCとなっています。テンプレートも予め組み込まれていて、Makoという言語を採用しています(他のエンジンに切り替えることもできます)。

About web.py (web.py)

ピクチャ 149.png

http://webpy.org/

web.pyはおそらくもっとも単純なGAE向けフレームワークといえるかも知れません。URLのハンドリングやリクエスト/レスポンスのハンドリングを行ってくれます。テンプレートエンジンをサポートしていて、データベースも考慮されていますが本格的に作り込もうと思ったときには他のフレームワークを採用した方が良いかも知れません。

tipfy - Project Hosting on Google Code

ピクチャ 150.png

http://code.google.com/p/tipfy/

tipfyは小さなフレームワークを掲げています。データストアを使ったセッション管理、db.Modelからフォームを構築するためのヘルパー、flashメッセージシステム、プラグイン機能、設定ファイルシステム、i18nサポートがサポートされています。

pyxer - Project Hosting on Google Code

ピクチャ 151.png

http://code.google.com/p/pyxer/

GAE用ではありますがWSGIにも対応しています。PasteというライブラリをベースにしているのでApacheと連携することも可能です。データベース部分は異なりますが、GAEではじめて後から別なサーバへ移管すると言ったことも考えられそうです。

MOONGIFT: » Google App Engine/Paste用Pythonフレームワーク「Pyxer」:オープンソースを毎日紹介

http://www.moongift.jp/2009/11/pyxer/

gaenos - Project Hosting on Google Code

ピクチャ 152.png

http://code.google.com/p/gaenos/

gaenosはZoho Creator(Zohoの提供するWebデータベースシステム)のようにアプリケーションを構築できるというフレームワークです。

Kay

ピクチャ 153.png

http://kay-docs-jp.shehas.net/

Kayは日本製のGAEフレームワークです。ベースのデザインはDjangoとなっています。その中でWerkzeugを使い、さらにJinja2というテンプレートエンジンを採用しています。国際化処理もあらかじめ組み込まれています。標準のDjangoをそのまま使うよりも使い勝手が良さそうです。

kay-framework - Project Hosting on Google Code

http://code.google.com/p/kay-framework/

Google App Engine Oil (GAEO)

ピクチャ 154.png

http://blog.gaeo.org/

GAEOはまさにGAE用の開発されているフレームワークです。MVC(モデル - ビュー - コントローラ)ではなくMVT(モデル - ビュー - テンプレート)に基づいています。RailsやZend Frameworkを参考に開発されているそうです。そのためRailsでよく言われる“設定より規約”に基づいています。Djangoの複雑さを解消しつつ、GAEに合わせたシンプルで使い勝手の良いフレームワークを目指しています。

ホーム (GAEO ドキュメント日本語和訳バージョン)

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

その他

Zoho Creator - オンラインデータベースアプリケーション

ピクチャ 155.png

http://creator.zoho.com/

Zoho Creatorでは作成したWebアプリケーションのエクスポートオプションとして、GAEを選択できるようになっています。これを使うとPythonのコードが出力され、そのままGAE上で動作させられるようになっています。

The GAE SWF Project: Flash and Flex apps on Google App Engine

ピクチャ 156.png

http://gaeswf.appspot.com/

GAE上でFlashやFlexを動作させるためのフレームワークです。これを使えばリッチなインタフェースのWebアプリケーションが構築できるようになります。単純なWebサイト以外の業務用Webアプリケーションを開発する際にも役立ちそうです。

Quercus: PHP in Java

ピクチャ 157.png

http://www.caucho.com/resin-3.0/quercus/

QuercusはJavaで実装されたPHPエンジンです。GAEではJRubyのようにJavaで実装された他言語のエンジンがあります。Quercusもその一つです。もちろんすべての関数、構文がサポートされている訳ではありませんが、高度なレベルでPHPを実行できます。Quercusを使えばGAE上でPHPを動作させることも可能です。

【ハウツー】Google App EngineでPHPを動かそう! (1) Google App EngineのJavaサポートがもたらしたもの | エンタープライズ | マイコミジャーナル

http://journal.mycom.co.jp/articles/2009/04/28/gaexphp/index.html

appengine-jruby - Project Hosting on Google Code

ピクチャ 158.png

http://code.google.com/p/appengine-jruby/

appengine-jrubyはJRubyを使ったRubyエンジンです。フレームワークとしてSinatraをサポートしています。SinatraはRailsほど大型でないWebアプリケーションに最適なフレームワークなので、GAEに用いるには最適といえそうです。データストア用のアダプタも提供されています。

gist: 269075 - Rails 2.3.5 on App Engine with TinyDS- GitHub

ピクチャ 159.png

http://gist.github.com/269075

Rails on GAEはJRubyを使ってRailsをGAE上で動作させます。Railsの開発速度をGAE上で活かす上では興味深いフレームワークです。なおデータストア周りがもっともやっかいなのですが、TinyDSというGemを使うことでJRuby上でデータストアが扱いやすくなります。

MOONGIFT: » さくっとRails on Google App Engineをはじめる「Rails on GAE」:オープンソースを毎日紹介

http://www.moongift.jp/2009/06/rails_on_gae/

TinyDS 0.0.1リリース(GAE/JRubyのdatastoreライブラリ) - urekatのスカンク日記3

http://d.hatena.ne.jp/urekat/20100103/1262562527

touchengine - Project Hosting on Google Code

ピクチャ 160.png

http://code.google.com/p/touchengine/

Touch EngineはGoogle App EngineとiPhone/iPod Touchを連携させるためのフレームワークです。データの連係にはXMLを用いています。認証システムやRESTfulにデータを取得、作成、更新するための仕組みがあります。自動的にモデルを同期する機能があります。

また、それ以外にも多数のフレームワークが開発されています。

neptunus - Project Hosting on Google Code
http://code.google.com/p/neptunus/
avgas - Project Hosting on Google Code
http://code.google.com/p/avgas/
gae-mvc-engine - Project Hosting on Google Code
http://code.google.com/p/gae-mvc-engine/
loxal - Project Hosting on Google Code
http://code.google.com/p/loxal/
appengine-framework - Project Hosting on Google Code
http://code.google.com/p/appengine-framework/

まとめ

Python/Javaのサポートに加え、JRubyやQuercus(PHP)まで実行できるGAE。フレームワークは多数出ていますが、まだデファクトと呼べるフレームワークは登場していないようです。むしろ既存の資産を活かしつつ、GAE向けに修正したり特化させている雰囲気があります。そう考えると自分が得意とするフレームワークのGAE版を探したり、開発する形態(FlexやiPhoneなど)に合わせてフレームワークを選定するのが良さそうです。GAEOをはじめとする特化型のフレームワークを採用する場合は、初期の習得コストが発生しますがその後の開発コストは低減する可能性があります。Djangoを得意とする場合はDjangoを活用しつつ、はじめてGAEを通じてPythonを学ぶのであれば特化型やチュートリアルの多いフレームワークを採用するというのがお勧めです。

# 2010年01月27日。一部修正(打ち消し線の部分)。Java用フレームワークにGWT、Gaelykを追加。


Comments