Kōhei Yamamoto

『Rails Scales!』を読んだ

The Pragmatic Bookshelf (pragprog.com)から出ている『Rails Scales!』を読んだ。

概要

事業や扱うデータの大規模化に耐えうるRailsアプリケーションを作っていくための方法を解説している本。

主なトピックである性能改善に関する話題としては

について、Railsの機能を使った実現方法も踏まえて解説されている。

ユニークな点として、大規模化を考慮したアプリケーションの仕様設計についても触れられており、

について議論されている。

他にもRailsアプリケーションを開発する組織の規模拡大の方策として、コードオーナー導入やモジュラーモノリスへの移行1についても触れられていた。

感想

「大規模化」というテーマのもと、Railsアプリケーションの性能改善の具体的な方法からシステムのアーキテクチャ、アプリケーションの仕様、さらには開発組織までと、話題が多岐にわたる本だった。その分、各論についての掘り下げはそこまで深くはないと感じた。

この本で解説されているような性能改善に関する知識は、ふつうだとWeb上の資料を渉猟しながら学ぶことが多いように思うので(そうでもない?)、Webアプリケーション開発をし始めた人には役立ちそうだと思った。また、キャッシュについての解説は、Railsのキャッシュの仕組みが複数あり(フラグメントキャッシュやRails.cacheによる独自のキャッシュロジック)、実装パターンも複数考えられるためか説明が詳しめだったので、わりと読み応えがあった。

個人的には仕様設計の時点で大規模化を見越しておく話が興味深く読めた。これは別にYAGNIではなく、むしろレートリミットにしてもデータ量の上限にしても、あとから入れるのはユーザー影響が大きく難しい状況になりやすいので、できるだけ最初から入れるべきだと考えている。また、データのライフサイクルにしても、アーカイブの仕様を早めに考えておかないと、あとからデータの参照に関する仕様に変更が入ってしまって、ユーザーに影響を与えうる。このあたりの課題は、やりすぎないようバランスを取りながら解決していくのが必要なんだろうと思う。

全体としては、性能改善の入門的内容についてはまとまっているので、そのあたりに詳しくない人は一読するのが良さそう。そのほかは気になる話題をつまみ食いする形で読むのがいい本かなと思った。

脚注

  1. モジュラーモノリスへの漸進的移行については『Gradual Modularization for Ruby and Rails』という特化した書籍があるので、そちらを参照するほうがよいと思う