Prime Cache – ページキャッシュと Core Web Vitals (設定不要)

説明

Prime Cache は WordPress 用の軽量なパフォーマンスプラグインです。有効化した直後からページキャッシュが動作します。wp-config.php の編集も、手動のセットアップも不要です。さらに、ブラウザーキャッシュヘッダー、ファイル最適化 (最小化、defer、delay)、遅延読み込み、WebP 変換、キャッシュのプリロード、自動キャッシュパージも提供します。

5 分のセットアップ動画チュートリアルはこちら :

さらに一歩踏み込んでみましょう― PageSpeed のスコアがオレンジ色の82点で停滞している状態から、緑色の90点台へと引き上げる方法 (日本語ナレーション) :

できるだけ速くしたいサイト運営者のために、設定画面では任意の WP_CACHE の1行を表示します。この行を追加すると配信がドロップインモードに切り替わり、WordPress コアが読み込まれる前にキャッシュ済みのページが配信されます。追加するかどうかは完全に任意で、追加作業もすべて手動です。プラグインが wp-config.php に書き込むことはありません。

無料版の機能

  • ページキャッシュ
  • ブラウザーキャッシュヘッダー
  • .htaccess 最適化
  • Gzip 圧縮
  • 404ページのキャッシュ
  • HTML / CSS / JavaScript の最小化
  • 小さな CSS のインライン化
  • JavaScript の defer
  • JavaScript の delay
  • Google Fonts の display=swap
  • 遅延読み込み
  • WebP 変換
  • アップロード時の画像リサイズ
  • EXIF データの削除
  • WebP の一括最適化
  • ホームページ、公開済みの投稿、公開タクソノミーのキャッシュプリロード
  • リンクプリフェッチ
  • パフォーマンスチューニング (絵文字、jQuery Migrate、埋め込みなど、WordPress の不要な機能を無効化)
  • コンテンツ変更時の自動キャッシュパージ
  • セキュリティーヘッダー
  • インポート / エクスポート
  • WP-CLI 対応

任意のアドオン機能

作者のサイト (https://raplsworks.com/plugins/prime-cache/) で販売している別のアドオン Prime Cache Pro は、無料版プラグインを拡張します。無料版プラグインの動作に Pro 版は必要ありません。

  • AI スピード診断・相談 — サーバーとトップページを計測し、遅さの原因を分かりやすく解説、検証済みの対策をワンクリックで適用します (API キーはお客様ご自身のものを使用: Anthropic / OpenAI / OpenRouter / Gemini)
  • AVIF 変換 (共通の WebP エンジンに追加)
  • Critical CSS と未使用 CSS の削除
  • CDN の URL 書き換え
  • Cloudflare、Sucuri、Varnish との連携
  • オブジェクトキャッシュのバックエンド (APCu / Redis / Memcached)
  • サイトマップを利用したキャッシュのプリロード
  • データベースクリーンアップ
  • Heartbeat の制御
  • Google Fonts と Google Analytics のセルフホスティング

国際化

  • 英語 (原文)
  • 日本語翻訳を同梱 (WordPress 翻訳スタイルガイド準拠)
  • .pot テンプレートによる翻訳対応

ドキュメント

すべての設定と動作についての詳しいドキュメントはこちらです。

  • 無料版マニュアル (英語): https://raplsworks.com/prime-cache-free-manual-en/
  • 無料版マニュアル (日本語): https://raplsworks.com/prime-cache-free-manual-ja/
  • Pro 版マニュアル (英語): https://raplsworks.com/prime-cache-manual-pro-en/
  • Pro 版マニュアル (日本語): https://raplsworks.com/prime-cache-manual-pro-ja/

外部サービス

無料版の Prime Cache プラグインは、外部サービスに一切接続しません。無料版プラグインが第三者にデータを送信することは、いかなるときもありません。

以下の第三者のホスト名は、プラグインのソースコード内に文字列としてのみ登場します。プラグインがこれらのホストに対して通信を行うことはありません。

  • googletagmanager.comgoogle-analytics.comconnect.facebook.netwidget.intercom.ioembed.tawk.toincludes/class-file-optimizer.php に、「Delay JS」機能の URL パターンのプリセットとして記載しています。これらは、ページ上にすでに存在する第三者のスクリプト (他のプラグインやテーマが追加したもの) を認識し、その実行を最初のユーザー操作まで遅延させるためにのみ使用します。プラグイン自身がこれらのサービスを読み込んだり、取得したり、埋め込んだりすることはありません。
  • cdnjs.cloudflare.com — コード内のコメントと、一部のテーマ (Cocoon など) が同梱の jQuery を CDN 版に置き換える仕組みを説明する管理画面のヘルプテキストにのみ登場します。プラグインがこのホストを呼び出したり、このホストからリソースを読み込んだりすることはありません。

任意のアドオンである Prime Cache Pro を導入した場合、その外部サービスの利用については別プラグインである Prime Cache Pro 自身の readme に記載しています。Prime Cache (無料版) 単体では、外部への通信は一切行いません。

ページキャッシュのドロップインが出力バッファーを開いたままにする理由

ページキャッシュプラグインは、レンダリング済みの HTML レスポンス全体を取得し、ブラウザーに届く前にその本文をディスクへ書き出す必要があります。dropins/page-cache.php はリクエストの早い段階で ob_start() を呼び出し、リクエストの終了時に PHP が自然にバッファーをフラッシュするのに任せます。取得した本文は、バッファーのコールバック内でキャッシュファイルに書き込まれます。バッファーはリクエストの途中では意図的に閉じません。途中で閉じると、キャッシュされる本文が途中で切れるか、シャットダウン時に最後の出力を行うプラグインやテーマの取得に失敗するためです。これは、他の主要なページキャッシュプラグイン (WP Super Cache、W3 Total Cache、WP Rocket、Cache Enabler など) と同じ設計です。includes/class-html-pipeline.php の HTML 変換パイプラインも、同じ理由で同じパターンを採用しています。

スクリーンショット

インストール

  1. WordPress 管理画面の「プラグイン」>「新規追加」で「Prime Cache」を検索し、「今すぐインストール」をクリックします (または prime-cache フォルダーを /wp-content/plugins/ にアップロードします)
  2. WordPress の「プラグイン」メニューからプラグインを有効化します
  3. 管理メニューから「Prime Cache」を開きます
  4. 「ダッシュボード」タブでは、すべての機能の概要を確認できます
  5. 「ページキャッシュ」タブでページキャッシュを有効化すれば使い始められます。wp-config.php の変更は不要です

クイックスタート

  1. 「ページキャッシュ」タブ – ページキャッシュと .htaccess 最適化を有効化します
  2. 「ファイル最適化」タブ – HTML、CSS、JavaScript の最小化を有効化します
  3. 「メディア」タブ – 遅延読み込みと WebP 変換を有効化します
  4. 「プリロード」タブ – キャッシュのプリロードとリンクプリフェッチを有効化します

FAQ

PageSpeed Insights や Core Web Vitals のスコアは改善しますか ?

各機能は Core Web Vitals の典型的なボトルネックを対象としています。ページキャッシュとプリロードはサーバー応答時間 (TTFB。LCP に影響します) を短縮し、圧縮と JavaScript の defer / delay はレンダーブロックリソースを削減します。Lazy Load と WebP 変換は画像の容量を削減し、先頭 N 枚をスキップする Lazy Load と fetchpriority=high は LCP 画像を保護します。実際のスコア変化はテーマ・ホスティング・他のプラグインに依存するため、各機能の有効化前後に PageSpeed Insights で計測してください。

サーバー要件を教えてください。

WordPress 5.8以降、PHP 7.4以降です。WebP 変換には GD または Imagick の PHP 拡張が必要です。

Prime Cache は他のキャッシュプラグインと併用できますか ?

併用できません。複数のキャッシュプラグインを同時に実行すると競合が発生します。Prime Cache は既知のキャッシュプラグイン14種類を自動的に検出して警告します。Prime Cache を使う前に、他のキャッシュプラグインを無効化してください。

Nginx でも動作しますか ?

動作します。ページキャッシュ、ファイル最適化、メディア最適化をはじめ、PHP ベースの機能はすべてどのサーバーでも動作します。.htaccess 最適化機能は Apache 専用ですが、Nginx では無効化できます。

WooCommerce に対応していますか ?

対応しています。WooCommerce のカート、購入手続き、アカウントの各ページは自動的にキャッシュから除外されます。さらに、WooCommerce 以外のページでのスクリプト無効化や、カートフラグメント AJAX の無効化といった最適化も利用できます。

キャッシュをクリアするにはどうすればよいですか ?

方法は複数あります。管理バーのメニュー (10種類以上のオプション)、ダッシュボードのクイックアクション、WP-CLI コマンド (wp prime-cache flush)、または自動パージのトリガーです。

特定のページだけキャッシュを無効化できますか ?

できます。投稿または固定ページを編集し、サイドバーの Prime Cache メタボックスで「このページのキャッシュを無効化」にチェックを入れてください。

.htaccess ファストパスはすべてのリクエストで機能しますか ?

.htaccess ファストパスは、PHP を読み込まずにキャッシュ済みのページを配信することで最大の速度を実現します。動作条件は、Host ヘッダーが小文字であること、クエリ文字列がないこと (cache_query_strings が無効な場合を除く)、Vary Cookie がないこと、URL パスが ASCII のみであること、GET リクエストであることです。これらの条件に一致しないリクエストは PHP ドロップイン経由で配信されます。こちらも十分に高速ですが、PHP をまったく使わないわけではありません。

WordPress のマルチサイトに対応していますか ?

マルチサイトではページキャッシュはサポートしていません。その他の機能 (ファイル最適化、遅延読み込み、画像最適化など) はマルチサイトでも通常どおり動作します。

画像最適化はどのように動作しますか ?

アップロード時に (自動変換が有効な場合) JPG / PNG 画像が WebP に変換されます。すべてのサムネイルサイズも変換されます。WebP は、.htaccess のリライトルール、picture タグ、または URL の書き換えによって、対応するブラウザーに配信されます。

すべての最適化を有効にしても安全ですか ?

まずはページキャッシュと基本的なファイル最適化から始めてください。変更するたびにサイトの表示を確認しましょう。JavaScript の defer と delay は一部のテーマやプラグインに影響する場合があるため、十分にテストしてください。

Prime Cache は外部サービスにデータを送信しますか ?

送信しません。無料版プラグインは、利用者のデータや API リクエストを第三者のサービスに送信しません。キャッシュのプリロードは、自分のサイトの URL にのみリクエストを送ります。一部の任意機能では、サイトがすでに使用している外部アセットに対してブラウザーのリソースヒント (preconnect など) を追加する場合がありますが、Prime Cache 自体が外部サービスにデータを送信することはありません。

Prime Cache は wp-config.php を書き換えますか ?

書き換えません。Prime Cache は、いかなる場合も wp-config.php に書き込みません。有効化した直後から標準モードでページキャッシュが動作し、プラグイン自身がキャッシュ済みのページを配信して、テーマ、データベースクエリ、テンプレートのレンダリングをスキップします。任意で define( 'WP_CACHE', true ); をご自身で wp-config.php に追加すると、ドロップインモードを有効化できます。ドロップインモードでは、WordPress コアが読み込まれる前にキャッシュ済みのページが配信されます (最速の経路です)。この手順は完全に任意で、完全に利用者の手に委ねられています。プラグインは定数を検出するだけで、追加、変更、削除は一切行いません。

評価

2件のレビューをすべて表示

貢献者と開発者

Prime Cache – ページキャッシュと Core Web Vitals (設定不要) はオープンソースソフトウェアです。以下の人々がこのプラグインに貢献しています。

貢献者

“Prime Cache – ページキャッシュと Core Web Vitals (設定不要)” は1ロケールに翻訳されています。 翻訳者のみなさん、翻訳へのご協力ありがとうございます。

“Prime Cache – ページキャッシュと Core Web Vitals (設定不要)” をあなたの言語に翻訳しましょう。

開発に興味がありますか ?

コードを閲覧するか、SVN リポジトリをチェックするか、開発ログRSS で購読してみてください。

変更履歴

1.10.57

  • 修正: プラグインやテーマを更新してもキャッシュがクリアされず、キャッシュ済みのページや、更新されたファイルの内容ハッシュを持つ結合・圧縮済みの CSS/JS が、手動でキャッシュを削除するまで古いまま配信されることがありました。Prime Cache は WordPress 本体の更新でしかパージしておらず、通常のプラグイン更新はプラグインが有効なまま差し替わるため、ほかのどのイベントでも捕捉できませんでした。プラグインやテーマの更新後にもキャッシュ全体をパージするようにしました (本体の更新では以前から動作しており、翻訳のみの更新はこれまでどおり対象外です)。

1.10.56

  • 修正: 最適化アセットが0バイトのファイルとして書き出され、中身は空なのに「成功」扱い (200) のスタイルシートやスクリプトとして配信されてしまい、ページのスタイルが崩れたまま静かに放置されることがありました。404よりも気付きにくい問題です。空の最適化アセットの書き込みを拒否し、代わりに最適化前の元ファイルへフォールバックするようにしました。一部のサイトで Cocoon のスマートフォン用サイドバーが真っ白になる症状の原因と考えられます。
  • 追加: 毎時のクリーンアップが、生成された最適化アセット (結合・圧縮した CSS/JS と未使用 CSS の削除) も有効期間で老化削除し、残った0バイトのファイルを取り除くようになりました。従来これらはクリーンアップが到達しない隣のディレクトリーにあり、際限なく溜まる可能性がありました。クリティカル CSS とセルフホストのフォントは対象外です。まだ参照されているアセットが削除された場合は、1.10.55で追加したアセット欠落フォールバックが必要に応じて再生成します。

1.10.55

  • 修正: 「圧縮済み CSS/JS をクリア」と「クリティカル CSS をクリア」で、ページキャッシュもクリアするようにしました。キャッシュされたページの HTML には、生成されたそれらのアセットのハッシュ化されたファイル名が埋め込まれています。HTML を残したままファイルを削除すると、キャッシュされたすべてのページが、もう存在しないアセットを参照したままになっていました。キャッシュヒットとして配信されると、テーマの404 HTML ページが返され、ブラウザーはこれをスタイルシートとして拒否するため、再生成されるまでページはスタイルが適用されない状態で表示されていました。現在は両方のボタンがページキャッシュをパージするため、有効なアセット URL で HTML が再構築されます。
  • 追加: アセット欠落時のフォールバック。最適化アセット (圧縮・結合された CSS/JS、または未使用 CSS の削除) が要求されたのにそのファイルが失われている場合 —— キャッシュの部分的なクリア、手動での削除、ディスクの不調など —— Prime Cache が元のソース (小さなマニフェストに記録されています) からその場で再生成し、正しい text/css / application/javascript タイプと200で配信して、ディスクへ自己修復するようになりました。再生成できない場合は、404の HTML ページではなく、正しいタイプの空ファイルを配信するため、1つのアセットが失われてもページのスタイルが崩れることはなくなりました。

1.10.54

  • 修正: Defer JavaScript または Delay JavaScript を有効にしていると、WordPress の国際化 (i18n) 系スクリプトが “wp is not defined” や “Cannot read properties of undefined (reading ‘hooks’)” で失敗し、翻訳・Contact Form 7・管理バーなど wp.* を使う機能が壊れることがある問題を解消しました。翻訳用のインラインブロック (例: -js-after を持つ wp-i18n) のために同期実行に保たれるスクリプトが、その Defer・遅延される依存元 (wp-hooks) より先に実行され、wp-hooks が定義する前に window.wp.hooks を参照して wp 名前空間全体を壊していました。Prime Cache は、そうした同期実行に保つスクリプトの依存元も同期実行に保ち、依存順序を維持するようにしました。対象はページに実際に出力されるスクリプトに限定しているため、モバイルの jQuery defer など無関係な最適化には影響しません。

1.10.53

  • 修正: Cocoon テーマで、1.10.52の jQuery 修正の後もモバイル用スライドインサイドバーが空で開くことがある問題を解消しました。サイドバーボタンをタップすると Cocoon はサイドバーをドロワーに移動して id を変更しますが、Cocoon 自身のスクリプトが表示用クラスを追加する際に 変更前 の id で要素を選び直しているため、クラスが適用されず、移動先のサイドバーがテーマのモバイル用 display:none のまま残っていました。Prime Cache は、移動先のサイドバーをドロワー内で表示状態に保つ Cocoon 専用の小さな CSS ルールを出力するようにしました (ドロワー内に限定しているため、ページ内の通常のサイドバーには影響しません)。1.10.52と合わせて、Cocoon のモバイルサイドバーが空になる問題は完全に解消します。

1.10.52

  • 修正: Delay JavaScript を有効にしているとき、テーマまたはプラグインが jQuery.noConflict() ($ エイリアスを解放するためによく呼ばれる呼び出し) を呼ぶサイトで、jQuery とそれに依存するページ上のすべてのスクリプトが undefined になることがある問題を解消しました。Delay JS ローダーが window.jQuerywindow.$ を単一の内部変数で保持していたため、noConflict()window.$ を jQuery 読み込み前の値に戻すと window.jQuery まで消えていました。その結果、ページ全体が “jQuery is not a function” / “$ is not a function” で失敗し、jQuery に依存するものがすべて壊れていました。window.$window.jQuery とは独立した保持値を持つようにしました。これが Cocoon のモバイル用スライドインサイドバーが空で開く現象 (1.10.51で報告) の実際の原因で、同じ形で壊れていた他の jQuery 依存機能もすべて回復します。
  • 撤回: 1.10.51で導入した Cocoon 個別の変更は原因を取り違えていたため削除しました。上記の jQuery ローダー修正が正しい修正です。

1.10.51

  • Delay JavaScript を有効にしていると Cocoon のモバイル用スライドインサイドバーが空 (真っ白) で開く問題に対し、Cocoon 本体スクリプトを読み込み時に実行させる Cocoon 個別の対応を試みました。しかし原因を取り違えており解消しませんでした。1.10.52で撤回し、1.10.52が本当の原因を修正しています (上記参照)。

1.10.50

  • 修正: 圧縮した CSS/JS のキャッシュを、リクエスト URL ではなく元ファイル単位で管理するようにしました。一部のテーマ (特に Cocoon) は、ページ表示ごとに変わるバージョンクエリ文字列をすべてのスタイルシートに付与します。キャッシュのファイル名を URL 全体から生成していたため、内容が完全に同一の CSS でもアクセスごとに別ファイルとして書き出され、wp-content/cache/prime-cache-fo フォルダーが際限なく肥大化していました。あるサイトでは25万を超えるファイルと数 GB の重複した CSS に達していました。キャッシュキーは、解決済みのファイルパスと更新時刻・サイズを使うようにし、同一の出力が単一のファイルにまとまるようにしました。更新後は、すでに蓄積した重複を取り除くために圧縮済み CSS/JS を一度クリアしてください。

1.10.49

  • 表示名を「Prime Cache – ページキャッシュと Core Web Vitals (設定不要)」に短縮しました。従来の表示名は機能を6つ並べて81文字あり、プラグインディレクトリが許容する80文字を超えて、ガイドラインが「readme スパム」と呼ぶ状態でした。並べていた機能は説明文に移しました。説明文も検索の対象です。動作の変更はありません。

1.10.48

  • 修正 : 「小さなCSSファイルをインライン化」機能において、各スタイルシートのメディアクエリ条件が保持されるようになりました。以前は、メディアクエリの範囲が限定された小さなスタイルシート (例えば、<link media="(max-width:800px)"> 経由で読み込まれる、モバイル専用テーマのCSSなど) をインライン化すると、メディアクエリが削除されてしまい、それらのルールがすべての画面サイズに適用され、デスクトップ版のレイアウトが崩れる可能性がありました。インライン化された CSS は、対応する @media ブロックで囲まれるようになりました。

1.10.47

  • 修正 : オブジェクトキャッシュのステータスにおいて、バックエンドがインストールされているものの実際には実行されていない場合 (たとえば、 PHP 拡張機能が存在しても実行時に無効化されており、 WordPress が内部キャッシュに静かにフォールバックしていた場合など) に、「アクティブ」と表示されることがありました。今回の修正により、オブジェクトキャッシュが実際に初期化されたことを確認してから 「アクティブ」 と報告するようになり、そうでない場合は 「インストール済みだが実行されていない」 と表示されるようになりました。 (Prime Cache Pro 1.9.6と連携して動作します。)

1.10.46

  • 変更点 : セットアップの注意事項にある「ドロップインモードを有効にする方法」の手順ガイドは、注意事項をコンパクトに保つため、デフォルトで折りたたまれるようになりました。概要をクリックすると展開されます。 (バージョン1.10.44での変更 (展開された状態で表示されていた) を修正しました。)
  • 変更点 : オートプリセットの環境概要から「プロトコル」の行を削除しました。リバースプロキシや CDN の背後では、サーバー側から確認できる HTTP プロトコルは信頼性が低いため (訪問者が HTTP/2 を利用している場合でも、 PHP は HTTP/1.1 と報告することがある) 、これを表示することは誤解を招く恐れがありました。また、このプロトコルに依存する設定は存在しません。

1.10.45

  • 改善点 : 実環境でのチューニング結果に基づき、 Core Web Vitals のスコア向上に向けて最適化プリセット (「アグレッシブ」および「自動」) を全面的に見直しました。これにより、 LCP を確保するために最初の数枚の画像を優先的に読み込み、レイアウトシフト (CLS) を低減するために画像の幅・高さの欠落情報を追加し、 DOM ベースの HTML 最適化を有効化し、 Delay JS のフォールバック時間を延長するようになりました。 Pro アドオンを使用すると、プリセットはファイルの結合 (HTTP/2では効果がない) の代わりに「未使用 CSS の削除 + クリティカル CSS 」を優先し、 YouTube の埋め込みを「クリックして読み込む」サムネイルに置き換えるようになりました。「ツール」タブからプリセットを再適用して、新しいチューニングを反映させてください。

1.10.44

  • 改善点 : 「最大遅延」の警告に「了解」ボタンが追加されました。最大遅延が有効な状態で保存するたびに警告が再表示されるのではなく、一度「了解」をクリックするまでプラグイン画面に警告が表示されたままとなり、その後完全に非表示になります。最大遅延を一度オフにしてから再びオンにすると、警告が再び表示されます。
  • 改善点 : オプションの「ドロップインモードの有効化」 (WP_CACHE) の手順が、初心者にも分かりやすくなりました。ステップバイステップのガイドには、そのままコピーできるコード行と、 wp-config.php の変更前後の明確な例が展開表示されるため、誰でも安心して1行の変更を行うことができます。

1.10.43

  • 追加機能 : 親切な「1回限りのレビュー依頼」。 Prime Cache を1週間使用すると、プラグイン独自の画面に1回だけ、 WordPress.org へのレビュー投稿を促すバナーが表示されます。このバナーは管理画面の他の箇所でしつこく表示されることはなく、レビューを投稿するかバナーを閉じれば、二度と表示されることはありません。

1.10.42

  • 追加 : オプションのアドオンが、「ドロップインモードを有効にする」 (WP_CACHE) という通知をワンクリック操作に置き換えられるよう、拡張ポイントを追加しました。無料プラグイン自体は依然として wp-config.php を編集することはありません。手動での手順を表示するのみであり、アドオンが代わりに処理を行うことを提案した場合は、きれいに処理を譲ります。アドオンを導入していないサイトについては変更はありません。

1.10.41

  • 修正済み : 「Delay JavaScript」が有効になっている場合、任意のタブで設定を保存すると、たとえ「モバイルキャッシュ」および「モバイルキャッシュを分離」を無効にしていたとしても、これらの機能が再び有効になってしまう不具合を修正しました。「Delay JS」はもはやモバイルキャッシュを強制的に有効にすることはなく (動的に生成されるモバイルページにも適用されます) 、モバイルキャッシュ自体が有効になっている場合にのみ「モバイルキャッシュを分離」が必要となります (モバイル変換されたHTMLがデスクトップキャッシュに保存されないようにするため) 。プリセットアプリケーションにおける同様の過剰な連動も修正されました。

1.10.40

  • 追加: 5 分の動画チュートリアルをプラグインページに埋め込み、ドキュメントからリンクしました。
  • 改善: 管理画面の Pro Features ページで「AI スピード診断・相談 (BYOK)」を紹介するようにしました。環境を計測し、分かりやすい所見を得て、検証済みの対策をワンクリックで適用でき、追加の質問はチャットで行えます。

1.10.39

  • 改善: ダッシュボード統計で、プリロードクローラーが生成したキャッシュファイルを MISS に含めず「プリロード」として別に集計するようにしました。ウォーム済みページへのプリロード取得はまったくカウントされません。これによりヒット率が実訪問者のトラフィックのみを反映するようになりました。既存のカウンターには影響しません。最初から計測し直すには「リセット」をご利用ください。

1.10.38

  • 追加: 最大 Delay モード — Delay JS の対象を jQuery 本体とインラインスクリプトまで拡大します。ユーザー操作後もスクリプトはドキュメント順に実行され、DOMContentLoaded / load イベントが再送出されるため、依存関係はそのまま動作します。PageSpeed のラボ計測中はほぼすべての JavaScript が実行されず、TBT がほぼゼロになります。同意管理スクリプト・JSON-LD・除外リストは遅延されません。
  • 追加: 「デスクトップにも Delay JS を適用」オプション — これまで Delay JS はモバイル専用でした。オプトインでデスクトップ応答にも拡大し、デスクトップの PageSpeed スコアも改善できます。
  • 追加: Nginx 直接配信スニペット — キャッシュ設定に表示されるコピー & ペースト用の server ブロック設定です。PHP を起動せずに Nginx がキャッシュ済みページをディスクから直接配信し、.htaccess ファストパスの条件を 1 対 1 で再現します。事前圧縮ファイル用の gzip_static にも対応しています。
  • 改善: 小さい CSS のインライン化のしきい値を Pro アドオンの結合スタイルシートにも適用しました。結合結果がしきい値以内ならインライン化され、非同期 CSS の再スタイル揺れなしでレンダーブロック CSS リクエストをゼロにできます。

1.10.37

  • 修正: ログイン中のユーザーには、ログインユーザー向けキャッシュが有効な場合を除き、HTML 最適化パイプライン (圧縮、defer / delay JS、アドオンの CSS 最適化) を適用しないようにしました。ログインユーザーのページはページキャッシュを通らないため、最適化はリクエストごとのオーバーヘッドになるだけでした。さらに、未使用 CSS の削除の出力など URL 単位のキャッシュ済み成果物は非ログイン表示から生成されるため、管理バーや Cocoon のフロント側管理メニューなど、ログインユーザー専用の要素がスタイルなしや非表示になることがありました。

1.10.36

  • 変更: Lazy Load モジュールが最初の画像に付与する fetchpriority=”high” を、prime_cache_lazyload_first_image_priority フィルターで無効化できるようにしました。Pro アドオンの LCP 最適化はこのフィルターを利用し、LCP 候補と判定した画像だけに high を付与します (high の画像が 2 つあると効果が薄まるため)。

1.10.35

  • 修正 (Cocoon テーマ): ブラウザーのバック / フォワードキャッシュでページに戻った際に、モバイルのドロワーメニュー (ハンバーガー・検索・シェア・サイドバー) が開いたままになる問題を修正しました。Cocoon のチェックボックス式メニューは pageshow イベントを処理しておらず、本プラグインの Delay JS / 非同期 CSS によって、従来ページを bfcache 対象外にしていた進行中のリクエストがなくなったことで顕在化していました。互換シムが bfcache 復元時にドロワーを閉じます。

1.10.34

  • 修正: Lazy Load の「スキップする先頭画像数」設定が、WordPress コアやテーマがスキップ対象の画像にすでに付与している loading=”lazy” 属性も削除するようにしました。従来は新たに lazy 属性を付けないだけだったため、ファーストビュー (LCP) の画像が遅延読み込みのままになり、描画が数秒遅れることがありました。
  • 改善: 設定の保存時にページキャッシュを自動削除するようにしました。キャッシュ済みページは生成時点の設定で描画されるため、デフォルトの 7 日間の有効期間では、Lazy Load・圧縮・Defer / Delay JavaScript・画像配信など HTML に影響する設定を変更しても、古い HTML が長期間配信され続けることがありました。設定は次のページ表示から反映されます。

1.10.33

  • 修正済み : Google Site Kit は、JavaScript の「Combine」「Delay」「Defer」処理から常に除外されるようになりました。Site Kit はマルチチャンク型の Webpack アプリとして提供されており、そのランタイム、ベンダー、モジュールの各バンドルは 1 つのレジストリを共有し、元の順序で読み込まれる必要があります。個々のチャンクを最適化すると、レジストリの同期が崩れて「googlesitekit is not defined」というエラーが発生し (Site Kit のダッシュボードやスニペットが読み込めなくなる) 、問題が生じていました。jQuery や Divi と同様に扱われるため、手動での除外設定は不要です。

1.10.32

  • 修正済み : JavaScript の「Defer / Delay」除外リストは大文字小文字を区別して照合されていたため、「jQuery」のような自然なエントリが実際のスクリプト URL「jquery.min.js」と一致せず、jQuery が常に遅延実行され続けていました。その結果、インラインスクリプトで「jQuery is not a function」というエラーが発生していました。現在、除外リストは大文字小文字を区別せずに照合されるようになりました。
  • 修正 : jQuery および jquery-migrate は、Defer JavaScript から常に除外されるようになりました (Delay からはすでに除外されていました) 。これにより、インラインの jQuery 呼び出しを出力するテーマやプラグインが、遅延実行によって動作しなくなることはなくなりました。

1.10.31

  • 修正 : 「設定をデフォルトに戻す」を実行すると、すべてのキャッシュもクリアされるようになりました。以前は、リセットによって設定が復元されるだけだったため、古い最適化設定 (「未使用の CSS を削除」、「JS の読み込みを遅延」など) に基づいてキャッシュされていたページは、それらを生成した設定が削除された後も、マークアップが破損している場合さえありながら、引き続き配信され続けていました。

1.10.30

  • 修正: Gzip 圧縮をオフにした後、残っていた .gz のキャッシュが、再生成された HTML より古い内容をクリーンアップまで配信し続けることがある問題を修正しました。ドロップインは、現在の設定で Gzip が有効で、かつ .gz ファイルが対応する HTML と同じかそれより新しい場合にのみ、.gz を配信します。
  • 修正: キャッシュの統計と毎時のクリーンアップで、スキャンの途中でキャッシュのサブディレクトリーが読み取れなくなった場合に致命的なエラーが発生するおそれを解消しました。スキャンは例外で保護されます (統計は取得できた分を表示し、クリーンアップは次回の実行で再試行します)。
  • 修正: アンインストール時に prime_cache_config_schema オプションも削除するようにしました。
  • 明確化: 「Cache 404 Pages」設定の説明に、ランダムな URL へのスキャンを受けるサイトではディスク使用量とのトレードオフがある旨を追記しました。
  • 改善: 標準モードの通知に、wp-config.php を編集するための手順 (ファイルの場所、バックアップ、変更または追加する正確な行、確認方法) を、折りたたみ形式で表示するようにしました。
  • 掲載情報: WordPress.org プラグインディレクトリー向けに、説明、インストール手順、スクリーンショットを刷新しました。

1.10.29

  • 設定不要のキャッシュ: wp-config.php を変更しなくても、有効化した直後からページキャッシュが動作するようになりました。任意のドロップイン定数 WP_CACHE がない場合は、プラグイン自身が新しい標準モードでキャッシュ済みのページを配信します (WordPress コアは読み込まれますが、テーマ、クエリ、レンダリングはスキップされます)。define( 'WP_CACHE', true ); を手動で追加すると、配信がより高速なドロップインモードに切り替わります。
  • wp-config.php には一切書き込みません: wp-config.php を編集していたコードは、1.10.28で追加したワンクリックの同意ボタンを含め、すべて削除しました。設定画面では、手動で追加する任意の行を表示します。無効化時とアンインストール時にも、このファイルには触れません。これは WordPress.org のレビューでの指摘に対応したものです。
  • オブジェクトキャッシュのドロップインの設置を、任意のアドオンに移しました。無料版プラグインは wp-content/object-cache.php を生成も書き込みもしません。削除するのは、自身が署名したドロップインのみです。バックエンド (APCu / Redis / Memcached) の導入は、アドオンに委ねます。

1.10.28

  • プライバシーと同意: Prime Cache が wp-config.php を自動的に編集することはなくなりました。ページキャッシュを有効化するには、標準のドロップイン定数 define( 'WP_CACHE', true ); が必要ですが、プラグインはまずサイト運営者の明示的な許可を求めるようになりました。有効化後、管理画面の通知からワンクリックでこの行を追加できます (自分で追加できるよう、記述するコードも表示します)。自動修復の処理も、その承認が記録された後にのみこの行を書き込みます。無効化時に削除するのは、引き続き Prime Cache 自身が付けた行のみです。これは WordPress.org のレビューでの指摘に対応したものです。

1.10.27

  • 強化: advanced-cache.php を、文字列から実行可能な PHP を組み立てるのではなく、同梱のドロップインのテンプレート (dropins/advanced-cache.tpl.php) をコピーし、このインストールで解決したパスを差し込んで生成するようにしました。コピーしたファイルは、アップグレード時に一度だけ書き換えられます。WordPress はプラグインの場所を示す定数が定義される前にドロップインを読み込むため、ローダーのパスは引き続きコピー時に埋め込まれます。
  • 強化: 画像最適化の「パスを指定してファイルを変換する」処理のガードを、すべてが ABSPATH 配下にあると仮定せず、それぞれの API (WP_CONTENT_DIR、プラグインディレクトリー、get_theme_root()、wp_get_upload_dir()) で解決した WordPress の管理下の場所と、設定された任意の追加ディレクトリーに限定するようにしました。これにより、テーマ、プラグイン、アップロードを WordPress のルート外に移設した環境でも、このチェックが正しく機能します。

1.10.26

  • 強化: ドロップインの JSON 設定の保存先を、wp-content/prime-cache-config/ ではなく wp-content/cache/prime-cache-config/ (ページキャッシュやファイル最適化のディレクトリーと並ぶ、想定どおりのキャッシュの場所) に変更しました。キャッシュのパージでドロップインの設定が消えないよう、ページキャッシュのディレクトリーとは分けています。アップグレード時には、新しいパスで設定を再生成し、advanced-cache.php をそこを参照するよう書き換えたうえで、古いディレクトリーを完全に掃除します。このインストールがそこに書き込んだ過去のすべての形式 (インストール単位のキー付き、AUTH_SALT のキー付き、素のもの、最初期のホスト名付きのファイル) を削除し、同居する他のインストールの設定が残っていなければディレクトリー自体も削除します。設定は引き続き Settings API で正式に保存されます。

1.10.25

  • 強化: WordPress 読み込み前のページキャッシュのドロップインが、生成された PHP ファイルではなく、実行不可能な JSON のデータファイル (site-config-*.json) から設定を読み込むようにしました。設定は引き続き Settings API で正式に保存されます。JSON ファイルは、WordPress (と options API) が使えるようになる前にドロップインが必要とする一部の設定を写しているだけです。既存の PHP 設定ファイルはアップグレード時に再生成され、削除されます。多層防御として、設定ディレクトリーにはすべてを拒否する .htaccessindex.html を追加します (データに秘密情報は含まれません)。
  • 強化: URL からパス、パスから URL への変換を、すべてが ABSPATH の直下にあると仮定せず、wp_get_upload_dir()、content_url()、plugins_url()、home_url() を基にした、移設に対応した共通のマッパー経由で行うようにしました。これにより、wp-content や uploads を移設した環境でも、WebP 変換、CSS のインライン化と最小化、メディア最適化が引き続き動作します。また、外部ホストとパストラバーサルは拒否します。
  • 強化: advanced-cache.php を生成する処理で、代替となるドロップインのパスを、ハードコードした wp-content/plugins のパスではなく plugin_dir_path() (プラグイン自身の場所) から求めるようにしました。
  • ドキュメント: 「Local jQuery」のヘルプテキストとコードのコメントを、特定の CDN ホスト名を挙げない表現に書き換えました。無料版プラグインがリモートホストからファイルを読み込むことはありません。Local jQuery 機能は、既存のハンドルを WordPress コアに向け直すだけです。

1.10.24

  • 強化: 画像変換の AJAX アクション3つ (pc_img_scan / pc_img_batch / pc_img_statsprime_cache_img_* に変更)、一括変換の nonce (pc_img_nonce -> prime_cache_img_nonce)、画像サイズの transient キー (pc_imgdim_ -> prime_cache_imgdim_) を、プラグインの完全な prime_cache_ 名前空間に統一しました。アンインストール時のクリーンアップでは、新旧どちらの transient キーも削除します。
  • 強化: ページキャッシュのドロップイン内のすべての変数名を、短い $_pc_ というプレフィックスから、一意な $prime_cache_pc_ に改名しました。これにより、キャッシュミス時にドロップインが WordPress へ制御を戻した後、汎用的な名前でグローバルスコープに変数が残ることがなくなります。動作に変更はありません。

1.10.23

  • 強化: 管理画面の設定にあるインラインのスクリプトブロック5つを、フッターに登録したスタブハンドル (prime-cache-admin-ui) に対して wp_add_inline_script() で追加するようにしました。これにより、Plugin Check がスクリプトの直接出力として指摘しなくなります。
  • 強化: ページキャッシュのドロップインが、$_SERVER['HTTP_HOST']HTTP_REFERERHTTP_USER_AGENTHTTP_IF_MODIFIED_SINCE を使用する前に stripslashes を行い、必要に応じて長さを制限するようにしました。また、SERVER_PROTOCOL は304ステータス行に反映する前に許可リストで検証します。
  • 強化: オブジェクトキャッシュのドロップインの署名用定数を、PRIME_OBJECT_CACHE から PRIME_CACHE_OBJECT_CACHE_DROPIN に改名し、プラグインの PRIME_CACHE_ というプレフィックスの規則を全体で統一しました。
  • ドキュメント: readme.txt に「外部サービス」の節を追加し、無料版プラグインが外部への通信を行わないことを明記しました。第三者のホスト名 (Google Analytics、GTM、Facebook ピクセル、Intercom、Tawk) は Delay JS の検出パターンとしてのみ登場し、cdnjs.cloudflare.com はコードのコメントとヘルプテキストにのみ登場します。
  • ドキュメント: 「ページキャッシュのドロップインが出力バッファーを開いたままにする理由」の節を追加し、WP Super Cache / W3 Total Cache / WP Rocket と共通する、意図的な ob_start() のライフサイクルについて説明しました。
  • ドキュメント: includes/class-file-optimizer.php にある HTML パイプラインの <style> / <script> の書き換え処理2か所に、phpcs:ignore の理由を説明するコメントを付けました。enqueue ではなく既存のタグをその場で置き換える必要がある理由を記載しています。

1.10.22

  • 修正: システム情報とテーマ判定のブロックにある wp_is_block_theme() の呼び出しを、function_exists() のガードを付けた call_user_func() 経由に変更しました。これにより、phpcs:ignore を考慮しない Plugin Check の静的解析が wp_function_not_compatible_with_requires_wp エラーを報告しなくなります。WP 5.8と5.9以降のいずれでも動作は変わりません。
  • 修正: load_plugin_textdomain() の呼び出しに付けた phpcs:ignore のルールコードを修正し、Plugin Check が非推奨関数の警告を報告しないようにしました。呼び出し自体は意図的に残しています (1.10.21の変更履歴を参照)。

1.10.21

  • 修正: 同梱の翻訳の読み込みを元に戻しました。1.10.20で load_plugin_textdomain() を削除したことにより、WordPress.org の言語パックに依存するようになっていましたが、言語パックは translate.wordpress.org が配布するまで利用できず、手動でアップロードしたインストールでは利用できません。そうした環境では管理画面がすべて英語で表示されていました。呼び出しを復活させ、init フックで実行するようにし、Domain Path ヘッダーを追加して、同梱の languages/*.mo ファイルが確実に読み込まれるようにしました。

1.10.20

  • 変更: 明示的な load_plugin_textdomain() の呼び出しを削除しました。WordPress 4.6以降では、WordPress.org でホストされているプラグインの翻訳が Text Domain ヘッダーによって自動的に読み込まれるため、明示的な読み込みは不要であり、現在は Plugin Check で非推奨と指摘されます。
  • 変更: Plugin Check がこのプラグインに対して報告する、静的解析による2件の誤検知について、理由をコードとともに残せるよう記載しました。(1) 公式の advanced-cache.php と object-cache.php のドロップインを設置する file_put_contents() / rename() の組は、プラグインディレクトリーではなく WP_CONTENT_DIR (プラグインフォルダーの親にあたる階層) 配下に書き込みます。(2) wp_is_block_theme() の呼び出しは、同じ式の中で function_exists() によってガードされているため、サポート対象である WP 5.8でも安全に短絡評価されます。動作に変更はありません。

以前のバージョン

  • 1.10.19以前のバージョンの変更履歴については、プラグインのページをご覧ください: https://raplsworks.com/plugins/prime-cache/