Optimization Detective

説明

このプラグインは、WordPress の現在のサーバー側の推測では実現できない読み込み最適化を適用するために、さまざまなデバイスの形態 (デスクトップ、タブレット、スマートフォンなど) にわたって、ページ上にどの要素が表示されているかについての実際のユーザーメトリクスを取得します。

このプラグインはフレームワークの依存パッケージであり、単体では最適化機能を提供しません。最適化機能のためには、依存プラグインである Image PrioritizerEmbed Optimizer (および WordPress コアパフォーマンスチームから今後提供されるその他のプラグイン) をインストールしてください。このプラグインは設定不要で動作するように設計されているため、現時点では設定項目やユーザーインターフェースはありません

サイト上のページに関する実際のユーザーメトリクスはこの方法で収集されるため、現時点ではサイトは未認証のフロントエンド訪問者に対して REST API がアクセス可能である必要があります。とはいえ、メトリクスを収集する代替の仕組みを提供するための検討が進行中です。また、Safari は現在 Largest Contentful Paint メトリクスをまだサポートしていないため、現時点では Safari からメトリクスは収集されない点に注意してください。ただし、この Core Web Vitals メトリクスのサポートは今年 Interop 2025 を通じて提供される予定です。

技術的な入門フィルター/アクションフック、およびユースケースと例を示す拡張機能については、プラグインの完全なドキュメントを参照してください。WordCamp Asia 2025 の講演 Boosting Performance with Optimization Detective もご覧いただけます。

インストール

WordPress 内のディレクトリからのインストール

  1. WordPress 管理画面で「プラグイン > 新規追加」にアクセスする。
  2. Optimization Detective を検索する。
  3. Optimization Detective プラグインをインストールして有効化する。

手動インストール

  1. プラグインの ZIP を WordPress.org からダウンロードするか、Getting Started の手順に従ったうえで、GitHub リポジトリのクローンから npm run build:plugin:optimization-detective --env zip=true で ZIP ビルドを作成する。
  2. WordPress 管理画面で「プラグイン > 新規プラグインを追加」にアクセスする。
  3. プラグインのアップロード」をクリックする
  4. 手順 1 でダウンロードした optimization-detective.zip ファイルをお使いのシステムから選択し、「今すぐインストール」をクリックする。
  5. プラグインを有効化」ボタンをクリックする。

FAQ

プラグインへのフィードバックはどこに送信できますか ?

このプラグインは将来の WordPress コア機能を含む可能性があるため、フィードバックを歓迎し、大変ありがたく思います。新機能の提案や要望がある場合は、WordPress パフォーマンスチームの GitHub リポジトリに issue として送信できます。トラブルシューティングのサポートが必要な場合やプラグインについて質問がある場合は、サポートフォーラムで新しいトピックを作成してください。

セキュリティバグはどこに報告できますか ?

パフォーマンスチームと WordPress コミュニティはセキュリティバグを重視しています。責任ある形で発見内容を開示していただく取り組みに感謝するとともに、そのコントリビューションを認知できるよう最大限努めます。

セキュリティ上の問題を報告するには、WordPress HackerOne プログラムをご利用ください。

プラグインにコントリビュートするには ?

コントリビューションはいつでも歓迎します。参加方法について詳しくは Core Performance Team Handbook をご覧ください。

プラグインのソースコードは、GitHub 上の WordPress/performance リポジトリにあります。

評価

2025年7月17日
I installed this plugin together with the image optimiser and auto size plugins and I have seen a speed increase from 67 to 99! really happy with the results and no obvious downsides so far. Keep up the good work.
2025年5月26日 3 replies
Really appreciate the efforts going into giving us tools for further improving performance optimization in WordPress. Love that it does it’s work without configuration. Recommendation: Add an “on install” notice that links to documentation, etc., to spare who missed the note in the description that there aren’t any settings, etc.
2025年3月31日 2 replies
Gives error: The Optimization Detective REST API endpoint is unavailable.
3件のレビューをすべて表示

貢献者と開発者

Optimization Detective はオープンソースソフトウェアです。以下の人々がこのプラグインに貢献しています。

貢献者

“Optimization Detective” は9ロケールに翻訳されています。 翻訳者のみなさん、翻訳へのご協力ありがとうございます。

“Optimization Detective” をあなたの言語に翻訳しましょう。

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

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

変更履歴

1.0.0-beta6

セキュリティ

  • 検出用の引数 JSON を含む SCRIPT 要素の検証を追加。これにより、id が衝突する要素を注入してスクリプトを覆い隠し、任意のモジュールをインポートさせられる DOM Clobbering 脆弱性を修正。この脆弱性の悪用には、少なくとも寄稿者権限グループを持つ認証済みユーザーが必要でした。責任ある開示をしてくれた Asaf Mozes (amosec) に感謝します。

1.0.0-beta5

バグ修正

  • $wp_query->postsnull の場合に 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)

バグ修正

  • Link ヘッダー内の URL に無効な文字が含まれないように防止。(1802)
  • デフォルトで投稿プレビューを最適化しないように変更。(1848)

ドキュメント

  • Optimization Detective のドキュメントを改善。(1782)

1.0.0-beta1

機能強化

  • ブロックされた REST API を検出するサイトヘルスチェックを追加し、利用できない場合は最適化を短絡 (スキップ)。(1762)
  • od_use_web_vitals_attribution_build フィルターを介して、拡張機能が web-vitals の attribution ビルドの使用をオプトインできるようにする。(1759)
  • idclassrole 属性を持つ 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)

ドキュメント

  • Optimization Detective のドキュメントを README.md に移動。(1763)

0.9.0

機能強化

  • 他のビューポートグループが空で、デスクトップとモバイルの LCP 要素である IMGfetchpriority=high を追加。(1723)
  • Optimization Detective で保存済み URL Metrics のデバッグを改善。(1656)
  • ETag の計算にページの状態を組み込み。(1722)
  • 新しいタグビジターが登録されたときに、既存の URL Metrics を古い (stale) 状態としてマーク。(1705)
  • 開発環境で開発モードを ‘plugin’ に設定し、(プラグイン開発モードの場合に) 管理者がログインしていてもページを最適化できるようにする。(1700)
  • OD_URL_Metric_Group_CollectionOD_URL_Metric_Groupget_xpath_elements_map() ヘルパーメソッドを追加し、OD_URL_Metric_Groupget_all_element_max_intersection_ratios/get_element_max_intersection_ratio メソッドを追加。(1654)
  • OD_HTML_Tag_Processorget_breadcrumbs() メソッドを追加。(1707)
  • OD_URL_Metric_Groupget_sample_size()get_freshness_ttl() メソッドを追加。(1697)
  • web-vitals.js の onTTFBonFCPonLCPonINPonCLS を、拡張機能の JS モジュールの initialize 関数の引数を介して公開。(1697)

バグ修正

  • ビューポートサイズが変化した場合は URL Metric を送信しないように防止。(1712)
  • 暗黙的に閉じられた段落に対する XPath 式の構築を修正。(1707)

0.8.0

機能強化

  • SCRIPT_DEBUG が有効な場合に未圧縮のスクリプトを配信。(1643)
  • web-vitals を 4.2.3 から 4.2.4 に更新。(1628)

バグ修正

  • ページキャッシュが存在する場合に 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)

バグ修正

  • delete_all_posts() の不足していたグローバルのドキュメントを追加。(1522)
  • URL Metrics に対するビューポートのアスペクト比の検証を導入。(1494)

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

機能強化

  • web-vitals.js を v3.5.0 から v4.2.1 にアップグレード。

バグ修正

  • seek() の notice が出力されないよう、最適化ループ中の seek 処理のロジックを修正。(1376)

0.4.0

機能強化

  • Optimization Detective で位置指定パラメータの受け渡しを回避。(1338)
  • LINK タグに加えて、HTTP Link ヘッダー経由でもプリロードリンクを送信。(1323)

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

  • generator タグにプラグインスラッグを使用。(1103)
  • クラシックテーマで、検出スクリプトの挿入が import map を壊さないように防止。(1084)

0.1.0

  • 初回リリース。