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フックでキャッシュを自動削除する仕組みを実装します。

お気軽にご相談ください

お見積りへ お問い合わせへ