なか日記

一度きりの人生、楽しく生きよう。

『Ruby on Rails 4 アプリケーションプログラミング』を読んだ

Ruby on Rails 4 アプリケーションプログラミング

Ruby on Rails 4 アプリケーションプログラミング

Ruby on Rails 5が出るような気がしないでもないですが、別に気にしてない。だって、「今」Railsに関する情報が欲しかったんだもん。

きっかけは1月に参加したゆるふわ.rb*1。Railsはもちろん、Rubyもよくわかってないけど、旨い魚を頂きながら、お酒を飲みながら話ができるというので参加してきた。

そこで、Railsの話を聞いて、どんなものか知りたいと思った。知ってればもっと参加してる人達と話ができると思ったし、Railsのことを「ふにゃっとしてる」と表現してたのがどういうことか知りたかったし、「Javaから移ってみて、ユーザーに価値をより簡単に提供できる」と感じたのを自分も感じておきたいと思ったから。

前々から気にはなってた。ソニックガーデンの倉貫さんの話を初めて聞いた時だったかな。でも、「仕事で使うことはなさそう」とか、「あちこち手を出すくらいなら、ASP.NET MVCをもっと勉強した方が…」とか、しょーもないことを考えてた。別にいいじゃん、やりたいことやれば。

目次

第1章 イントロダクション
第2章 Ruby on Railsの基本
第3章 Scaffolding機能によるRails開発の基礎
第4章 ビュー開発
第5章 モデル開発
第6章 コントローラ開発
第7章 ルーティング
第8章 テスト
第9章 クライアントサイド開発
第10章 Railsの高度な機能

読んでみて

ASP.NET MVCと比べながら読むことができた。似た流れを組む技術のことを知ってると、それと比較しながら読めるので面白いね。

最初に感じたのはDRYが徹底されてるってこと。例えば、Scaffoldingで自動生成した時点で新規登録画面と編集画面で入力項目は部分テンプレートとして共通化されてるとか、要求されたフォーマットに応じて使用するテンプレートを使い分けてくれたり。

次に感じたのは「何でもできそう感」。「至れり尽くせり感」といってもいいのかもしれない。その分、知ってないといけない前提知識というのは多くなるけど、使いこなせば確かに強力で、開発効率は高いんじゃないかと思う。

例えば、unscopeメソッド。クエリメソッドによる条件を解除するものだけど、こんなもの使うシーンあるの?って思った。

@books = Book.where(publish: 'ほげ').unscope(:where)

しかし、読み進めていくとモデルの定義にデフォルトとなるスコープ(条件やソート順)を設定することができることを知る。 「データ取ってくるのにお決まりの条件があるの?ユー、常にその条件でデータ取ってくるようにモデルの定義に埋め込んじゃいなYo!」という感じか? 例えば「削除フラグが立ってるものは取ってこない」なんてわかりやすいかも。何だそれ、便利そうじゃん。

一方、下の様なコードを見て「あ、デフォルトのスコープを解除してるんだな」って理解できるかどうかはそれなりにRailsのこと知ってないと難しいよね。まぁ、それはどのフレームワークを使う場合でも同じことが言えるわけだけど。

@books = Book.unscope(:where)

この本の使い方

手元に置いておいて、リファレンスとして都度参照するのがいいと思う。なので、Kindle版ではなく、紙媒体の方をお薦めするかな。「あれどこに書いてあったかなぁ」ってぱらぱらぱらーっとめくるのは電子書籍には無理だもんね。

まとめ

「おお、この機能はすごい」と思ったものでも実はASP.NET MVCやEntityFrameworkでも実装されているものも有るのかもしれない。盲目的に「Rubyいいね、Railsイカす、ActiveRecord最高!」とならないよう、しっかり地に足をつけておきたいものである。

Ruby,Rails関連のことを知っておくと地元で話ができる人が増えそうなので、これで終わることなく知識は多少なりとも付けていきたいと思う。

次に読むならどんな本がいいのかな?下の本あたりかしら?

実践Ruby on Rails 4 現場のプロから学ぶ本格Webプログラミング

実践Ruby on Rails 4 現場のプロから学ぶ本格Webプログラミング

本を買う前に、下のようなサイトで一通り手を動かすのもありかも。

とか考えつつ、積ん読になってた「プログラミングMicrosoft ASP.NET MVC 第3版ASP.NET MVC 5 対応版 (マイクロソフト公式解説書)」を手に取った。

おしまい。