Railsキャッシュ総論|ページ・アクション・フラグメント・低レベルキャッシュの違いを完全解説
生徒
「Railsって動きが遅くなることがあるって聞いたんですが、どうすれば速くなるんですか?」
先生
「Railsには“キャッシュ”という仕組みがあって、これを使うと同じ処理を何度もしなくて済むようになります。」
生徒
「キャッシュって種類があるんですか?」
先生
「はい。ページキャッシュ、アクションキャッシュ、フラグメントキャッシュ、低レベルキャッシュなど、目的ごとに使い分けます。順番に見ていきましょう。」
1. Railsとパフォーマンス改善の基本
RailsはRuby on Railsというフレームワークで、Webアプリケーションを効率よく作るための仕組みがそろっています。ただし、画面表示のたびに毎回データベースから情報を取り出したり、同じ計算を何度も行ったりすると、処理が遅くなります。
そこで登場するのがキャッシュです。キャッシュとは「一度作った結果を保存しておき、次からはそれを使う仕組み」のことです。料理で例えると、毎回ゼロから作るのではなく、作り置きを温め直すようなイメージです。
Railsのキャッシュは、MVC(モデル・ビュー・コントローラ)の考え方と深く関係しており、どこを保存するかで種類が分かれています。
Railsの仕組みを根本から理解し、現場で通用する 「設計のセオリー」を身につけたいならこの一冊。 MVC、テスト、Docker対応など、実践的な内容が凝縮されています。
パーフェクト Ruby on RailsをAmazonで見る※ Amazon広告リンク
2. ページキャッシュとは?画面まるごと保存する仕組み
ページキャッシュは、表示されたHTMLページをそのまま保存する方法です。次に同じURLへアクセスが来たとき、Railsを通さずに保存済みのHTMLを返します。
これはとても高速ですが、ログイン状態によって内容が変わるページなどには向きません。全員に同じ内容を見せるトップページや、更新頻度の低い案内ページ向けです。
# ページキャッシュの例(概念的なイメージ)
class HomeController < ApplicationController
def index
# この結果がHTMLとして保存される
end
end
初心者のうちは「ページ全部を保存する一番大胆な方法」と覚えておくと理解しやすいです。
3. アクションキャッシュとは?処理結果をまとめて再利用
アクションキャッシュは、コントローラのアクション単位で結果を保存します。ページキャッシュと似ていますが、Railsの処理を一部通す点が特徴です。
例えば、ログインチェックだけは毎回行い、その後の表示部分はキャッシュから読み込む、という使い方ができます。
class ArticlesController < ApplicationController
before_action :authenticate_user!
def show
# 表示結果がキャッシュされる
end
end
「入口だけ確認して、中身は前回の結果を使う」イメージです。
4. フラグメントキャッシュとは?画面の一部分だけ保存
フラグメントキャッシュは、ビューの一部分だけをキャッシュする方法です。Railsで最もよく使われるキャッシュで、初心者にもおすすめです。
例えば、ヘッダーやランキング表示など、毎回同じ内容を表示する部分だけを保存します。
<% cache("popular_articles") do %>
<ul>
<% @articles.each do |article| %>
<li><%= article.title %></li>
<% end %>
</ul>
<% end %>
全体は動的でも、一部だけ固定することで、処理を軽くできます。
5. 低レベルキャッシュとは?データそのものを保存
低レベルキャッシュは、画面ではなく「値」や「計算結果」を直接保存する方法です。Rails.cacheを使って、自由に読み書きできます。
難しそうに見えますが、「箱に入れて名前を付けて保管する」感覚で考えると理解しやすいです。
Rails.cache.write("sample_message", "こんにちは")
message = Rails.cache.read("sample_message")
こんにちは
この方法は、Redisなどの高速な保存先と組み合わせて使われることが多いです。
6. キャッシュの保存先とRedisの役割
Railsのキャッシュは、保存する場所を選べます。ファイル、メモリ、データベース、そしてRedisなどです。
Redisは「とても速いメモ帳」のような存在で、Railsキャッシュと相性が良く、パフォーマンス改善によく使われます。
# config/environments/production.rb の例
config.cache_store = :redis_cache_store, { url: "redis://localhost:6379/0" }
「どこに保存するか」もキャッシュ設計の重要なポイントです。
7. キャッシュを使うときの考え方と注意点
キャッシュは便利ですが、内容が古くなることがあります。これをキャッシュの不整合と呼びます。
そのため、「いつ更新するか」「どこまで保存するか」を意識することが大切です。初心者のうちは、フラグメントキャッシュから試すと失敗しにくいです。
Railsのキャッシュは段階的に理解していくものなので、まずは違いを知ることが大きな一歩になります。