説明
このプラグインは、WordPress の現在のサーバー側の推測では実現できない読み込み最適化を適用するために、さまざまなデバイスの形態 (デスクトップ、タブレット、スマートフォンなど) にわたって、ページ上にどの要素が表示されているかについての実際のユーザーメトリクスを取得します。
このプラグインはフレームワークの依存パッケージであり、単体では最適化機能を提供しません。最適化機能のためには、依存プラグインである Image Prioritizer と Embed Optimizer (および WordPress コアパフォーマンスチームから今後提供されるその他のプラグイン) をインストールしてください。このプラグインは設定不要で動作するように設計されているため、現時点では設定項目やユーザーインターフェースはありません。
サイト上のページに関する実際のユーザーメトリクスはこの方法で収集されるため、現時点ではサイトは未認証のフロントエンド訪問者に対して REST API がアクセス可能である必要があります。とはいえ、メトリクスを収集する代替の仕組みを提供するための検討が進行中です。また、Safari は現在 Largest Contentful Paint メトリクスをまだサポートしていないため、現時点では Safari からメトリクスは収集されない点に注意してください。ただし、この Core Web Vitals メトリクスのサポートは今年 Interop 2025 を通じて提供される予定です。
技術的な入門、フィルター/アクションフック、およびユースケースと例を示す拡張機能については、プラグインの完全なドキュメントを参照してください。WordCamp Asia 2025 の講演 Boosting Performance with Optimization Detective もご覧いただけます。
インストール
WordPress 内のディレクトリからのインストール
- WordPress 管理画面で「プラグイン > 新規追加」にアクセスする。
- Optimization Detective を検索する。
- Optimization Detective プラグインをインストールして有効化する。
手動インストール
- プラグインの ZIP を WordPress.org からダウンロードするか、Getting Started の手順に従ったうえで、GitHub リポジトリのクローンから
npm run build:plugin:optimization-detective --env zip=trueで ZIP ビルドを作成する。 - WordPress 管理画面で「プラグイン > 新規プラグインを追加」にアクセスする。
- 「プラグインのアップロード」をクリックする
- 手順 1 でダウンロードした
optimization-detective.zipファイルをお使いのシステムから選択し、「今すぐインストール」をクリックする。 - 「プラグインを有効化」ボタンをクリックする。
FAQ
-
プラグインへのフィードバックはどこに送信できますか ?
-
このプラグインは将来の WordPress コア機能を含む可能性があるため、フィードバックを歓迎し、大変ありがたく思います。新機能の提案や要望がある場合は、WordPress パフォーマンスチームの GitHub リポジトリに issue として送信できます。トラブルシューティングのサポートが必要な場合やプラグインについて質問がある場合は、サポートフォーラムで新しいトピックを作成してください。
-
セキュリティバグはどこに報告できますか ?
-
パフォーマンスチームと WordPress コミュニティはセキュリティバグを重視しています。責任ある形で発見内容を開示していただく取り組みに感謝するとともに、そのコントリビューションを認知できるよう最大限努めます。
セキュリティ上の問題を報告するには、WordPress HackerOne プログラムをご利用ください。
-
プラグインにコントリビュートするには ?
-
コントリビューションはいつでも歓迎します。参加方法について詳しくは Core Performance Team Handbook をご覧ください。
プラグインのソースコードは、GitHub 上の WordPress/performance リポジトリにあります。
評価
貢献者と開発者
Optimization Detective はオープンソースソフトウェアです。以下の人々がこのプラグインに貢献しています。
貢献者変更履歴
1.0.0-beta6
セキュリティ
- 検出用の引数 JSON を含む SCRIPT 要素の検証を追加。これにより、
idが衝突する要素を注入してスクリプトを覆い隠し、任意のモジュールをインポートさせられる DOM Clobbering 脆弱性を修正。この脆弱性の悪用には、少なくとも寄稿者権限グループを持つ認証済みユーザーが必要でした。責任ある開示をしてくれた Asaf Mozes (amosec) に感謝します。
1.0.0-beta5
バグ修正
$wp_query->postsがnullの場合にod_get_current_url_metrics_etag()で発生する致命的エラーを防止。(2347)
機能強化
- DNS プリフェッチリンクのサポートを追加。(2256)
1.0.0-beta4
機能強化
- 拡張機能の初期化 API に URL Metric のミューテーションヘルパーを追加。(1951)
- Compression Streams API を使用して URL メトリクスに gzip 圧縮を追加。(1959)
- 負の TTL 値を使用することで、タイムスタンプにもとづく鮮度チェックを無効化できるようにする。(1940)
- web-vitals を 5.0.3 から 5.1.0 に更新。(2116)
od_url_metrics投稿のデフォルトのガベージコレクション TTL を 1 か月から 3 か月に変更し、有効期限をカスタマイズするフィルターを追加。(1950)- Optimization Detective の generator メタタグに、無効化されているすべての理由を含めて拡充。(1979)
- generator メタタグの内容に URL メトリクスを追記。(1954)
sourceURLを用いたインラインスクリプトの構築を改善し、JSON エンコードを強化、JSON を別スクリプトで出力するように変更。(2169)- Optimization Detective 拡張機能の発見しやすさとユーザーガイダンスを改善。(2261)
- 非推奨の
url_metrics_group_collectionとクラスエイリアスを削除し、Image Prioritizer で必要な OD バージョンを引き上げ。(1943)
バグ修正
- デバッグモードでグループを読み取る際に発生しうるエラーを回避。(2108)
- ページの読み込みが完了しアイドル状態になるまで、検出モジュールの読み込みを遅延。(2017)
- 拡張機能の初期化前に、URL Metric がすべての要素を含めて初期構築されるようにする。(1968)
- web-vitals.js が LCP を報告しないため、ページがバックグラウンドタブで開かれた場合は検出を短絡 (スキップ)。(1927)
1.0.0-beta3
機能強化
- Optimization Detective がドキュメントを処理する前後でアクションを発火。(1919)
OD_HTML_Tag_Processor::next_tag()を更新して$query引数を許可し、デフォルトで閉じタグの走査をスキップする準備を実施。(1872)- ロギング関数をクライアントサイドの拡張機能に公開し、
isDebugの値を自動的に考慮するように変更。(1895) - URL Metric 保存用の REST API エンドポイントを、
403 Forbiddenではなく423 Lockedステータスコードを返すように更新。(1863) - REST API と URL Metrics 投稿タイプの間で重複するロジックを解消。(1867)
バグ修正
- Link HTTP レスポンスヘッダーの URL エンコードを修正。(1907)
- URL Metric の保存後に投稿更新アクションが発火する問題を修正し、REST API エンドポイントのロジックをクラスにリファクタリング。(1865)
- URL Metric グループ内で LCP 要素が予測不能に特定される問題を修正。(1903)
- 送信済みを示す
sessionStorageキーの生成時に、非 HTTPS のコンテキストで Web Crypto API が利用できない場合に対応。(1911)
1.0.0-beta2
機能強化
- ビーコンデータ送信時の 64 KiB 制限を考慮。(1851)
- タグビジターのコンテキストに
od_url_metrics投稿の投稿 ID を追加。(1847) - 最大幅は境界値を含んだままとし、最小ビューポート幅は境界値を含まないように変更。(1839)
- 管理者に対しては、URL Metric 保存時のロックをデフォルトで無効化。(1835)
- ETag データに有効化中のプラグインを含め、デフォルトの鮮度 TTL を 1 日から 1 週間に延長。(1854)
- ETag を URL Metric の必須プロパティにする。(1824)
- メディアクエリで CSS のレンジ構文を使用。(1833)
- サイトヘルステストで、REST API 保存リクエストの失敗時の HTML レスポンスを
IFRAMEで表示するように変更。(1849)
バグ修正
ドキュメント
- Optimization Detective のドキュメントを改善。(1782)
1.0.0-beta1
機能強化
- ブロックされた REST API を検出するサイトヘルスチェックを追加し、利用できない場合は最適化を短絡 (スキップ)。(1762)
od_use_web_vitals_attribution_buildフィルターを介して、拡張機能が web-vitals の attribution ビルドの使用をオプトインできるようにする。(1759)id・class・role属性を持つBODYの子要素について、XPath の曖昧さを解消。(1797)- ログイン状態による URL Metrics の差異をなくし、管理者に対してデフォルトで最適化を無効化する挙動を廃止。(1788)
- Optimization Detective のテストカバレッジを改善。(1817)
- タグビジターのコールバックで
trueを返す代わりの手段として、OD_Tag_Visitor_Context::track_tag()メソッドを導入。(1821) - BODY の子要素までの XPath で、要素ノードのインデックスを省略。(1790)
- ページの最適化時に、管理バー内のタグの走査をスキップ。(1816)
バグ修正
- wp-env のローカル環境でも最適化が実行されるようにし、無効化されている場合はデバッグメッセージをコンソールに出力。(1822)
NOSCRIPT要素内のタグの走査をすべてスキップ。(1783)
ドキュメント
0.9.0
機能強化
- 他のビューポートグループが空で、デスクトップとモバイルの LCP 要素である
IMGにfetchpriority=highを追加。(1723) - Optimization Detective で保存済み URL Metrics のデバッグを改善。(1656)
- ETag の計算にページの状態を組み込み。(1722)
- 新しいタグビジターが登録されたときに、既存の URL Metrics を古い (stale) 状態としてマーク。(1705)
- 開発環境で開発モードを ‘plugin’ に設定し、(プラグイン開発モードの場合に) 管理者がログインしていてもページを最適化できるようにする。(1700)
OD_URL_Metric_Group_CollectionとOD_URL_Metric_Groupにget_xpath_elements_map()ヘルパーメソッドを追加し、OD_URL_Metric_Groupにget_all_element_max_intersection_ratios/get_element_max_intersection_ratioメソッドを追加。(1654)OD_HTML_Tag_Processorにget_breadcrumbs()メソッドを追加。(1707)OD_URL_Metric_Groupにget_sample_size()とget_freshness_ttl()メソッドを追加。(1697)- web-vitals.js の
onTTFB・onFCP・onLCP・onINP・onCLSを、拡張機能の JS モジュールのinitialize関数の引数を介して公開。(1697)
バグ修正
0.8.0
機能強化
バグ修正
- ページキャッシュが存在する場合に URL Metrics の収集を妨げていた検出タイムウィンドウを廃止。(1640)
- URL Metric を保存するリクエストでのノンスの使い方を見直し、クロスオリジンリクエストをブロック。(1637)
- ページキャッシュの検証をスケジュールするため、URL Metric 保存リクエストでクエリ対象オブジェクトまたはループ内の最初の投稿の投稿 ID を送信。(1641)
- phpstan のエラーを修正。(1627)
0.7.0
機能強化
- 収集した URL Metric データを、ページ読み込み完了時点ではなくページが非表示/アンロードされるタイミングで送信。これにより、ページのライフサイクル全体にわたってレイアウトシフトと INP スコアを追跡できるようになる。(1373)
- 検出ロジックの実行時に読み込まれるスクリプトモジュールの形で、クライアントサイドの拡張機能を導入。(1373)
- 拡張機能が自身のコードを読み込むための
od_initアクションを追加。(1373) OD_Elementクラスを導入し、PHP API を改善。(1585)- 最初/最後のグループを取得するためのグループコレクションのヘルパーメソッドを追加。(1602)
バグ修正
- Coming Soon ページが配信される際の Optimization Detective と WooCommerce の互換性を修正。(1565)
- 基本 (非パーマリンク) の URL 構造が有効な場合の URL Metric の保存を修正。(1574)
0.6.0
機能強化
- URL Metric のスキーマを拡張できるようにする。(1492)
- タグビジターの真偽値の戻り値に関するドキュメントを明確化。(1479)
- 各 URL Metric に UUID を含める。(1489)
- get_seek_count() と get_next_token_count() の代わりに使用する get_cursor_move_count() を導入。(1478)
バグ修正
0.5.0
機能強化
- web-vitals を 4.2.1 から 4.2.2 に更新。(1386)
バグ修正
- 埋め込みテンプレートでは Optimization Detective をデフォルトで無効化。(1472)
- Optimization Detective が HTML ドキュメントのみを処理するようにする。(1442)
- Optimization Detective が処理できるよう、テンプレート全体が出力バッファーのコールバックに渡されるようにする。(1317)
- intersectionRect/boundingClientRect の完全なサポートを実装し、viewportRect の型付けを修正、JSON スキーマを強化。(1411)
0.4.1
機能強化
バグ修正
- seek() の notice が出力されないよう、最適化ループ中の seek 処理のロジックを修正。(1376)
0.4.0
機能強化
0.3.1
機能強化
- デバッグが有効な場合 (
WP_DEBUGが true の場合) に、URL Metrics のグループコレクションをコンソールに出力。(1295)
バグ修正
- 遅延読み込みの最適化を修正するため、交差していない要素も URL Metrics に含める。(1293)
0.3.0
- 画像最適化機能は、Image Prioritizer という新しい依存プラグインに分離されました。このプラグインは画像の遅延読み込みも最適化します。(1088)
0.2.0
機能強化
- 挙動を無効化するための optimization_detective_disabled クエリ変数を追加。(1193)
- Optimization Detective を他のプラグイン/テーマに埋め込みやすくする。(1185)
- Optimization Detective で PHP 7.2 の機能を使用。(1162)
- より厳格な静的解析チェックにより全体的なコード品質を改善。(775)
- 最小 PHP 要件を 7.2 に引き上げ。(1130)
バグ修正
- 出力バッファリングが有効でない場合に、Optimization Detective の Server-Timing で _doing_it_wrong() が呼ばれないように回避。(1194)
- HTML レスポンスのみが最適化されるようにする。(1189)
- XPath のインデックスを 0 始まりではなく 1 始まりになるように修正。(1191)
0.1.1
0.1.0
- 初回リリース。
