#01 Teng is simple and lightweight ORM

2011-12-01

こんにちは!
今年はボクが作ってるTengというPerlのORMについて
25日かけて紹介してみたいとおもてるんだ。


師走ってことで仕事もあっていろいろあって忙しいから完走できるかどうか不安なんだけど
みんなに是非つかってもらいたいから頑張るんだ。


この記事執筆時点のTengの最新バージョンは0.14_03のdev releaseとなっています。
25日間でTengのバージョンがupされるかもしれませんがその場合は注意書きをいれますのでご注意ください。


Tengのリポジトリはhttps://github.com/nekokak/p5-TengこちらですのでCPANにupされる前に試したい!
Tengにpatches and testsを叩きつけたい!という場合はforkしてpull requestしてくだされば
よきにmergeしますよ。


Tengはなるべく依存モジュールが増えないようには気をつけていますが無駄な再発明をしないために
一部CPANモジュールに依存していますが、installに躓くようなモジュールはないはずですので、
サクっとinstallできるはずです。


バックエンドのデータベースはなるべく誰でも利用できるようにSQLiteを用いてサンプルコードを展開していこうと思います。


基本的なTengの使い方をこれから紹介していくわけですが、
わからないよドラえもんといったような場合は
nekokak at gmail.comにメールを送ってもらうか
#dbix-skinny@irc.perl.orgにjoinして話しかけてもらえればと思います。


本編に入る前に今日はざっくり思想的な部分をかいてみます。

皆さん普段の開発ではORMつかってますか?ナマDBIですか?それともDBIx::Simpleとかちょっとしたラッパーですか?

最近はお会いする人によくDBIx::Skinnyを使ってます!って言ってもらい開発者としてとても嬉しいです。
自分的にもDBIx::Skinnyは良い塩梅でつかえてて
ナマのSQLインタフェースとクエリビルダーを使う場合のインタフェースを共通化できなかなかいいなと思っているわけです。


ORMをdisってる人の意見でよく、どんなSQLを発行してるかわからんというのがあると思います。
でもそれってクエリビルダー+DBIの場合を考えると結局どんなクエリが生成されるか分からないわけです。
なのでORMをdisるポイントとしては微妙にずれるわけですね。
正確にはクエリビルダdisなわけです。

プロジェクトや人によっては1メソッドに1SQLだけを書き、ちょっとでもSQLが違う場合はメソッドをわけるそうな。
まぁそれを否定するつもりはないですが私はno thankyou'`,、('∀`) '`,、ちうことで使えるところではクエリビルダーもりもる使えばいいと思ってます。
いやわかるよ、ちょっとでも検索条件ちがえば別の挙動をするもんだし、orderがascかdescで取得情報が全然かわってくるので分けたいand分けるというのも。でも、私はno than(ry

それはいいとして、SQLをメソッド単位で細かくメソッドに分けた開発をする場合でもTengなら全く問題ないですね。
Tengにはsearch_by_sqlというナマSQLを受け付けるインタフェースがあるのでこのような状況でも問題なく利用することが可能なのです。


Tengは
insert, update, deleteはよくあるORM風に簡単なメソッド呼び出しでクエリを自動生成してくれて実行
selectは単純なクエリに関しては簡単なメソッド呼び出し一発でクエリ生成して実行
複雑なselectは自分でもりもりSQL書いてsearch_by_sqlもしくはsearch_namedメソッドを利用して実行することができます。


Tengはおそらくあなたが今まで使ってきたORMと比べると貧弱にかんじるかもしれません。
Teng自身がschemaのmigrationをしてくれませんし、強力なリレーション設定のサポートもありません。
しかしTengは簡単なことを簡単に難しことも簡単に取り扱う柔軟性の高いORMだと思います。


Tengがみなさんの開発の一助に慣れれば良いなと心から願います。