WebProfiler
すべてのリクエストの詳細なプロファイリング情報を抽出、収集、保存、表示するDrupal開発用プロファイラー。
webprofiler
インストール
composer require 'drupal/webprofiler:^11.1'
composer require 'drupal/webprofiler:^10.3'
概要
WebProfilerは、Drupalアプリケーションで処理されるすべてのリクエストに対して深い洞察を提供するDrupal 11用の包括的な開発プロファイリングツールです。データベースクエリ、キャッシュ操作、メモリ使用量、HTTPリクエスト、フォーム処理、Views レンダリングなど、詳細なプロファイリングデータを収集します。
このモジュールはすべてのリクエストに対して収集したすべての情報を含むプロファイルファイルを作成し、すべてのHTMLレスポンスの下部に表示されるインタラクティブなツールバーにレンダリングされます。専用のバックオフィスダッシュボードで各プロファイルの詳細な分析が可能です。
WebProfilerは多くのDrupal Coreサブシステムをラップおよびデコレートして、それらの操作をインターセプトし記録することで、開発者にアプリケーションパフォーマンスに対する前例のない可視性を提供します。機能には、遅いクエリのハイライト付きデータベースクエリ分析、キャッシュヒット/ミス追跡、Twigテンプレートプロファイリング、イベントリスナー監視、Core Web Vitals測定などがあります。
重要:WebProfilerは本番環境で使用してはいけません。CoreのDrupalサブシステムを置き換えるため、パフォーマンスの問題が発生する可能性があります。
Features
- 主要なメトリクスを一目で確認できる、すべてのページの下部に表示されるインタラクティブなツールバー
- 複数のデータコレクターパネルを備えた詳細なプロファイル分析用の包括的なダッシュボード
- 実行時間追跡、遅いクエリのハイライト、クエリソース識別を備えたデータベースクエリプロファイリング
- 詳細なCIDとタグ情報を含むすべてのキャッシュビンにわたるキャッシュヒット/ミス監視
- ピークメモリ消費量とメモリ制限を表示するメモリ使用量追跡
- ヘッダー、Cookie、セッションデータ、GET/POSTパラメータ、BigPipeプレースホルダーを含むリクエスト/レスポンス分析
- 詳細なパフォーマンス分析のためのSymfony Stopwatchを使用した時間メトリクス収集
- 認証プロバイダー、ロール、ユーザー詳細を含むユーザーセッション情報
- ビルド、実行、レンダリング時間と直接編集リンクを表示するViewsレンダリングプロファイラー
- すべてのフォーム要素、そのタイプ、アクセスステータスを表示するフォームデータコレクター
- リージョンとプラグイン情報を含む、ロードされたブロックとレンダリングされたブロックの両方の追跡
- すべての登録済みサービス、初期化ステータス、ミドルウェアを表示するサービスコンテナ分析
- 呼び出されたリスナーと呼び出されなかったイベントリスナーを優先度付きで表示するイベントディスパッチャー監視
- 各ページで使用されるCSS、JavaScript、Drupalライブラリのアセットプロファイリング
- Twigプロファイリング、フィルター/関数一覧、レンダリングコールグラフ可視化を備えたテーマデータコレクター
- コンポーネントメタデータとドキュメントを含むSDC(Single Directory Components)追跡
- リクエスト/レスポンス詳細とタイミングを含む送信HTTPリクエストのHTTPクライアント監視
- プラグイン情報付きで送信されたすべてのメールを表示するメールシステムプロファイリング
- コントローラ付きですべての登録済みルートを表示するルーティングコレクター
- すべてのアクティブなモジュールとテーマを表示するエクステンション監視
- 設定とState API追跡
- 翻訳済みと未翻訳の両方の文字列の翻訳文字列監視
- Core Web Vitals(LCP、FID、CLS)を含むフロントエンドパフォーマンスデータ収集
- リダイレクトチェーンのデバッグを容易にするリダイレクトインターセプト
- PHPStorm、VS Code、Sublimeなどのエディタ用のクリック可能なファイルリンクを備えたIDE統合
- データベースクエリデータをCSV形式でエクスポートするDrushコマンド
- 詳細な例外レンダリングを備えたカスタムエラーハンドラー(無効化可能)
- 設定可能な場所とキャッシュクリア時の自動削除を備えたプロファイルストレージ
Use Cases
遅いページ読み込みのデバッグ
Timeパネルを使用してリクエストのどの部分が最も時間がかかっているかを特定します。settings.phpでStopwatchTracerを有効にして詳細なタイミング分析を確認します。Databaseパネルで遅いクエリ(閾値に基づいてハイライト)を確認し、クエリ数とソースを調べてN+1クエリ問題を特定します。
データベースクエリの最適化
Databaseパネルは、リクエスト中に実行されたすべてのクエリを実行時間、呼び出し元情報、クエリでEXPLAINを実行する機能とともに表示します。実行時間で並び替えて最も遅いクエリを見つけます。Drushを使用してクエリデータをエクスポートしてオフライン分析やチームレビューに活用します。
キャッシュ効率の分析
Cacheパネルはすべてのキャッシュビンにわたるキャッシュヒットとミスを表示します。複数回リクエストされているキャッシュ項目(潜在的な最適化機会を示す)を特定し、どのキャッシュタグが使用されているかを追跡します。
フォームのデバッグ
Formsパネルはページ上でレンダリングされたすべてのフォームを、その要素、タイプ、アクセスステータスとともに表示します。フォーム構造の理解やアクセス制御の問題のデバッグに役立ちます。
Viewsパフォーマンスのプロファイリング
Viewsパネルはページ上に表示された各Viewのビルド、実行、レンダリング時間を表示します。直接編集リンクにより最適化のためのViews設定に簡単にジャンプできます。
外部HTTPリクエストの追跡
HTTPパネルはリクエスト/レスポンス詳細とタイミングを含むすべての送信HTTPクライアントリクエストを監視します。API統合のデバッグや遅い外部依存関係の特定に不可欠です。
テーマとテンプレートのデバッグ
Themeパネルは、どのテンプレートがどの順序でレンダリングされたかを正確に示すレンダリングコールグラフを備えたTwigプロファイリングを提供します。利用可能なすべてのTwigフィルター、関数、グローバル変数を一覧表示します。
メール配信の監視
Mailパネルはリクエスト中に送信されたすべてのメールをキャプチャし、使用されたメールプラグイン、受信者、メッセージ内容を表示します。メール関連機能のデバッグに非常に有用です。
フロントエンドパフォーマンス分析
FrontendパネルはNavigation Timing APIメトリクスとCore Web Vitals(LCP、FID、CLS)を含むブラウザサイドのパフォーマンスデータを収集します。実際のユーザー体験を理解するのに不可欠です。
サービスコンテナ分析
Servicesパネルはすべての登録済みサービスを初期化ステータスとともに表示し、不必要にインスタンス化されているサービスの特定や依存性注入コンテナの理解に役立ちます。
Tips
- ツールバーを使用してパフォーマンスの問題を素早く特定する - 高いクエリ数、長い実行時間、過度のキャッシュミスに注目
- 複雑な分析やデータベース管理者との共有のためにデータベースクエリをCSVにエクスポート
- IDE統合を設定してスタックトレースからエディタのソースコードに直接クリック
- リダイレクトチェーンや認証フローのデバッグ時にリダイレクトインターセプトを有効化
- Servicesパネルを使用してインスタンス化されているが不要な可能性のあるサービスを特定
- ThemeパネルのTwigコールグラフはテンプレートの継承とレンダリング順序の理解に役立つ
- Eventsパネルで実際に呼び出されているリスナーと登録されているが未使用のリスナーを確認
- FrontendパネルにはJavaScript実行が必要 - データが表示されない場合はブラウザコンソールを確認
- プロファイルトークンをブックマークしたり共有したりして共同デバッグに活用
- デバッグ不要なAJAXエンドポイントのプロファイリングオーバーヘッドを減らすためにパス除外を使用
Technical Details
Admin Pages 3
/admin/config/development/devel/webprofiler
ツールバーに表示するデータコレクター、データベースクエリ設定、IDE統合、プロファイル管理など、WebProfilerの動作を設定します。
/admin/reports/profiler/list
保存されたすべてのプロファイルのリストを表示します。IPアドレス、URL、HTTPメソッドでプロファイルをフィルタリングし、結果数を制限できます。プロファイルトークンをクリックしてダッシュボードで詳細情報を表示します。
/admin/reports/profiler/view/{token}
特定のプロファイルの詳細ダッシュボードビュー。パネルに整理されたすべてのアクティブなデータコレクターによって収集された包括的な情報を表示します。各パネルはリクエストのさまざまな側面に対する深い洞察を提供します。
権限 2
Drush Commands 1
drush webprofiler:export-database-data
プロファイルからデータベースクエリデータをCSVファイルにエクスポートします。ダッシュボード外でクエリを分析したり、チームメンバーと共有するのに便利です。
Troubleshooting 7
ユーザーが「view webprofiler toolbar」権限を持っていることを確認してください。現在のパスが「ツールバー除外」または「除外パス」設定に含まれていないか確認してください。ツールバーはHTMLレスポンスにのみ表示されます。
settings.phpファイルに $settings['tracer_plugin'] = \Drupal\webprofiler\Plugin\Tracer\StopwatchTracer::class; を追加し、キャッシュをクリアしてください。
WebProfilerはカスタムエラーハンドラーを使用します。別のエラーハンドラー(Ignitionなど)がある場合は、settings.phpに $settings['webprofiler_error_page_disabled'] = TRUE; を追加してください。
設定で「キャッシュクリア時に削除」を有効にするか、設定ページからプロファイルを手動で削除してください。ディスク容量が問題になる場合はプロファイルの保持期間を短縮することを検討してください。
「詳細出力を無効にするクエリ数」設定をより低い値に調整してください。これにより、ブラウザを遅くする可能性のある数千のクエリ詳細のレンダリングを防ぎます。
services.ymlに以下を追加してください:parameters: webprofiler.file_profiler_storage_dns: 'file:/tmp/profiler'
IDE設定をエディタに合わせて設定してください。リモート開発を使用している場合は、サーバーパスをローカルパスに変換するためにリモートとローカルのパスマッピングを設定してください。
Security Notes 6
- WebProfilerは詳細な内部アプリケーション情報を公開するため、本番サイトでは絶対に有効にしないでください
- 「access webprofiler」権限は信頼された開発者のみに制限する必要があります
- プロファイルファイルにはPOSTデータ、Cookie、セッション情報を含む機密情報が含まれている可能性があります
- データベースクエリログにはクエリパラメータに機密データが含まれている可能性があります
- 機密性の高いエンドポイントのプロファイリングを防ぐためにパス除外の使用を検討してください
- プロファイルはデフォルトでパブリックファイルディレクトリに保存されます - 共有環境ではWebからアクセスできない場所への移動を検討してください