Ruby on Railsに触れる

体調も良くなってきたので、積読状態になっていた以下の3冊を眺めてみる。

初めてのRuby

初めてのRuby

10日でおぼえる Ruby on Rails入門教室

10日でおぼえる Ruby on Rails入門教室

Ruby on Rails入門優しいRailsの育て方

Ruby on Rails入門優しいRailsの育て方

ざっと見た感じで一言づつ感想をいうと「初めてのRuby」は薄い本ながらポイントが抑えてあっていい感じ。

わずか200ページの中にRubyのエッセンスが詰まっている良書。特に「なぜこうなってるのか」という部分の記述(Rubyらしらの解説)が多いのが良い。僕の周りにも何人か Ruby を始めたいと言っている人がいるけど、そういう人にはぜひ本書を進めたい。

【感想】初めてのRuby : フッ君の日常

という感想もうなづける感じ。
「10日でおぼえる Ruby on Rails入門教室」はすぐに環境を構築できる点がグッド。ただRubyRailsの説明が少ない気がする。
Ruby on Rails入門―優しいRailsの育て方」もRuby自体の説明が少ないけど、Railsの説明はしっかりしている感じ。

ただ個人的にはRubyはとっつきづらい印象がある。コード量が少ない分ぱっと見わかりにくいし、ブロックとか見るとなんか独特な言語だなあという感じ。やはりid:kenmaz先生の「5分でわかるRubyおよびRuby on Rails」を待つしかないか(笑)。

オブジェクト指向スクリプト言語という意味ではPythonぽくてPerlっぽくないんだけど、入出力のあたりはCっぽいし。
まあ僕自身Cのポインタで挫折してJavaに来た人間なのであまり他の言語は知らないんだけど。

RailsはCoCでフルスタックフレームワークということなんだけど、確かにSeasarRailsの影響が濃い気がする。
URLの作り方とかSAStrutsに似ているし、scaffoldもあるしね。

ちなにみtrunkにあるDoltengSAStrutsのscaffoldを生成すると以下のようになる。

(略)

public class DeptAction {

	@ActionForm
	public DeptForm deptForm;
	
	public List<Dept> deptItems;
	
	public DeptService deptService;
	

	@Execute(validator = false)
	public String index(){
		return list();
	}

	@Execute(validator = false)
	public String list(){
		deptItems = deptService.findAll();
		return "list.jsp";
	}

(略)

ちなみにRailsだと、以下のような感じ。

class MemosController < ApplicationController
  def index
    list
    render :action => 'list'
  end

  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
  verify :method => :post, :only => [ :destroy, :create, :update ],
         :redirect_to => { :action => :list }

  def list
    @memo_pages, @memos = paginate :memos, :per_page => 10
  end

(略)

なんか似ている感じ。まあRailsな人からは以下のような意見もでるようだけど。

* 遷移先のJSPファイル名とメソッド名をマッピングさせるお作法は、メソッド名と戻り値に同じ文字列が出てくるのでDRYっぽくない
* せっかくJavaを使っているのに、戻り値がタイプセーフじゃないのはダサい

よりスマートな画面遷移? - 出羽ブログ

あとはマイグレーションは面白いね。DSLっていう考えも新鮮。設定ファイルをプログラム言語自体で書くって言うのはなんかすごいね。フォーマットとしてはMakefileに似ている感じかな。Antのbuild.xmlほど冗長じゃないし、Maven2のpom.xmlほど意味不明じゃないし(笑)。
こんどS2JDBCにも追加されるそうだけどどうな風になるんだろ。DSLは使わないといっているけど、何かしらの設定ファイルを用意してバッチファイルでもたたくんだろうか。