ウェブサイトキャッシュ&サーバー内部キャッシュ:WordPressでキャッシュが動く仕組み

このサイトを運営するサーバーでウェブサイトキャッシュとサーバー内部キャッシュを確認したところ、WordPressのページリクエストはブラウザからCDN・ページキャッシュ・OPcache・Redisの順に下りていき、コピーがある層で止まりました。オリジンサーバーへ直接来たページリクエストは、nginxがWP Rocketの作ったHTMLファイルをそのまま返し、PHPとデータベースまで下りませんでした。
Ⅰ. WordPressのキャッシュ構造
コンピューターにおけるキャッシュは、一時的なデータに素早くアクセスできるよう一時保存する技術で、ウェブでも同じ原理で動き、パフォーマンス向上に大きく貢献します。
キャッシングはデータを保存しておくことで、訪問者がウェブサイトにアクセスするたびにサーバーへ新しく要求せず、保存したデータを素早く読み込んでページの読み込み時間を短縮します。これによりサーバー負荷を減らし、ユーザー体験を改善できます。
WordPressのリクエストに使われるキャッシュは、ウェブサイトキャッシュとサーバー内部キャッシュの2系統です。 HTTPキャッシュ標準は、訪問者一人のブラウザにだけ保存されるキャッシュをprivate cache、複数の訪問者が共有するCDN・プロキシキャッシュをshared cacheに分けており、この記事ではこの2つをウェブサイトキャッシュとしてまとめました。
ページキャッシュとOPcache、オブジェクトキャッシュは、サーバーの中でWordPressが実行される過程に付くキャッシュです。HTTP標準には別の分類がなく、 WordPress公式ドキュメントが、キャッシュプラグイン(ページキャッシュ)・オブジェクトキャッシュ・サーバーキャッシュ(OPcacheのようなopcodeキャッシュ)に分けて説明しています。
キャッシュが使われる分野の全体は キャッシュ:定義とキャッシングが使われるすべての分野 の記事に、キャッシュを含むパフォーマンス最適化の4つの系統は ウェブパフォーマンス最適化:構造と定義 の記事にまとめました。
下のシミュレーターで左のツリーからキャッシュを選んでチップを押すと、リクエストがどの層で止まるかを確認できます。WordPressの運営者がキャッシュプラグインで最初に有効にする層はページキャッシュです。
| 層 | 保存場所 | 保存するもの | Nginx + Apache構成の例 |
|---|---|---|---|
| ブラウザキャッシュ | 訪問者の端末 | HTML・CSS・JS・画像・フォント | CSS・画像 7日 |
| CDN・プロキシキャッシュ | サーバーの前段(エッジ・リバースプロキシ) | ページ・静的ファイルのコピー | Bunny CDN |
| ページキャッシュ | サーバーのディスク・メモリ | PHPが作ったHTML | WP Rocket + nginx |
| OPcache | サーバーメモリ | PHPバイトコード | PHP 8.3、JITオフ |
| オブジェクトキャッシュ | サーバーメモリ | クエリ結果・オブジェクト | Redis |
Ⅱ. ウェブサイトキャッシュ
ウェブサイトキャッシュは、サーバーが応答ヘッダーで保存方法を伝えると、訪問者のブラウザとCDN・プロキシがその指示どおりにコピーを保存するキャッシュです。代表的なヘッダーは[Cache-Control]・[ETag]・[Expires]で、保存期間が過ぎると条件付きリクエスト([304 Not Modified])で変更されたかを確認します。
1️⃣ ブラウザキャッシュ
ブラウザキャッシュは訪問者のウェブブラウザに保存されるHTTPキャッシュで、HTML・CSS・JavaScript・画像・フォントを保存しておき、同じリソースを再びリクエストするときはサーバーまで行かないか、変更されたかだけを確認します。
保存期間は訪問者ではなくサーバーが決めます。下のNginx + Apache構成のサーバーはCSSと画像に7日を指示し、HTMLページは期間なしで、再訪問のたびに確認するように応答します。
If-None-Match: "6ab12775-2ee8"cache-control: max-age=604800 expires: Sat, 17 Oct 2026 03:21:00 GMT etag: "6ab12775-2ee8"
etag: "6ac9298c-95575" last-modified: Fri, 09 Oct 2026 17:51:08 GMT
2️⃣ CDN・プロキシキャッシュ
CDN・プロキシキャッシュは、訪問者とオリジンサーバーの間で複数の訪問者が共有するキャッシュです。フォワードプロキシは企業ネットワークのように訪問者側の前段で、リバースプロキシとCDNはサーバーの前段で、オリジンサーバーの代わりに保存したコピーで応答します。
代表的なリバースプロキシは Varnish Cacheで、Bunny CDN・AkamaiのようなCDNも同じ構造です。地域別DNSを使えば、オリジンサーバーがある地域の訪問者はオリジンサーバーへ直接つなぎ、ほかの地域の訪問者には近くのCDNエッジ(例:Bunny CDN)がHTMLまで保存して応答するように分けられます。
CDNの構造と利点は CDNとは?CDNを使う理由と5つの利点 の記事にまとめました。
Ⅲ. サーバー内部キャッシュ
サーバー内部キャッシュは、リクエストがオリジンサーバーに届いた後、WordPressがページを作る過程に付くキャッシュです。Nginx + Apacheで構成したサーバーは下の順序でリクエストを処理し、前の段階でコピーが見つかれば後の段階は通りません。
Nginx + Apache構成は、CloudwaysとScalaHostingでオプションとして選べます。Cloudwaysはアプリケーションごとにハイブリッドスタック(Nginx + Apache)とライトニングスタック(Nginxのみ)のどちらかを選び、ScalaHostingはSPanelでApacheの前にNginxを置く設定をオンにできます。
| キャッシュ | 保存するもの | 保存されるとき |
|---|---|---|
| 1️⃣ ページキャッシュ | 完成したHTMLページ | 🅑 ⑤ 応答するときにWP Rocketがファイルとして |
| 2️⃣ OPcache | コンパイル済みのPHPコード(バイトコード) | 🅑 ② PHPファイルを最初に実行するとき |
| 3️⃣ オブジェクトキャッシュ | クエリ結果・オプションのようなデータの断片 | 🅑 ③ WordPressがデータを最初に取り出すとき |
1️⃣ ページキャッシュ
ページキャッシュはフルページキャッシュ(full-page cache)とも呼ばれ、保存するものがHTMLなのでHTMLキャッシュと呼ぶこともあります。PHPが作ったウェブページ全体を静的なHTMLファイルとして保存しておき、同じページのリクエストにはPHPを実行せずにそのファイルを送ります。上の処理順序では🅐の場合です。
保存場所はサーバーのメモリ(RAM)またはディスク(HDD/SSD)で、メモリは速いもののコストが高く容量が限られ、ディスクは容量に余裕がある代わりに比較的遅くなります。
| 種類 | 例 | 保存・応答の方式 |
|---|---|---|
| キャッシュプラグイン | WP Rocket · WP Super Cache · W3 Total Cache · Cache Enabler | WordPressがページをHTMLファイルとして保存し、ウェブサーバーがそのファイルを送ります。 |
| ウェブサーバーキャッシュ | Nginx FastCGIキャッシュ・LiteSpeed Cache | ウェブサーバーがPHPの応答を直接保存し、次のリクエストに送ります。 |
| リバースプロキシキャッシュ | Varnish | ウェブサーバーの前に置いたキャッシュサーバーがページを保存して応答します。 |
Nginx + Apache構成では、WP Rocketが作ったHTMLファイルをnginxが直接読んで送り、応答ヘッダーに[x-rocket-nginx-serving-file: HIT]が付きます。WP Rocketでページキャッシュを有効にして設定する手順は WP Rocket設定ガイド の記事にまとめました。
2️⃣ OPcache
OPcacheはPHPコードをあらかじめコンパイルしたバイトコードをメモリに保存し、同じファイルを再び実行するときにPHPパーサーを通らないようにします。PHP 5.5から標準で含まれており、以前使われていたAPCとXCacheはPHP 7に対応していないため、今は使われていません。上の処理順序では🅑の②段階にあたります。
| 種類 | 状態 | 説明 |
|---|---|---|
| Zend OPcache | PHP 5.5から標準で含まれる | 今使われている標準のopcodeキャッシュで、[opcache.enable=1]で有効にします。 |
| OPcache JIT | PHP 8からOPcacheに含まれる | バイトコードをもう一度機械語に変えて実行し、[opcache.jit]でオン・オフします。 |
| APC | 開発終了 | OPcache以前に使われていたopcodeキャッシュで、データキャッシュ機能はAPCuに引き継がれました。 |
| XCache | 開発終了 | PHP 7に対応していません。 |
| WinCache | Windows(IIS)サーバー用 | WordPress公式ドキュメントがOPcacheと並べて挙げるopcodeキャッシュです。 |
OPcacheはPHP設定[opcache.enable=1]で有効にし、PHP 8以降に入ったJITは[opcache.jit=disable]で別にオフにできます。インストールと設定は Zend OPcacheの概念とインストールおよび設定 の記事にあります。
3️⃣ オブジェクトキャッシュ
オブジェクトキャッシュは、データベースのクエリ結果や計算したオブジェクトをRedis・Memcachedのようなメモリストアに保存します。WordPressは標準では1回のリクエストの中だけでオブジェクトを覚えており、Redisのようなストアをつなぐと、リクエストが終わった後も結果が残ります。上の処理順序では🅑の③段階にあたります。
| 種類 | 区分 | リクエスト終了後も残るか | 説明 |
|---|---|---|---|
| WP_Object_Cache | WordPress標準 | いいえ | 1回のリクエストの中だけで覚える内蔵キャッシュです。 |
| Redis | オブジェクトキャッシュ | はい | 別のメモリストアで、Redis Object Cacheプラグインのドロップインでつなぎます。 |
| Memcached | オブジェクトキャッシュ | はい | 別のメモリストアです。 |
| APCu | オブジェクトキャッシュ | はい(同じサーバー内) | PHPが使う共有メモリに保存します。 |
| ファイル | オブジェクトキャッシュ | はい | ディスクにファイルとして保存します。 |
| InnoDBバッファプール | データベース自体のキャッシュ・オブジェクトキャッシュではない | はい | MySQL・MariaDBがテーブルデータとインデックスをメモリに載せておきます。 |
| クエリキャッシュ | データベース自体のキャッシュ・オブジェクトキャッシュではない | — | MySQL 8.0で削除され、MariaDBには残っていますが標準ではオフです。 |
WordPressは、Redis Object Cacheプラグインが入れるドロップインファイル([object-cache.php])でRedisにつなぎます。インストール手順は WordPressのRedisキャッシュのインストールと設定 の記事にあります。
🔢 FAQ & おすすめコンテンツ
ℹ️ 提携について
当サイトのコンテンツにはアフィリエイトリンクが含まれています。訪問者がこのリンクを通じて商品やサービスを購入すると、当サイトは販売元から手数料を受け取ります。この過程において、購入者が支払う金額(イベント割引適用で金額が下がります↓)は上昇しません。掲載されている価格・割引・在庫情報は作成時点のものであり、実際とは異なる場合がありますので、ご購入前に販売元にて最終確認をお願いいたします。商品の選定および評価は独自の基準に基づいて行われており、手数料の支払いの有無は紹介順や評価内容に影響を与えません。








