2007-02-18 [長年日記]
● 前半: Rails1.2 と REST
1.2最大の目玉である REST 対応について検証するセッション。まずは Rails1.2 での変更点に関するおさらいから。
1.1→1.2
| 機能 | 変更点 | 解決策 |
|---|---|---|
| prototype.js | Element.toggle の第二引数の挙動とか | ヘルパを使っていればOK |
| ActionMailer | deliver が smtp になった?(忘れた) | 気をつける |
| deprecated系 | @param, @session | @ は使わない |
| habtm は際どく生き残る | update_with_attribute は deprecated 入り | |
| paginate も生き残り? | will_paginate への乗り換え推奨 (参考3) | |
| foreign_key | class_name 指定時に必須 | 明示する |
| start_form_tag | block推奨に | footerをpartial派は非blockで |
| end_form_tag | 削除 (参考2) | 死亡 |
| GetText | なんかおかしいらしい | 1.9で対応済み |
| multibyte | 外人が考える他国語化 | UTF8以外の混在で死亡 |
| auto loading | 絶対バグってる | これも改悪 |
1.1→1.2の乗り換えでみんな苦労してるようで、だんだんと改悪に対してグチるスレな流れに。auto loading と multibye 対応だけは、本当に改悪だよね。とか言って。
おさらってる間に残り10分。慌てて REST の話に。
- route も対応したけど、キモは respond_to
- 1.1 から使えているため 1.2 では新鮮味がない
- respond_to でかなり DRY になるけど最後の表示部分の処理が煩雑
- そこで perform_filters
- perform_filters がない間は片手落ち (→ 本体に取り込ませようキャンペーン)
● 後半: RBatis
元は iBATIS という Java での実装で、それを Ruby へ移植したのが RBatis。ORM の実装らしいので、Rails の AR と何が違うの?競合するの?一緒に使えるの?あたりが気になるところ。その辺をソースを追いながら確認してみようというセッション。
RBatis のサンプルコード
class Product < RBatis::Base
statement :select_one, :find do |productid|
["SELECT * FROM product WHERE productid = ?", productid]
end
end |
ARとRBatis
| 機能 | AR | RBatis |
|---|---|---|
| 宣言的定義 | 好みで準備 | statement |
| 任意のSELECTクエリ | find_by_sql | statement |
| 任意の生クエリ | execute | statement |
| 複合PK | pluginで対応可能 (参考4) | ○ |
| 非オートナンバーPK | ○ | ○ |
| テーブル非依存のクエリ | Baseクラス | ○ |
| 結果セット属性アクセス | ○ | ○ |
| 結果セット属性の遅延評価 | ? | LazyAssociation |
| 結果セット属性のオブジェクト化 | 結果セット用サブクラス | ○ |
| 結果セット属性へのマスク | 結果セット用サブクラス | ○ |
| カラムマッピング | 結果セット用サブクラス | ResultMap |
| 集約 | aggregation | ResultMap |
iBATIS は多機能で Active Record パターンと比べるとメリットが色々ある。しかし、RailsのARフレームワークは名前こそARであるものの、同パターンは全体の2割程度の機能でしかないと言えるくらいのリッチなフレームワークであるため、iBATIS の恩恵は霞んでしまうようだ。以上より、セッションの結論は、残念ながら「それARで(ry」となってしまった。(※ 遅延評価だけは機能を追いきれていない)
RBatis にガッカリした参加者は、むしろ AR と Hibernate の機能比較にテンションが上がったという。
ARとHibernate
| PoEAA | AR | Hibernate |
|---|---|---|
| Single Table Inheritance | STI | Subclass |
| Class Table Inheritance | サポートなし | Joined Subclass |
| Concrete Table Inheritance | polymorphic | Union Subclass |
AR にも CTI が欲しいね、熊井ちゃん。
● メモ
- ruby-1.8.6-preview1 … 出たので Rails での検証 plz とのこと
- パンくず問題 … 正式名称は「パンくずリスト」。垂直方向へのナビゲーションパターン
- エア名刺 … 中身が入っていない名刺入れをぶら下げる大森さんの技
● 参考
- Rails勉強会@東京第15回 http://wiki.fdiary.net/rails/?RailsMeetingTokyo-0015
- end_form_tagへのDHHの意見 http://www.loudthinking.com/arc/2006_10.html
- will_paginate http://errtheblog.com/post/929
- Composite Primary Keys http://compositekeys.rubyforge.org/
- [公式] RBatis http://ibatis.apache.org/docs/ruby/
- エンタープライズRails http://capsctrl.que.jp/kdmsnr/wiki/bliki/?EnterpriseRails
- PoEAAのマッピングパターンとHibernate http://d.hatena.ne.jp/dufresne/20050517
- 勉強会RBatisのまとめスレ http://wiki.fdiary.net/rails/?RBatis
- ruby-1.8.6-preview1 ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6-preview1.tar.gz
[ツッコミを入れる]

