cakephp用mongoDB datasourceを作りました

非リレーショナルデータベースで、ドキュメント指向データベースといわれているmongoDBをCakeから簡単に使うために、datasourceを作りました。現在tagで0.1をリリースして、ブランチで0.2を開発中。
http://github.com/ichikaway/cakephp-mongodb
https://github.com/ichikaway/cakephp-mongodb

mongoDBの本家サイトにも取り上げてもらいましたgithubのtagのページをtwitterでつぶやいてしまったので、リンクがバージョン0.1のタグのページになっちゃってますが。。。


まだ業務でどう使うとか全然見えてないんですがw、なぜmongoDBなのかと言うと、データソースを作ってみたい、誰も手をつけてないmongoDB、mongoDBは海外でホットな感じがするしという理由だけで作り始めました。世界中の人に使ってもらえる何かを作るって、ワクワクして楽しいというのが一番の理由です。
楽しさこそ、エンジニアの命ですね。作ってるときはかなり熱中してます。海外の人からもレスポンスくるのもうれしいし。

関係ないですが、安藤さんのこの記事はしびれます。
「おれたち世界一になれますか?」世界を目指せばエンジニアはもっとハッピーになる


参考
mongodb.org
http://d.hatena.ne.jp/nazone/20091126/p1
http://slashdot.jp/~taro-nishino/journal/494057

cakephpでデータソースを作る際に、参考になったサイト
http://d.hatena.ne.jp/gapao/20090521/1242907727


noSQL系はスキーマを決めなくてよくて、保存する時の構造そのままをsaveできます。ただ、cakeのmodel::save()の場合は、スキーマが決まってないといけなくて、datasource::describeでスキーマ情報を返さないとsaveしてくれません。とりあえず各モデルファイルにスキーマ情報を書くってことで逃げました。これをsave前に書き換えるだけでどんな構造のものでも保存できるという、ちょっと手間がかかることをしてます。

cakeの場合、model::_schemaにスキーマ情報を定義しても、model::useTabel=falseしてないと、_schemaが消されてしまい結構はまった。。。そしてmodel::_schemaで定義してないフィールドはsave時に切り捨てられる。。。とかとか、色々と紆余曲折があって現在の形になってます。
データソースは楽しくて、何かとcakeのコアコードを追いかけないといけなくて、勉強になります。

バージョン0.2からはもうちょっと使いやすいように考えていきたい。
ちなみに開発環境はphp5.3.1 + pecl mongo1.0.3 + cakephp1.3betaです。


追記
tkykmwさんに教えてもらったのですが、データソースでisInterfaceSupportedでfalse返せば、model::_schemaは消されないとのこと。情報ありがとうございました。

ver2.0では、datasourceのdescribe()でスキーマを返すようにして回避する予定です。スキーマは結局modelに定義しなきゃならないんだけど、usetTable=falseは指定しなくてよくなります。model::save()で各フィールドが存在するかschemaを見てチェックするのはどうしても回避できそうにないんだよねぇ。。