«前の日記(2007-12-21 (金)) 最新 次の日記(2007-12-23 (日))»  

まちゅダイアリー


2007-12-22 (土)

Rails 2.0 ファーストインプレッション

Rails 1.2 系をほとんど使わないうちに、 Rails 2.0 が出た。 1.2 系は WEB+DB PRESS の記事を読んで REST 志向になった (scaffold_resource とか) ということを知ってたくらいで実際に試してみたことは無かった。 Rails 2.0 で、 scaffold_resource が標準になったってことで、ちょっと試してみた。

scaffold で作られるソースを比較してみる。

scaffold の実行

Rails1.2 のときは model とデータベースを作って、そのあとに scaffold を作るようになっていた。

$ ./script/generate model item body:text
$ rake db:migrate
$ ./script/generate scaffold item

Rails2.0だと、いきなり scaffold でOK。モデルもデータベースのスキーマも作ってくれる。

$ ./script/generate scaffold item body:text

scaffold が生成したコードを使っていて気がつくのは URL が変わったこと。これまでは

http://localhost:3000/items/edit/1

だったのが、

http://localhost:3000/items/1/edit

になった。 今までは「コントローラ名 + 動詞 (アクション名) + 目的語 (対象モデルのID)」だったのが、「コントローラ名+目的語+動詞」になった。

ビューでも form_for というメソッドが使われるようになってる。

<% form_for(@item) do |f| %>
  <p>
    <b>Body</b><br />
    <%= f.text_area :body %>
  </p>

  <p>
    <%= f.submit "Update" %>
  </p>
<% end %>

あれ…フォームに入力した値の送信先が書いてない。

Rails1.2だと、

http://localhost:3000/items/update/1

みたいに update アクションを呼び出していた。 Rails2.0だと、

http://localhost:3000/items/1

に対して POST することで、自動的に update アクションが呼ばれるみたい。 うーん。 REST 志向だ(本来は POST じゃなくて PUT だけど、そこはいろいろと)。

class ItemsController < ApplicationController

  # PUT /items/1
  # PUT /items/1.xml
  def update
    @item = Item.find(params[:id])

    respond_to do |format|
      if @item.update_attributes(params[:item])
(以下略)

印象

REST 志向になって分かりやすくなった反面、ブラックボックスも増えたな…というところ。 例えば、ビューで form_for と書くと、なんで update アクションが呼ばれるのかが分からない。 たぶん、 routes.rb にて

map.resources :items

って書いてあるからなんだろうけど、 map.resources の中身が分からないとなんとも。 趣味で使う分には好きだけど、仕事で使うとなると、ちゃんと仕組みを理解してからじゃないと、ちょっと怖いかも。

Tags: Rails

Rails の楽しさは本質に特化できること

高橋さんの Twitter より。

『たのしい Rails 』について妄想中

そもそも Rails の「たのしさ」の中心はどこにあるんでしょうね?

個人的には Ruby のたのしさも Rails のたのしさも似ている気がしている。 それは、「余計なことを書かずにやりたいことをシンプルに表現できる」こと。 例えば ActiveRecord を使うと、 SELECT * FROM items WHERE order_id = 3 と書かずに、 order.items と書けるとかね。

WEB+DB PRESS Tech Meeting の懇親会で yohei さんとお話したときに、 REST 本のサンプルはほとんど Ruby で書かれているという話をお伺いした。 サンプルコードが Ruby で書かれている理由は、 Ruby だとコードをシンプルに書けてサンプルの意図を説明しやすいからってことだった。 これには納得。

日経ソフトウエアに WebAPI の記事を書いたときに、サンプル(地名しりとり)を PHP で書くか Rails で書くか悩んだ。 そのときも結局、プログラムの本質に特化して書ける(つまり説明しやすい)っていう理由で Rails にしたんだった。 Rails を知らない人向けに概要を説明するコストを割り引いても、 Rails の方がサンプルを理解してもらいやすいだろうなと思ったんだよなぁ。

個人で遊ぶだけなら「楽しい」だけで書いていけばいいんだけど、実際にサービスで使おうとすると違うかな。 やっぱりそれなりに中身を理解してないと、トラブル時に対応できないだろう…って思ってる。 この辺は自分が仕事で使うことは当分無いので、実際に使っている方の感想を聞きたいところだなぁ。

そういえば、1981sオフでも、お仕事で Rails を使っているという方が多かった。 これって結構大きな変化だよなぁ。

Tags: Rails