<< >>

2007-02-18 [長年日記]

[Rails]Rails勉強会@東京第15回

今回のポジペ

http://rails.wota.jp/tokyo/pp/200702.html

前半: Rails1.2 と REST

1.2最大の目玉である REST 対応について検証するセッション。まずは Rails1.2 での変更点に関するおさらいから。

1.1→1.2

機能変更点解決策
prototype.jsElement.toggle の第二引数の挙動とかヘルパを使っていればOK
ActionMailerdeliver が smtp になった?(忘れた)気をつける
deprecated系@param, @session@ は使わない
habtm は際どく生き残るupdate_with_attribute は deprecated 入り
paginate も生き残り?will_paginate への乗り換え推奨 (参考3)
foreign_keyclass_name 指定時に必須明示する
start_form_tagblock推奨に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

機能ARRBatis
宣言的定義好みで準備statement
任意のSELECTクエリfind_by_sqlstatement
任意の生クエリexecutestatement
複合PKpluginで対応可能 (参考4)
非オートナンバーPK
テーブル非依存のクエリBaseクラス
結果セット属性アクセス
結果セット属性の遅延評価LazyAssociation
結果セット属性のオブジェクト化結果セット用サブクラス
結果セット属性へのマスク結果セット用サブクラス
カラムマッピング結果セット用サブクラスResultMap
集約aggregationResultMap

iBATIS は多機能で Active Record パターンと比べるとメリットが色々ある。しかし、RailsのARフレームワークは名前こそARであるものの、同パターンは全体の2割程度の機能でしかないと言えるくらいのリッチなフレームワークであるため、iBATIS の恩恵は霞んでしまうようだ。以上より、セッションの結論は、残念ながら「それARで(ry」となってしまった。(※ 遅延評価だけは機能を追いきれていない)

RBatis にガッカリした参加者は、むしろ AR と Hibernate の機能比較にテンションが上がったという。

ARとHibernate

PoEAAARHibernate
Single Table InheritanceSTISubclass
Class Table InheritanceサポートなしJoined Subclass
Concrete Table InheritancepolymorphicUnion Subclass

AR にも CTI が欲しいね、熊井ちゃん。

メモ

  • ruby-1.8.6-preview1 … 出たので Rails での検証 plz とのこと
  • パンくず問題 … 正式名称は「パンくずリスト」。垂直方向へのナビゲーションパターン
  • エア名刺 … 中身が入っていない名刺入れをぶら下げる大森さんの技

参考

  1. Rails勉強会@東京第15回 http://wiki.fdiary.net/rails/?RailsMeetingTokyo-0015
  2. end_form_tagへのDHHの意見 http://www.loudthinking.com/arc/2006_10.html
  3. will_paginate http://errtheblog.com/post/929
  4. Composite Primary Keys http://compositekeys.rubyforge.org/
  5. [公式] RBatis http://ibatis.apache.org/docs/ruby/
  6. エンタープライズRails http://capsctrl.que.jp/kdmsnr/wiki/bliki/?EnterpriseRails
  7. PoEAAのマッピングパターンとHibernate http://d.hatena.ne.jp/dufresne/20050517
  8. 勉強会RBatisのまとめスレ http://wiki.fdiary.net/rails/?RBatis
  9. ruby-1.8.6-preview1 ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6-preview1.tar.gz