Railsのキャッシュを完全解説!初心者でもわかるフラグメントキャッシュとコレクションキャッシュ
生徒
「Railsで画面表示を速くする方法ってありますか?アプリが重くなると困ります…。」
先生
「Railsにはキャッシュという仕組みがあって、ページの一部や繰り返し部分を保存しておけるんだ。特にフラグメントキャッシュとコレクションキャッシュは、とても便利だよ。」
生徒
「キャッシュって何ですか?聞いたことあるけどよくわかりません…。」
先生
「キャッシュは“よく使う表示をあらかじめ保存しておく引き出し”みたいなものだよ。では仕組みを詳しく説明していこう。」
1. フラグメントキャッシュとは?
フラグメントキャッシュは、Railsのビューでよく使われるキャッシュ方法のひとつで、画面の一部分だけを保存しておく仕組みです。ページ全部をキャッシュすると内容が変わらなくなってしまいますが、フラグメントキャッシュなら、必要な部分だけ保存できて便利です。
例えるなら、料理のレシピで「煮込みに30分かかる部分だけ事前に作り置きしておく」ようなイメージです。Railsでも「毎回同じ HTML をつくるのは無駄だな」という部分を保存しておくことで、画面表示を速くできます。
RailsのERBテンプレートでは次のように書きます。
<% cache @article do %>
<%= render "article", article: @article %>
<% end %>
このように書くことで、記事が更新されない限り、Rails は HTML を再生成せずにキャッシュされた内容を使います。
2. コレクションキャッシュとは?
コレクションキャッシュは、リストや一覧の表示を高速化するための仕組みです。例えばブログ記事一覧を表示するとき、10件の記事を1つずつ描画していると、毎回重くなってしまいます。
コレクションキャッシュでは、各要素を個別にキャッシュできます。つまり、10件あっても変更されたものだけを再生成し、他は保存しておいたものを使います。
<%= render partial: "article", collection: @articles, cached: true %>
この1行だけで、Railsが自動的に「記事ごとにキャッシュ」してくれるので大幅なパフォーマンス改善になります。
初心者でも扱いやすく、Haml や Slim でももちろん同じ考え方で利用できます。
3. パーシャルとキャッシュは相性抜群
Railsでビューを整理するために使うパーシャル(部分テンプレート)は、キャッシュと非常に相性がよいです。理由は「再利用されることが多いから」です。
例えば、ユーザー名やプロフィール画像、商品カード、一覧カードなど、アプリ内のいろいろな場所で使う UI は、パーシャルとして切り分けられています。これらのパーシャルをキャッシュすると、どこで使っても高速になります。
特に Bootstrap や Tailwind のような CSS フレームワークと組み合わせると、UI の統一性も保てるので開発の効率も上がります。
4. フラグメントキャッシュとレイアウトの関係
Railsのレイアウト(application.html.erb)は、アプリ全体の共通デザインをまとめる場所です。このレイアウト内部に、フラグメントキャッシュを組み込むことで、ヘッダーやフッターのような共通部分の描画時間も短縮できます。
特に、メニュー表示にユーザーデータが含まれている場合、ログイン状態に応じて部分的にキャッシュキーを切り替える必要があります。Railsではキャッシュキーを自動で生成してくれるため、初心者でも比較的簡単に導入できます。
5. どんなときにキャッシュを使うべき?
キャッシュはとても便利ですが、何でもかんでも使えばよいというものではありません。次のような場合に効果を発揮します。
- 表示に時間のかかるパーシャルを繰り返し使うとき
- 更新頻度が低いデータを表示するとき
- 大量のデータを一覧表示するとき
逆に、毎回内容が変わる部分(ログイン状態で毎回メニューが違う、最新メッセージが毎秒更新される等)はキャッシュに向きません。アプリの特性に合わせて使い分けることが大事です。
6. フラグメントキャッシュの仕組みをもう少し詳しく理解しよう
フラグメントキャッシュは、Railsが内部でキャッシュキーという識別番号を作り、モデルの更新日時をもとに自動で切り替える仕組みを持っています。例えば記事データが変わったら、Railsは新しいキャッシュキーを生成して新しいHTMLを保存します。これにより「古いキャッシュが残ってしまう」問題が起きにくくなります。
キャッシュはファイルとして保存されたり、メモリ上に保存されたりします。大規模なアプリでは Redis(レディス)という仕組みを使いますが、初心者はそこまで心配しなくて大丈夫です。Railsが自動で扱ってくれます。
7. キャッシュを使う際の注意点
キャッシュは強力ですが、注意すべきポイントもあります。
- キャッシュを使いすぎると「どこに何が保存されているか」分かりにくくなる
- 動的なデータが正しく更新されないように見えることがある
- キャッシュクリアのタイミングが必要な場合もある
しかし、これらはRailsの設計とパターンを理解していけば自然に身に付くので心配はいりません。