Python ウェブフレームワークの現況¶
全体的な状況はこんな感じらしい。
Django, Flask がやはり人気があるようだが、 これらは URLルーティング + ORマッピングなデザインだから 個人的には興味がない。
ただし、Django には GeoDjango というものがあるようで、 これは DB に PostGIS などを用いて空間情報を扱えるようにした 拡張らしい。暇で暇で仕方が無いような時があったら調べてみよう。
オブジェクト指向(的)のフレームワークとしては
CherryPy
Grok, Dolmen
Pyramid, Substance D
が見つかった。
CherryPy¶
PythonのWebフレームワーク「CherryPy」 に依ると、これはURL解決にトラバース方式を採用している。
データベースについてはフレームワークとして何もサポートしていないようで、 自分で好きなものを選んで自力で使え、ということのようだ。 例えばこの チュートリアル では sqlite3 をインポートして直接 SQL を投げている。 PyPI に CherryPy 用 SQLArchemy ツールがあるので、 そういうものを組み込めばいいのか。
Zope だとデータベースへのアクセスはフレームワークが一手に処理してくれて、 それに慣れていると、自分でデータベース周りのコードを書かなくちゃいけないのは 不安で仕方ない(トランザクション処理とかが不十分になりそうで)。
最新版は 3.6.0 (2014-09-14)。
Grok, Dolmen/Cromlech¶
Zope 3 の発展系。
Grok は Zope 3 に対して
ZCML を減らす(代わりに python コード中に書く)
ファイル構成やクラス名などに関する暗黙の規約を導入する
という変更を加えたもの。ZTK の上に grokcore.* とか megrok.* とかの ラッパーをかぶせている、という感じか。
この変更が便利かどうかは場合によるような気がする。ZCML は コントロールをモデルとビュー(python コード)から分離するのに良い仕掛けであると 思うのだが、まぁ確かに面倒と言えば面倒くさい。 単純なアプリを作るんだったら混ぜこぜの方が楽かも知れない。
Dolmen/Cromlech は Grok を元に派生した亜種で、 公式サイト に拠ると、implementaion と definition の厳密な分離を指向しているらしい。 詳細な記述がないので精確な意味は理解できないが、Zope 3 の開発経験から 想像するに、モデルとビューの役割分担が曖昧なところを問題視しているのだろう。 http request を受けて処理するのはビューなので、データ処理コードは ついついビューに書きがちで、モデルの内部構造に依存したコードを 書いてしまう。つまりカプセル化を軽視してしまう傾向がある。 Dolmen/Cromlech がこれをどのような方法で回避しようとしているのか、 サンプルコードもチュートリアルも見当たらないので解らない。
現在の開発状況はよく解らない。 専用の PyPI らしきところを見ると、細々とアップデートされているようだが。
Pyramid, Substance D¶
Pyramid は Django や Zope にインスパイアされた折衷的フレームワークで あるらしい。Django のように URLルーティング + ORマッビング方式にもできるし、 Zope のようにトラバーサル + オブジェクト指向DB にもできる。 Grok のようにデコレータを使ってもいいし、Zope のように ZCML で コントロールすることもできる。
特に、ZODB に対応しており、プロジェクト生成時に選択できることは 個人的には重要な点である。
開発は活発で、ユーザも多そうだ。ただし Zope 的に使っている人が どれくらい居るのか不明。
Substance D は、Pyramid 上で動くアプリケーションサーバで、公式サイトで 記されている通り、 Zope 2 に似ている。 データベースには ZODB を使うようだ。
正式リリース版というものは存在せず、ひたすら Github 上で開発が続いている らしい。既に充分に実用的なのだろうか。ユーザがどれだけ居るのかも 判らない。
っと、twitter に "#SubstanceD release coming soon" と流れているな。