Block Rockin’ Codes

back with another one of those block rockin' codes

Django-nonrelプロジェクト

Google App Engine(GAE)でDjangoを使用するとき、色々方法はあるけどapp-engine-patch(aep)を使っていた人も多いのではないでしょうか?

しかし、app-engine-patchはもう開発が止まっていて、久々にホスティングページをのぞいてみたところ、以下のようなアナウンスがありました。

New project announcement
app-engine-patch is dead. Join the Django non-relational project and follow the Django nonrel blog if you want to use Django's ORM on App Engine and other NoSQL / non-relational databases. We'd also be grateful for any help.


aepは死んだ、これからはDjango non-rerationalだ!DjangoでGAEやその他NoSQL/NoRDBを使いたかったらプロジェクトのblogを見てくれ、開発者も絶賛募集中です!

ということで、aepの開発者たちは以下のサイトで別プロジェクトを進行中のようです。面白そうなので紹介します。

Open-source Django, App Engine, NoSQL projects | All Buttons Pressed

まずaepの後継ライブラリはDjangoappengineがそれにあたるもので、実際にappengineで使用するには、以下のような感じで同時に進んでいる複数のプロジェクトを組み合わせて実現していくことになるようです。
djangoappengine - Django App Engine backends (DB, email, etc.) | All Buttons Pressed

.../django-nonrel/django
.../djangoappengine
.../django-testapp
.../django-testapp/common-apps/djangoappengine -> ../../djangoappengine
.../django-testapp/common-apps/django -> ../../django-nonrel/django

要するに、

の三つを合わせて使用するということです。

djangoappengine

Djangoappengine contains all App Engine backends for Django-nonrel e.g. the email backend and the query backend for Django. In addition we provide a testapp which basically consists of a modified manage.py file to support the App Engine development server, and all corresponding settings in order to specify App Engine as the backend for Django-nonrel. Use it as a starting point if you want to use App Engine as your database for Django-nonrel. We've published some information in a blog post.
We will add some documentation, soon.


DjangoappengineはDjango-nonrelをGAEで使うためのバックエンド、emailのバックエンド、(おそらくGQL)クエリをDjangoで使うためのバックエンドを提供します。
加えてGAEのdevelopment serverをサポートした拡張manage.pyや、Django-nonrelのバックエンドとしてGAEを使うための全ての基本設定を書いたtestappを提供します。
このアプリは、GAEをDjango-nonrelのバックエンドとして使用するための出発として使ってください。詳しいことはブログに書きます。

ドキュメントもそのうち書くから!

だそうです。

django-testapp

基本的な設定があらかじめされているプロジェクトの雛形です。
これをもとにDjangoのアプリを足していくことができるそう。
どうも設定が色々詰まっているだけで、サンプルのアプリ等は入ってないようです。

wkornewald / django-testapp / source / — Bitbucket

django-nonrel

Django-nonrel is a port of Django with the goal of supporting non-relational databases. Sorry, not much to see here, yet. We've published some information in a blog post.
We'll add some documentation, soon. For App Engine installation instructions visit the djangoappengine project site.


Djago-nonrelはDjangoが様々なnon-rerational databases(RDBではないデータベース)をサポートすることを目的としたものです。詳しくはブログで。

ドキュメントもそのうち書くよ。ちなみにGAEでの使用に関してはdjangoappengineの方を見てくれ。

とのこと。

このプロジェクト群の持つ意味

まず、Google App Engineは現在そのままでもDjangoを使うことが出来ます。
現在PythonのApp Engine SDKの最新はver1.3.1ですが、確かver1.2.5くらいからDjango0.96, 1.0.2, 1.1がサポートされており、設定により使い分けることが出来ます。


もちろんGAE上で様々な制約があるので、普通にサーバを建てて動かしていたDjangoがそのまま動くかというとそうではありません。一番大きいのはやはりDatastore(要するにBig Table)の利用です。
DjangoのModelは基本的SQL(RDB)に強く依存しているため、この部分はそのままは動きません、それでも色々なサポートで表側はまあなんとなくローカルのDjagnoと同じように出来ました。
しかし、Djangoの売りである管理サイト(adminサイト)だけはそうはいかなくって、これはModelの構造をもろに引き継ぐので、Djangoの標準のモデルから外れるとうまく行かない。
だからGoogleも、Djangoをサポートしてるけどadminはサポートしない(代わりに簡単なサイトは用意するよ)というスタンスでした。


Djagnoはフレームワークの中に標準で管理サイトを持ち、これはCMS的な形で使えるようになっています。Djangoはこの管理サイトも含めて評価を集めているので、それが使えないのはDjangoユーザにとってはとても痛手となる。
そこでGAE上のDjangoでadminサイトを使えるようにするため、app-engine-patchやDjango-helperなんかを使っていました。


今回のプロジェクトは、その管理サイトも含めてGAE上でDjangoを移植するためのプロジェクトという訳ではなく、そもそもDjangoのモデルとして標準でnon-rel DBであるGAE(DataStore)をサポートしてしまおう。それによってGAE上でも管理サイトを使えるようにしようというものです。


つまり、

  • django-nonrel Djangoのmodelとしてnon-relDBをサポートする。
  • djangoappengine そのサポートを使って、GAEでadminサイト(他色々)を使えるようにする。
  • django-testapp それらの設定のプリセットを作ったから、ここにアプリを足せば普通にDjangoを使えるよ。

ということになります。


そして何よりも注目したいのは、やはりDjagno-nonrel。これまでの話のように、あくまでDjango-nonrelは"GAEをサポートする"ではなく"BigTableを含めたnon-relDBをサポートする"を目的としています。


ちなみにDjango-nonelのtaskの中には以下のようなnon-relDBが記述されています。
Google Drive

  • App Engine backend
  • SimpleDB backend
  • MongoDB backend
  • CouchDB backend

最近話題non-relDBを色々とサポートする予定のようですね。(実際にはApp Engine以外はまだまだのよう。)
このDjagno-nonrelは、appengineに依存するものではなく、appengineを含めたnon-relのラップということだと思われるので、appengine以外でDjangoを使う場合でも使えるものになるだろうと思われます。
現在Djangoが正式サポートしているRDBは、"MySQL","Oracle","PostgreSQL","SQLite"なので、たとえばこのプロジェクトが進めばDjagnoでのM-V-Tアーキテクチャ上でM(Model)の部分の選択肢が純粋に増える可能性があるということです。


non-relDBはその有用性とかが最近良く議論されています、それをアプリケーションで使う、フレームワークに取り込むと言ったプロジェクトはまだまだ少ないのではないでしょうか?non-relやnon-sqlのDBは今後も増える可能性があるし、こういったプロジェクトはDjangoに限らず、Webアプリのアーキテクチャの発展のためにとても重要だと思います。


実際はまだまだ進行中なのでドキュメント等もまとまっていないけど、Blogの方は色々と書かれているようです。まだ一部しか目を通していないけど、これは面白そうなプロジェクトだと思います。
というか、他にも色々面白そうなプロジェクトが走っているよう。もちろん開発者も絶賛募集中みたいです。


次回は(できたら)、

を使って、DjangoプロジェクトをGAEにデプロイでもして紹介しようかと思います。