書評:パーフェクトRuby on Rails

これからRailsを覚える友人に書籍を薦める機会があればこの2冊を選びます。

特に1冊目の パーフェクト Ruby on Rails「これからRailsを覚える同僚に紹介する」という用途にも最適な一冊だと思います。

こういう書籍の内容は”Railsの標準機能”の枠に収まっている事が多いのですが、実際の開発現場においてはRails本体の機能ではないものの、 多くの現場でデファクトスタンダードになっているgemが数多く存在します。

そのような情報に関してはアンテナを広げてキャッチアップしていくしかないのですが、 この書籍はRails非標準の内容にまで深く踏み込んでおり、初学者の最初の一歩をブーストしてくれます。 もちろん非標準の内容については広く普及しているかどうか(かつ長くその地位を保てるか)意見のわかれる点でもあるのですが、 少なくとも自分の主観で読み進めて違和感のある部分はほとんどありませんでした。

Railsで初めてWebアプリ開発を行うという方には適切ではないかもしれませんが、 他の言語・フレームワークの経験があるような技術者にはこれくらいの内容のほうが効率が良いです。

具体的にどこがよかったかについては後半で述べます。

2冊目の Ruby on Rails 4 アプリケーションプログラミング は、1冊めを補完する目的でおすすめです。 バリデータやビューのヘルパなどのリファレンス的な情報が豊富です。

今回は、特に”パーフェクトRuby on Rails”について良いと思った点をメモしておこうと思います。

ここがおすすめ:パーフェクト Ruby on Rails

「この本以外では載っているのを見たことがない!」というトピックばかりではありませんが、読んでいて目に止まったおすすめポイントを雑にメモしていきます。

foobarみたいになっているのはgemの名前かコード片です。
パッと見て心当たりが無いものが多いならこの本を読む価値ありだと思います。

  • Railsのバージョンが4.1.1とかなり新しい。(2014-06-18時点で最新)
  • 92ページまででscaffoldingやMVCのような伝統的Rails入門が終わり、残りの約300ページは後述するような実践的な内容。
  • HamlとSlimについてコード例を示しつつ紹介している。(実際のところERBで書いてるようなプロジェクトは稀だと思う)
  • Asset PipelineについてSprocketsから丁寧に解説がある。
  • CoffeeScriptの要点をおさえた解説。Source Mapsに対する言及など。
  • Sassの詳細な解説
  • Turbolinksの解説
    • 動作条件や発生するイベントなどの一覧
    • jquery-turbolinks にも言及
    • イベントの多重定義などよくある落とし穴の回避方法
  • WorkerやDecoratorのようなMVC以外の新しいレイヤーの定義方法
  • sidekiq を用いた非同期処理
  • PryとRailsの組み合わせ方
  • hirbbetter_errorsのような開発支援gemの紹介
  • サンプルアプリケーション
    • 動作保証のため、使用しているgemのPatchレベル以外のバージョンが固定されている
    • OAuthを使ったTwitterアカウントによる認証を例示(omniauth)
    • BootstrapをRailsアプリで使う方法を例示。モーダルを表示してAjaxでフォーム送信など。
    • deviseを使わずシンプルに認証を実装。(deviseについては別項で言及)
    • kaminari-bootstrapransackcarrierwaveのような定番gemの利用
    • コードがgithubで公開されています。パーフェクト Ruby on Rails のサンプルアプリケーションを Github 上で公開しました - willnet.in
  • コントローラ層でのエラーハンドリング
    • 存在しないアクションをリクエストされた時に500の代わりに404を返す方法
    • exception_notification を使ったエラーの通知
  • 結構まじめにminitestとRSpecの比較をしている。
  • RSpecは3系の使い方に触れている(6/2にリリース)
  • fixture replacementの項でfactory_girlの使い方を説明
  • RSpecのexpect記法とshould記法について軽く説明
  • エンドツーエンドテストはcapybarapoltergeistを使っている。(Seleniumはあまり使われていないとぶっちゃけている)
  • Vagrantを紹介する際に不正なboxを使ってしまう危険性に触れた上で、Phusion社がソースごと公開しているboxの利用を例示
  • Chef-soloを使ったプロビジョニングをそこそこに解説
  • Unicornでpreload_appを有効にしつつgraceful restartする方法
  • Capistranoは3系で解説
    • capistrano3-unicornを使用
    • deploy実行時のフックとフローについて簡単に解説
  • New Relicの結構詳細な解説
  • ログをfluentdで集めてkibanaで可視化する方法についてざっくり紹介
  • 実践的なモデル設計の解説
    • モデルクラスの分割方法
    • ActiveModel::EachValidatorの使い方
    • ActiveModelの使い方
    • Concern
    • サービスクラスを用いるモデル設計
  • Basic認証を題材としたRack Middlewareの作り方の本格的な解説
  • Railtieとは何か、という説明
  • プラグインの作り方(gem化まで丁寧に解説)
    • Railtie型
    • Engine型
  • rbenvの使い方が書いてある。

最近のRailsはCoffeeScriptやSassなどruby以外に必要な知識が増えましたが、 Asset Pipelineの依存性管理などややこしい部分からsassのディレクティブに至るまで丁寧にカバーしてあります。

また、capistranoやrspecなどは過去のバージョンと比較して大きく変わっている部分もあり、 Webだけで勉強しようとすると古い情報を掴んで混乱する可能性があるため、 書籍という形である程度まとまった情報になっていると人に薦めるときに便利です。

繰り返しになりますが、実質的にデファクトスタンダードになっているgemがたくさんあるにも関わらず、 Rails標準の機能の解説に留まっている書籍やトレーニングコースも多いです。 本書はkaminariomniauthcarrierwavepoltergeistなど多数のgemが紹介されており、 フロントエンドにBootstrapを使ったサンプルアプリの実装を通じて効率よくメジャーな道具を学習することができます。

以上、おすすめポイントのまとめでした。


蛇足

  • springってなんか動作が遅くないですかね。4.1で標準になったので紹介されているんだと思いますが、結局まだzeus使ってます。
  • cancanは最近はcancancanとか出てきててややカオス。触れられていないのはそれが理由かな。そもそも認証と認可は安易に外部実装に頼らないほうが良いという意見もあるし。
  • デバッガについてはRails本の範疇外かな。byebugruby-debug周辺はどうなっていくんだろう。
  • プロファイリングについても少し書いて欲しかったかも。