2026年5月20日
2026年5月20日
WordPressキャッシュプラグインの設定と使い方
はじめに
キャッシュはWordPressの表示速度を劇的に改善する最も効果的な手段です。PHPとデータベース処理をスキップして静的HTMLを返すことで、応答時間を数百ミリ秒から数十ミリ秒に短縮できます。主要キャッシュプラグインの設定と、functions.phpを使った制御方法を解説します。
症状・原因
- サイトの表示が遅く、Time To First Byte(TTFB)が500ms以上ある
- アクセス増加時にサーバーが重くなる
- キャッシュを設定したが効いているか確認できない
- ログインユーザーにもキャッシュが効いてしまう
解決手順
ステップ1:キャッシュの種類を理解する
キャッシュの種類と役割:
1. ページキャッシュ(最重要)
PHPとDBをスキップして静的HTMLをレスポンス
→ WP Super Cache / W3 Total Cache / WP Rocket
2. ブラウザキャッシュ
CSS/JS/画像をブラウザに保存して再リクエストを削減
→ .htaccess の Cache-Control ヘッダーで制御
3. オブジェクトキャッシュ
DBクエリ結果をRedis/Memcachedに保存
→ Redis Object Cache プラグイン
4. CDNキャッシュ
世界中のエッジサーバーにコンテンツをキャッシュ
→ Cloudflare / BunnyCDN
ステップ2:WP Super Cache を設定する(無料・シンプル)
WP Super Cache 設定手順:
1. プラグイン → 新規追加 → "WP Super Cache" インストール・有効化
2. 設定 → WP Super Cache → 「キャッシングオン」を選択
3. 「詳細」タブで推奨設定:
✓ mod_rewrite を使用してキャッシュ提供(最速)
✓ 既知ユーザーをキャッシュしない(ログインユーザー除外)
✓ 404ページをキャッシュしない
✓ 圧縮ページをキャッシュ
確認: curl でキャッシュヘッダーを確認
# キャッシュが効いているか確認
curl -I https://example.com/ | grep -E 'Cache-Control|X-Cache|Age'
# 期待するレスポンス:
# X-Cache: HIT ← キャッシュから配信
# Age: 3600 ← キャッシュ生成から3600秒経過
ステップ3:W3 Total Cache で詳細設定する(無料・高機能)
W3 Total Cache 推奨設定:
ページキャッシュ:
有効化: ON
キャッシュ方法: Disk: Enhanced(共有ホスティング向け)
または Memcached/Redis(VPS向け)
ログインユーザーをキャッシュしない: ON
Minify(圧縮):
HTML Minify: ON
CSS Minify: ON / 結合: ON
JS Minify: ON / 結合: ON(注意: 競合リスクあり)
ブラウザキャッシュ:
有効化: ON
有効期限: 1週間(604800秒)
ETag: ON
// functions.php: W3TCのキャッシュを投稿保存時に削除
function mytheme_clear_w3tc_on_save(int $post_id): void {
if (defined('W3TC') && function_exists('w3tc_flush_post')) {
w3tc_flush_post($post_id);
}
}
add_action('save_post', 'mytheme_clear_w3tc_on_save');
ステップ4:WP Rocket の推奨設定(有料・最高性能)
WP Rocket 推奨設定(設定 → WP Rocket):
キャッシュタブ:
✓ モバイルデバイス用のキャッシュを有効にする
✓ ログインユーザーのキャッシュを無効にする
キャッシュ有効期限: 10時間
ファイル最適化:
✓ CSSの縮小化
✓ JavaScriptの縮小化
✓ JavaScriptの遅延読み込み(注意:jQueryに影響する場合がある)
メディアタブ:
✓ 画像の遅延読み込み
✓ 画像サイズの追加(width/height自動付与)
プリロードタブ:
✓ キャッシュのプリロードを有効にする
✓ サイトマップベースのキャッシュプリロード
// functions.php: WP Rocketのキャッシュ制御
function mytheme_exclude_from_rocket_cache(): void {
// カート・マイアカウントページをキャッシュから除外
if (function_exists('rocket_clean_files')) {
// 動的コンテンツのURLを除外リストに追加
}
}
// WP Rocket フック: キャッシュ削除のタイミングを追加
add_action('save_post', function (int $post_id): void {
if (function_exists('rocket_clean_post')) {
rocket_clean_post($post_id);
}
if (function_exists('rocket_clean_home')) {
rocket_clean_home(); // トップページのキャッシュも削除
}
});
ステップ5:キャッシュを無効化すべきページを設定する
// functions.php: カスタム条件でキャッシュをスキップ
// 方法1: nocache_headers() を使用
add_action('template_redirect', function (): void {
// WooCommerceのカート・チェックアウトはキャッシュ禁止
if (function_exists('is_cart') && (is_cart() || is_checkout() || is_account_page())) {
nocache_headers();
return;
}
// ログインユーザーはキャッシュ禁止
if (is_user_logged_in()) {
nocache_headers();
return;
}
});
// 方法2: Cookieでキャッシュをスキップ(プラグインと連携)
add_action('wp_login', function (string $user_login): void {
// ログイン時にno-cacheクッキーをセット
setcookie('wordpress_no_cache', '1', 0, '/');
});
add_action('wp_logout', function (): void {
// ログアウト時にクッキーを削除
setcookie('wordpress_no_cache', '', time() - 3600, '/');
});
注意事項
- JS/CSSの結合(Combine)機能は競合が発生しやすいです。有効にした後は全ページを確認し、レイアウト崩れがないかテストしてください
- WooCommerceのカート・チェックアウト・マイアカウントページは必ずキャッシュから除外してください。個人情報や在庫情報が他のユーザーに見える危険があります
- キャッシュプラグインを複数インストールすると競合します。1つだけ使用してください
まとめ
無料ならWP Super Cacheがシンプルで安定しています。高機能が必要ならW3 Total Cache、最高性能を求めるならWP Rocketを選択します。いずれの場合もログインユーザーとWooCommerceの動的ページはキャッシュから除外し、save_postフックでキャッシュを自動削除する仕組みを実装します。