パーフェクトRails【増補改訂版】を読んで、パーフェクトすごい…って思いました:)
著者の1人である すがわらまさのりさん から恵贈賜りました『パーフェクト Ruby on Rails 【増補改訂版】』、とても読みたかった本なので嬉しいです。ありがとうございます!
2020/7/25日発売ですが、店頭に並んでいるところもあるようです。
Railsの基本から実戦レベルの応用、最近のナウいRails環境も書かれており、パーフェクトな内容で、初心者から上級者にもオススメの書籍です:)
「パーフェクト Ruby on Rails」の初版は、2014年7月10日とあるので、約6年ぶりの増補改訂版ですね(Railsのバージョンは、初版で4.0-4.1でしたが増補改訂版では6.0です。月日の流れを感じますね)。
表紙
Rubyを乗せた列車のCG、初版の列車と比べるとだいぶテクノロジーが進化した感じの列車になっていて速そうです。下の方の帯っぽいところには
Railsのセオリーを徹底解説
Railsに関する基本情報からテスト、インフラ・運用、設計や拡張法まで完全網羅
とあります。著者名を見るとRails界隈のイベント、 speakerdeck や slideshare のスライドでよく見かける方々ですね。IDと名前が一致してない読者もいるかもなので、リスト載せておきます:)(掲載順は、執筆チームに加入した順なのかな〜と想像しながら読みました)
- すがわら まさのり: @sugamasao
- 前島 真一: @netwillnet
- 橋立 友宏: @joker1007
- 後藤 優一: @_yasaichi
- 五十嵐 邦明: @igaiga555
はじめに
著者一同からのメッセージは6月某日と書かれていて、ギリギリまで手を入れていた鮮度のよさを感じますね。おつかれさまです🙏
推奨バージョンは Ruby 2.6.6 + Rails 6.0.3 で、(一番新しいRubyが一番よいRubyだけど)Ruby2.7系ではない理由などがちゃんと書かれているのがよいですね。謝辞をみると、伊藤浩一( @koic )さん(RuboCopコミッター)とy-yagi( @y_yagi )さん(Railsコミッター)がいくつかの章をレビューしているそうで、レビュアも豪華だ、すごーい。気になる対象読者ですが、
・普段Ruby on Railsを使っていて、一歩先の「レール」に乗りたい人
・Ruby on Railsの学習を始め、これから本格的に使っていきたい人
・他のMVCフレームワークを扱ったことがあり、これからRuby on Railsを始める人
とありますね。Railsに興味のある人から経験者まで、Railsに関わりのある方は手元に置いておくと便利だと思います。とくに経験者は自分たちの(Railsアプリの)レールの点検にももってこいの書籍かなーと思いました。
では目次を見てみましょう
目次
Part1: Rails ~overview
1章: Ruby on Railsの概要
2章: Ruby on RailsとMVC
3章: 押さえておきたいRailsの基本機能
Part2: Railsの周辺知識
4章: フロントエンドの開発手法
5章: Rails標準の機能を活用して素早く機能実装する
Part3: Webアプリケーション開発
6章: Railsアプリケーション開発
7章: Railsアプリケーションのテスト
Part4: Railsアプリケーションの拡張・運用
8章: Railsアプリケーション拡張
9章: コード品質を上げる
10章: コンテナを利用したRailsアプリケーションの運用
Part5: エキスパートRails
11章: 複雑なドメインを表現する
12章: 複雑なユースケースを実現する
13章: 複雑なデータ操作を実装する
付録
AppendixA Railsの開発環境構築
Part1: Rails ~overview
Railsの概要や基本敵概念、MVC、テスト、秘密情報の取り扱いなどのRailsの標準機能についてのパート
1章: Ruby on Railsの概要
DBやJavaScriptも含めたRailsの環境、gem、rake、bundlerの解説があり、CoC、DRY、REST、自動テストといったRailsの思想もちゃんと入ってる。Railsのインストールや、rails new したときに生成されるファイルやディレクトリについての解説。「libディレクトリの現在と過去」などもあって親切ですね。scaffoldを利用し、migration、ルーティング、CRUD、MVCなどのRailsの概要が学べる内容になっています。
2章: Ruby on RailsとMVC
章タイトルから、MVCアーキテクチャについてかなーと思ったけど、モデル、ActiveRecord、ActiveRecord::Relation、scope(default_scope の注意があるのもうれしい)、リレーション(関連)、バリデーション、コールバック、ActiveRecord::Enum(enumerizeにも触れられていてうれしい)、コントローラの役割、ビュー、CSRF対策、リソース、ルーティング、例外処理、StrongPrameters、レンダリング、テンプレート、ヘルパー、エスケープ処理、テンプレートエンジン、APIサーバ…と、息切れしそうな盛りだくさんな内容になっています。これ、一つ章で収まるんですね…すごい…。65ページで一気に触れられるのはよさそうです。
3章: 押さえておきたいRailsの基本機能
テスト、テストフレームワーク、fixture、(Rails6.0で追加された)並列テスト、RackやRackミドルウェアについて結構詳しく書かれていてとてもいいですね:) DBまわり、(Rails6.0で追加された)複数DB、秘密情報についてはキチンと歴史も書かれていてとてもありがたい内容になっています。HTTP、Early Hints、CSPについてのRailsの取り組みがあるのもうれしいですね。2章が盛りだくさんだったから3章が短く感じる?
Part2: Railsの周辺知識
基本が詰まったPart1から、Webpackerなどのフロントエンド、メールやファイル、リッチテキストなどサービスに合わせて使う周辺機能の解説パート
4章: フロントエンドの開発手法
Railsのフロントまわり、(Rails6.0でデフォルトになった)Webpacker、Webpack、Sprockets、rails-ujs、Turbolinks、Stimulus(思想も書いてあるし、結構詳しく解説されていてうれしい)についての章でした。このあたり、僕も含めて雰囲気で覚えている方が多いと思うので、知識を整理できてうれしい章だと思います:)
5章: Rails標準の機能を活用して素早く機能実装する
Active Job、Active Storage、Action Mailer、Action Text、Action Cableを活用して、機能実装を素早くできる章。それぞれ基本だけでなく、注意ポイントやテスト方法なども書かれていてとても親切。
ここまで読むと、ページ数的には半分くらいなんだけど、1,2,3,4,5章は @sugamasao 担当(5章は @igaiga555 も担当)って、すごいな…300ページ近くある…。普通の本ならここまでで一冊になりそうですが、まだ半分もあってすごい。
Part3: Webアプリケーション開発
Rails6.0を使って実際にWebアプリケーションを作っていくパート。アプリを作りながら、いままで読んだ基本を読み直したりするとよさそうですね。
6章: Railsアプリケーション開発
この章は @netwillnet の担当とのこと。Rails6.0を使って、イベント告知アプリを作っていくようです。はじめに作るアプリの仕様があるのはわかりやすくてよいですね:) Hamlを入れて、 Bootstrapをyarnで入れつつ、GitHubでログイン機能(初版ではTwitterログインでしたが、最近の作りやすさを考慮してGitHubになっているようです)をつけて、バリデーションや国際化対応(i18n)などが含まれたアプリを作ることができます。名前重要とか、コントローラの粒度についても書かれていて、良い内容だな〜と思いました。
7章 Railsアプリケーションのテスト
担当は @igaiga555 とのこと。テストをどう書くか、既存アプリについても書かれているところがよいですね。minitestとRSpecの解説から、本書ではRails標準の minitest でテストを書いていくこと、 factory_bot 、システムテスト、コントローラテスト、モデルテストなどテストの基本を押さえつつ、気になりポイントをコラムでサポートする感じ。(自分が共著で参加した現場Railsではページ数の都合でモデルスペックまで書けなかったので、ありがたいな〜と思いました)
Part4: Railsアプリケーションの拡張・運用
ここまでで、378ページ…。だいぶお腹いっぱいな感じはあるんですが、このあたりから徐々に難易度があがっていく雰囲気ですね。
8章: Railsアプリケーション拡張
担当は6章と同じ @netwillnet とのこと。6章で作ったアプリの機能拡張していく章。Active Strageでファイルアップロード、kaminariでページネーション、Elasticksearchをインストールしつつ Searchkickで検索、エラーハンドリングや、gemの選定方法なども書かれていてお得。
9章: コード品質を上げる
担当は @igaiga555 とのこと。CI、GitHub Actions、Dependabot、静的解析、Brakeman、SimpleCov、Coveralls、パフォーマンス測定。入れておくとコードの品質向上のきっかけに便利なツール群が紹介されています。改めて列挙されたものを見ると結構ありますね…。ここを見ながら、そういえばあのプロジェクトには○○入れようかな〜と思えて、大変便利な章でした。
10章: コンテナを利用したRailsアプリケーションの運用
担当は @joker1007 とのこと。Railsのインフラ概要から、コンテナ技術が登場した流れ、Dockerをインストールしつつ、Docker環境を構築。高速化や開発環境用Dockerfile、docker-compose、環境変数、ログ出力、HTTPサーバとの通信など、Dockerを利用したRailsアプリで気をつけるポイント(特に環境変数、ログ、HTTPサーバあたり)が盛りだくさんでした。章末コラム「真の本番環境へ」も親切でとてもうれしいですね:)
Part5: エキスパートRails
エキスパート編。巻末の著者紹介を読むと、このパートの11-13章は @joker1007 が受け持ってたのを @_yasaichi が引き継いだとのこと。(執筆大変そう...)↓のツイートを見ると @t_wada も支えていたようですね(すごい…)
11章: 複雑なドメインを表現する
本節では、Railsの考え方をより深く理解するために、アプリケーションとアーキテクチャに関するいくつかの用語を導入します。
などの表現が @t_wada 直系という感じでとてもいいな〜と思いました:)
ドメインモデル、アクティブレコード、値オブジェクト、サービスオブジェクト、composed_of などの用語が気になる人は、この章を何度も読むとよいと思います。
12章: 複雑なユースケースを実現する
ユースケースの説明から始まり、Railsの「レール」の正体に触れ、モデルについて掘り下げ、フォームオブジェクト、プレゼンターの解説。それぞれキチンとなぜ使うのか、それらが出てきた背景や使うタイミングなども書かれていてとてもいいですね。
13章: 複雑なデータ操作を実装する
Concern、コールバックオブジェクトを使い、コードを整理しやすくする章でした。ActiveSupport::Concernやルーティングのconcernメソッドの解説もあるのがよかったのと、コールバックオブジェクトではテストのしやすさについても触れられていたのがよかったです:)
付録 AppendixA Railsの開発環境構築
Windowsでの開発環境構築と rbenv について書かれています。あれ?そういえば1章では rbenv について書かれてなかったんですね(気づいてなかった〜)
感想
僕はもう感想書くだけでもお腹いっぱいですが…著者の皆さんの執筆は本当に大変だったと思います。おつかれさまでした。。。その分読者にとってはお得な、とても濃い一冊になっていると思います。著書がした苦労は読者にさせないようにちゃんと書いたよ、という雰囲気が感じられました。技術書執筆あるあるだと思うのですが、「Railsではこう書きます」みたいに言い切り型で書くと、説明しないで済むのでラクなんですよね。でも、読者が読んだとき、なんで?どういう考えでそうなるの?って思っちゃうし、知識も点になっちゃうと思います。知識が線としてつながるように、なぜそう書くのか、なぜそう考えるのかを書くのって本当に大変なのですが、逃げずにちゃんと書かれている良書だと思いました。
僕は、現場Railsの著者の1人として「現場RailsのRails6版はでないんですか?」と聞いていただく機会が多いのですが、これからはパーフェクトRails【増補改訂版】をぜひ〜!と言えるので、とても嬉しい気持ちです:)
というわけで、Railsを使っている方々、現場Railsを読んでくれた方々、これからRailsを使おうと思っているすべての方々にオススメです!
追記
2020/07/20: ハッシュタグは #perfectrails でしたmm
2020/07/20: 電子版も7/25同日発売っぽいです!