ようやくRuby/Railsを使いだした

2ヶ月前くらいから、遅ればせながら Ruby on Railsを仕事で使い出した。諸般の理由でちょっと古い 1.2.6 なんですが。今までずっとJavaだったので、仕事でRubyを使うのも初めて。

感じたことを書いてみる。

  • やってることは Struts とほとんど変わらないので、入門は楽。
  • ただ、基本的にスレッドセーフではないというのが多少びっくりした。ひとつの mongrel は同時に1リクエストのみ処理して、同時に複数リクエスト処理したければ mongrel 自体の数を増やす?ということらしい。
  • ActiveRecord はすばらしい。Hibernate の面倒くささに比べると天国。Open Session In View を使うべきか否か!とか下らないことも気にしないで済む。親切すぎるので、何も考えていないと一覧表示とかでSQLが発行されまくることになるけど、:include オプションとか便利なのが提供されているので対処も楽。あと with_scope もいい。
  • 型が無い云々のデメリットはほとんど感じられなかった。そもそも ${obj.attr} とか書かなきゃいけないJSPを使ってたり、いろいろなものをJavaコードからXMLに追い出したりしている時点で、静的型のメリットだのは半減してると思っているので……。型が無くて困るのはIDEでメソッドの自動補完がお馬鹿になることくらい? 保守段階に入るとまた違った感想になるかも。
  • 何か動作に疑問があったときでも Spring, Hibernate と比べてコード量が少ないので追いやすい。ソースがすぐ解読できる量なので、ドキュメントが少ないのは気にならなかった。
  • いわゆるビジネスロジックをどこに書くべきか迷う。lib/ でいいのかな?
  • モンキーパッチ万歳。datetime_selectの表示をカスタマイズできるパッチとか、find で :include と :select を同時に有効にできるパッチとか恐れを知らない素人丸出しでいろいろ上書きしました。 でも Array とかの組み込みライブラリを上書きする(メソッド追加ではなく上書き)のはどうかと思う。やったのは私じゃないが、スタックトレースで each と orig_each が繰り返し現れるのを見るたびに落ち着かない気分になる。
  • その他、全体として「便利なものはどんどん提供しよう」という哲学が感じられるのがいい。
  • まだ本格的に負荷試験をしていないので遅い遅い言われているのが本当かはわからない。いかにも遅そうではあるけど。
  • プラグインが多く、どれがスタンダードなのかよく分からないので何を使うか迷う。使うことが決まっているもの(Rails)の中身を理解するのと比べて、使うかどうかわからないプラグインのソースを全部読んでどんなことができるのか、信用できるのか評価するのはちょっと辛いので、この辺はドキュメントの無さが困るところ。

落とし穴だと思ったところ

  • mass assignment。Hoge.new(params[:hoge]) とか @hoge.attributes = params[:hoge] とか。attr_accessible/attr_protected を指定しないと危ないというのを後で知った。
  • 引数で渡す Array や Hash は、内容が書き換えられる場合があるということ。「D・R・Y! D・R・Y!」ということで find の :conditions を変数に入れて使い回していたら :readonly => true とかが追加されてバグったりした。

これくらい?

あと、ロギングだのデプロイだのキャッシュだの面倒そうなところは人任せなのでそっちも何とか勉強しないと。非常に無気力な人間なので、追い込まれるか仕事でつかうことがわかるかしないとやる気にならない。なので勉強しようとか書いて多少なりともやる気が出ればいいねという……。