イッソノ〜そろそろPHPでの最強CouchDBライブラリ決めようぜ (第1回)


ナカシマ「イソノ〜。今日もテンプレートエンジン界のオーバーテクノロジーで遊ぼうぜ〜」
イソノ「そうだな〜。今日はスクレイピングした結果をさくっと保存したいな〜。*1
ナカシマ「それならやっぱりCouchDBナウいよ。」
イソノ「NoSQLって言うんだっけ?」
ナカシマ「CouchDBはドキュメント指向DBって括りに入るね。」
イソノ「最近だと、MongoDBのほうがPHP界隈(日本の)だと注目浴びてるんじゃないか?」
ナカシマ「それを言いだすと、この記事がなんの意味もないじゃないか。。。」
ナカシマ「Futonというアドミン画面があるからvar_dump好きにはオススメだよ」


イソノ「で、PHPCouchDBを扱うにはどうしたらいいんだい?」
イソノ「CouchDBの導入記事にはcurlが載ってるからexec("curl"..なのかな?」
ナカシマ「お前はSnoopyか!お前はSnoopy.class.phpか!」
ナカシマ「CouchDBAPIはHTTPだから、httpリクエスト送れば良いってことになるけど、
CouchDB用のライブラリはいくつかあるんだ。」
イソノ「あ、CouchDBwikiを見ると4つばかりライブラリが載ってるからそれの中から選ぶんだね」
ナカシマ「バカを言うなよ。CouchDBを扱うPHPライブラリは10は越えるよ。」
イソノ「まるでフレームワークの状況じゃないか。。」
ナカシマ「以下にリストとして載っけてみたよ」
http://wiki.github.com/sasezaki/diggin/php-couchdb-clients


ナカシマ「フレームワーク同様、各ライブラリは特徴があるし、選定条件も状況によってまちまちになると思うんだ」
イソノ「最強のを選ぶんじゃなかったのかい?」
ナカシマ「え?」
イソノ「え?」
ナカシマ「対応するPHPのバージョンってのがあるけど、CouchDB用の選定基準になるのはいくつかあるよ。」
イソノ「どういうことが挙げられる?」
ナカシマ「並べてみようか」

- PHPのバージョン
- 対応するCouchDBのバージョン
- ライブラリが対称とする範囲("モデル"に特化している場合がある)
- View対応
- AttachMent対応
- ViewServer利用
- リクエスト送信方法(fget,stream,curl,pecl_http)
- JSONエンコード/デコード方法
- 他のフレームワーク・ライブラリとの連携・依存性

ナカシマ「CouchDB自体がまだ開発途上だから対応するCouchDBのバージョンってのも重要だね」
ナカシマ「だから必然的にメンテされてるかってのも重要だと思うんだ」

----- Object_Freezer

イソノ「条件にはライセンスとかテストコード入ってるかとかは入らないのかい。」
ナカシマ「もちろんそうだね。」
イソノ「じゃあテストPHPUnit作者のObject_Freezerってのを……」
ナカシマ「ちょっとまった。ライブラリ名確認したかい?」
イソノ「オブジェクトをふりーずするんだろ?」
ナカシマ「これはPHPオブジェクトのストアリングの一つにCouchDBがあるってだけなんだ。」
レスポンスステータスコードをチェックしてるのか謎なところもあるんでCouchDBクライアントとしては全然おすすめできないね。」

----- PHP-on-CouchとPHPillow

イソノ「じゃあ有力なクライアントって何?」
ナカシマ「今のところ知名度も考慮すると、PHP-on-CouchとPHPillowだろうね」
イソノ「PHP-on-Couchってこの前IBMの記事に載ってた?*2
ナカシマ「そう。更新が活発でCouchDB0.9からでの特殊リクエストメソッド"COPY"も意識されてるようだしね。枯れてないとも言えるけど」
イソノ「やたらあるprint_rのコメントアウトが気になるんだけど。。」


ナカシマ「PHPillowはezのコミッターでもある人が作者なんだ。」
イソノ「ezって最近Apache Incubatorにプロポーザル出したあのez?」
ナカシマ「そう。PHPコミッター(というか毎コミ記事・後藤さんネタ元)であるJohannes Schlüter
も紹介してるしね。*3
イソノ「CouchDB自体もApacheプロジェクトだし、相性抜群って訳だ。」
ナカシマ「PHPillow自体がezコンポーネントって訳じゃないらしいけどね。」

----- Phly_CouchとSopha

ナカシマ「次に紹介したいのは、ZFのコミッターでもあるShahar EvronのSophaだ。」
ナカシマ「shevronはZend PHP
カンファレンス2009で”Introduction CouchDB with PHP"っていう講演をしてるよ」
イソノ「あれ、ZFのコミッターが作ったものってリードのマシューが作ったPhly_Couchがあるよね。」
ナカシマ「たしかに、Phly_CouchはZFのプロポーザルにあがったりしてるけど、Attachmentに対応してる節はないししばらくメンテされてないみたいなんだ」
イソノ「あれ、このSophaって中身見るとZFそのものを使ってないの?」
ナカシマ「そう、1.8ぐらいの頃のZFから一部コンポーネントをポートしてあるよ。」
イソノ「なんでそんなことを。。」
ナカシマ「オトナ ノ ジジョウ ワカリマセン」


……第2回につづく(?)