rails 独学して軽くにちゃんまとめつくる

インターン中大学生のブログ

ぐるぐる回って何をしたいのかが変わってく。今はマッチングサイトを作りたい、もしくは論文のキュレーションサイトかな。

パーフェクト Ruby on Rails を読んだので

評価は★四つ。

アマゾンでは☆3つ半くらいだったがその理由もなんとなくわかる。おそらく低い評価をした人は中級以上の人で rails を1年以上実務で使っている人や、何冊も rails 関連の本を読んだ人に違いない。そういう人にとっては「こんなの当たり前」と思い低評価をしたにちがいない。

しかし僕のような rails 初心者にはしらないことがたくさんあって、学べるところが多かった。

この本の肝はアプリ開発の実践例にあり、スケジューラーアプリの作成、Rspecをつかったテスト、chef やvagrant をつかったサーバー構築とデプロイが書かれている。

 

本の構成は、1/3 が初歩的な説明、1/3がイベント作成アプリの作りかた、1/3が応用的な内容になっている。詳しくみていこう。

 

1章は rails のインストールの仕方になっている。この本を読む人はおそらく rails を読んでみたけどなんだかわかった気がしないレベルの人が読んでいるはずなので蛇足といえば蛇足だろう。

 

2章(p44 ~ p92)

MVC について再確認している。「わかったようなわからんような」レベルの人はここがきちんと系統立てて理解していないことがあるのできちんと読むことを勧める。モデルの役割は?と聞かれて CRUD が頭に浮かばなかった人は読んでおこう。

また、 CRUD という言葉は浮かんでも個々の役割についてきちんと説明できるだろうか?データベース系はせんじ詰めれば Create, Read, Update, Delete の4つのことしかやってない。

Ruby に置き換えたら Read は find や find_by のことで、これに関連する事柄に scope や has_many, belongs_to がある。

Create は new や create のことで、関連する事柄に バリデーションやコールバックがある。こういったことを言われてパパッと関連する知識を思い出せたか?

 

コントローラーを作成したときにすぐにルーティングの定義をしなくちゃな~という思考回路が出来上がってるか?ストロングパラメーターについて理解してるか?API 作成時に使う jbuilder について理解してるか?パーシャルについて理解してるか?

心配ならぜひよむべき章だ。

 

 

3章(p94~p129)

この章ではアッセトについて書かれている。app/assets/ にあるアイツラのことで, javascript, stylesheet などを指す。これらはアセットパイプラインというので結びつけられていて、それの原理を説明している。

次に coffeescript や sass の文法の説明がある。あまり意識して使おうとおもったことがないのでなるほどと思った。

最後に turbolinks の説明がある。rails は高速化をはかるために、サイト内の aタグクリックでページ移動をしたときに head タグを確認して同じであれば<title> と <body> を差しかえるだけで、アセットはそのままにしておくという手法をとっている。それに関する注意点が書かれている

 

 

4章(p130~p141)

アプリ開発をしていると MVC のいずれにも当てはまらないものを書く必要がでてくる。そういったものは

・モデルとして扱う

・lib ディレクトリにおく

・新しいレイヤーを作成する

という方法をとる。このレイヤーをつくるためのオートローディングの設定やacttive_decorder という gem を使ってレイヤーを作成する例がのっている。

本書では sidekiq という非同期処理を行うものを例にとってそういったのをどこに置くかを説明している。

 

5章(p142~p158)

便利な gem を紹介しています。特にやくだったのが pry という gem です。これを使うと、ソースコードを最後まで実行せず途中でとめることができて、それまでに代入されている変数の中身の確認や、メソッドの実行ができるステップ実行を行うことができます。さらに show-models、show-routes などの操作でモデルのカラムやリレーションの確認ができたりしてとても便利。

 

6章(160~239)

ここが本題のスケジューラーアプリの作成をしている。

プログラミングのIT勉強会・セミナー・イベント情報 - dots.[ドッツ]

こんなサイトをイメージしたらいいだろう。

twitter認証の omnauth をつかったり、bootstrap を使ったり、i18n を使って、f.label の日本語化をしたり、Ajaxを使った場合のエラー処理だったり、N+1問題を扱っていたり、ransackを使った検索機能を実装したりと、盛りだくさんの内容で、知らないことをたくさん知った。ここだけでもう2千円分の価値はあった。twitter 認証など、知ってるけどなんだか怖くて手がだせなかった機能を実例を交えて解説してくれているのでとてもありがたい。

f.label はこうやって日本語化するんだな~というのもわかった。いままでどうして f.label なんて使うのだろうと思っていたが、この国際化のためのものだった。

 

7章(p240 ~p274)

Rspec を使ったテストを実装している。 Rspec を勉強したいと思ってたが、RailsTutorial はminitest だし、『Ruby on Rails アプリケーションプログラミング』もminitest だし、サイトで調べたのは断片的だして、勉強する資料がなくてこまっていた。しかし パーフェクトRuby on Rails では Rspec を使ってテストしているのでありがたい。昔は should 記法というのがあったらしいがそれが廃止され expect 記法で書かれているという補足情報もありがたい。じつは RailsTutorial の2版ではテストが Rspec で書かれていたのでそれをたまにみてたのだが、それは should 記法をつかってるので変な癖がつかずにすんだ。

 

さらに capybaraを使ったエンドツーエンドのテストや poltergeist を使った javascript のテストがあり、かなり本格的になっている。

また、実際にテストのてきようはんいを 調べることができるカバレッジというのを説明してくれている。simplecov というのを調べてみよう。

 

8章(p275~p330)

 

ここは難しいのと、必要がないのと、windows なので飛ばした。どうやら vagrantVMをつくり、chef と連携し~と書いてるがよくわからん。ただ説明がなので気になるひとはよんだらいいとおもう。めんどくさい人は heroku で十分。

 

9章(p332~p375)

ここは面白い。モデルってこんなに深いないようだとは思わなかった。

「まよったらモデルに書け」とか「ファットモデル」という言葉はきいたことあるだろうか?rails ではとにかくモデルにたくさんコードをかくように言われているが、それもたくさんになりすぎたときのリファクタリングについて詳しく書かれている。たとえばバリデーションやコールバックを別クラスとして定義しなおしたり、ActiveModelをつかったり、値オブジェクトを利用したりする。

この値オブジェクトというのがとても便利。本書で説明されているのを例にとる。

Userというモデルに住所の情報をか address カラムを持たせているとする。これがおおざっぱな情報でよければそのままでいいのだが、都道府県名の prefecture カラムや市区町村 city カラムやアパート名の apart カラムまで詳しく定義しておきたいとき、 User モデルの持つカラムは非常に多くなる。さらに住所はほかのPlace クラスや Company モデルでも使われるとすると重複する。

こういった事態に対処するために Address モデルとして切り離してしまおうというのが値オブジェクトのしたいことだ。大規模な開発のときに役に立つ。

他にも concern というのも扱っている。 app/models/concerns、 app/controllers/concerns というのがあってなんだこりゃと思っていたが、どうやらモデルやコントローラーから特定の機能のためにのみ利用されるメソッドやバリデーションをここに書くらしい。

・タグの分類機能

・ログイン制御

などを書き込むらしいぞ。本書では論理削除の実装を行っている。

 

 

10章(p376~411)

 この章は流れるように説明されているので、本書でわかる必要はない。

Rack と Rack::Middleware と gem の作り方が書かれている。これらを使って rails を拡張しようというのが本章の狙いだ。ゆえに内容も高度になっている。 Rackとは railsアプリケーションサーバーをつなぎ合わせる機能のことをさしている。p378では4行程度の rack のコードを書いて実際にサーバーを立ち上げて localhost にアクセスして文字を表示させている。何をいってるかさっぱりわからないかと思うが、私もわからない。この章はレベルの高い人だけがよむものだ。

 

脱初心者を目指す人はぜひ買うべき本であるのでおすすめする。