Drupalのキャッシュは多層構造
Drupalでは、パフォーマンスを上げるためにいくつものキャッシュレイヤーが存在します。特に重要なのが次の3つです。
・Internal Page Cache(匿名ユーザー向けページキャッシュ)
・Dynamic Page Cache(認証・匿名どちらも対応するページキャッシュ)
・Render Cache(ノード・ブロック単位のキャッシュ)
「ページキャッシュ」と一言で言っても、実際には2種類に分かれており、挙動が異なるため、混同しないことが非常に重要です。
これから一つずつ説明していきます!
1. Internal Page Cache(完全HTMLキャッシュ)
Drupalにログインしていない匿名ユーザーに対して、フルHTMLレスポンスを丸ごとキャッシュする仕組みです。
モジュール:page_cache(core)
対象:匿名ユーザーのみ
保存:cache_page バイナリテーブル
ヘッダー確認:X-Drupal-Cache: HIT
仕組み:
DrupalがHTMLレスポンスをまるごとキャッシュとして保存し、次回以降の同一URLリクエストに対して即座に返します。
特にニュースサイトや企業サイトなど、ログインを必要としない閲覧が主な場面で大きな効果を発揮します。
2. Dynamic Page Cache(柔軟なページキャッシュ)
認証ユーザーも含めて対応可能な、より柔軟なページキャッシュ機構です。HTMLの共通部分をキャッシュしつつ、動的な部分は後から置換される仕組みになっています。
モジュール:dynamic_page_cache(コア)
対象:匿名・認証両方
保存先:cache_dynamic_page_cache
ヘッダー確認:X-Drupal-Dynamic-Cache: HIT
仕組み:
表示内容の一部(例:ログインユーザー名、CSRFトークンなど)をプレースホルダーに置き換える
それ以外の部分をキャッシュに保存
次回以降、共通部分はキャッシュから高速に表示される
会員サイト、管理画面、多言語サイトなど、ユーザーによって表示が変わるページでもパフォーマンスを保てるのが強みです。
3.Render Cache(細かい単位での再利用)
ページ全体ではなく、ノード、ブロック、Views結果などの一部要素を再利用するためのキャッシュです。
モジュール:Render API(コアの一部)
対象:全ユーザー
保存先:cache_render、cache_entity
確認方法:表示速度・#cache の有無・drupal_cache:tags や cache_get() で確認
仕組み:
PHPのレンダー配列内に #cache を追加することで制御。
tags:更新対象を識別(例:node:123)
contexts:言語・ロールなどの出し分け条件
max-age:キャッシュ有効時間(秒)
Views や Paragraphs、再利用ブロックなどを扱う場合、このRender Cacheの使い方を理解しているかどうかでサイト全体の速度とキャッシュバグの発生率が変わります。
まとめ
匿名ユーザー向けのInternal Page Cache、動的な部分を除いてキャッシュするDynamic Page Cache、そしてブロックやノードなどの要素単位で再利用するRender Cache。
仕組みも対象も違うので、「全部効かせる」とか「全部無効にする」ではなく、それぞれの特性に合わせて使い分けることが重要です。
難しそうに見えても、どのキャッシュがどこで働いてるかを意識できるようになると、Drupalの挙動がすっと理解できるようになります。
キャッシュまわりは、慣れていないと意外と見落としがちなポイントも多いです。
もし「これって本当に合ってるのかな…?」と不安になるようなことがあれば、ぜひ気軽にアクレットにお声がけください。
最後まで読んでいただきありがとうございました。
少しでも参考になっていたらうれしいです!