2026年5月20日
2026年5月20日
WordPressのデバッグプラグインを活用する方法
はじめに
WordPressの開発・トラブルシューティングにはデバッグプラグインが不可欠です。Query Monitorは遅いSQLクエリ・フック・PHPエラーをリアルタイムで可視化し、問題の特定を大幅に効率化します。
症状・原因
- WordPressが遅い原因を特定したい
- どのプラグインが重いクエリを発行しているか調べたい
- PHPの警告・通知エラーをリアルタイムで確認したい
- フックの実行順序やコールバックを追跡したい
解決手順
ステップ1:Query Monitorをインストールする
# Query Monitor をインストール(開発環境のみ)
wp plugin install query-monitor --activate
# Debug Bar もあわせてインストール
wp plugin install debug-bar --activate
# 確認
wp plugin list --status=active --format=table
ステップ2:Query Monitorでクエリを分析する
管理画面上部のツールバーに「QM」メニューが表示される:
「クエリ」タブ:
→ 実行されたSQLクエリ一覧
→ 実行時間(ms)でソート
→ 呼び出し元のファイル・行番号
→ 重複クエリをハイライト
「クエリ」→「スロークエリ」:
→ 100ms以上かかったクエリを抽出
→ クエリを最適化するヒントを確認
「ホスト」タブ:
→ 総クエリ数・総実行時間
→ ページ生成時間・メモリ使用量
ステップ3:フックとコールバックを追跡する
QM → 「フック」タブ:
→ 実行されたすべてのアクション・フィルター
→ 各フックに登録されたコールバック一覧
→ 優先度・呼び出し元ファイルを表示
例:wp_head フックを確認:
→ 登録されているコールバック数
→ 重複した処理がないか確認
「コンポーネント」タブ:
→ どのプラグイン・テーマが何個のフックを使っているか
→ パフォーマンスへの寄与度を確認
ステップ4:PHPエラー・警告を確認する
QM → 「PHP エラー」タブ:
→ Notice・Warning・Deprecatedをリアルタイム表示
→ エラーが発生したファイル・行番号
→ スタックトレース表示
wp-config.php で詳細デバッグを有効化:
// wp-config.php(開発環境のみ)
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true); // /wp-content/debug.log に書き込み
define('WP_DEBUG_DISPLAY', false); // 画面には表示しない(本番で非表示にするため)
define('SAVEQUERIES', true); // クエリを保存(Query Monitorに必要)
define('SCRIPT_DEBUG', true); // 縮小していないJS/CSSを読み込む
ステップ5:WP-CLIでデバッグする
# デバッグモードを有効にしてコマンドを実行
wp --debug post list --post_type=post
# PHP警告を表示しながら実行
wp --debug=all eval "echo 'test';"
# エラーログを確認
wp eval "echo WP_CONTENT_DIR . '/debug.log';"
tail -50 wp-content/debug.log
# クエリをその場で実行して確認
wp db query "EXPLAIN SELECT * FROM wp_postmeta WHERE post_id = 1"
# オブジェクトキャッシュの統計を確認
wp eval "
global \$wp_object_cache;
if (method_exists(\$wp_object_cache, 'getStats')) {
print_r(\$wp_object_cache->getStats());
}"
# フックの登録状況を確認
wp eval "
global \$wp_filter;
foreach (array_keys(\$wp_filter) as \$hook) {
if (str_contains(\$hook, 'my_plugin')) {
echo \$hook . PHP_EOL;
}
}"
ステップ6:パフォーマンスのボトルネックを特定する
// 任意のコードブロックの実行時間を計測
$start = microtime(true);
// 計測したい処理
$posts = get_posts(['numberposts' => 100, 'post_type' => 'post']);
$elapsed = microtime(true) - $start;
error_log(sprintf('get_posts took %.4f seconds', $elapsed));
// メモリ使用量を確認
error_log('Memory: ' . size_format(memory_get_peak_usage(true)));
# WP-CLIでサイト全体のパフォーマンス情報を取得
wp profile stage --all --orderby=time
# プラグインごとの処理時間を比較
wp profile hook init --all --orderby=time
# 特定のURLのパフォーマンスプロファイル
wp profile url https://example.com/ --fields=hook,time,cache_hits
ステップ7:デバッグ後の本番環境への対応
# 本番環境ではデバッグプラグインを無効化
wp plugin deactivate query-monitor debug-bar
# Must-Use Plugins でデバッグ設定を環境変数で制御
# wp-content/mu-plugins/debug-config.php:
// 環境変数で制御(本番で自動OFF)
if (getenv('WP_ENV') === 'development') {
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('SAVEQUERIES', true);
}
注意事項
- Query Monitorは本番環境では必ず無効化してください。クエリ内容・ファイルパスなどの機密情報が表示されます
SAVEQUERIESを有効にするとすべてのクエリをメモリに保存するためパフォーマンスが低下しますWP_DEBUG_DISPLAYは本番環境では必ずfalseにしてください
まとめ
Query MonitorはSQLクエリ・フック・PHPエラーを一画面で確認できる最強のデバッグツールです。wp profile コマンドと組み合わせてパフォーマンスのボトルネックを特定し、本番デプロイ前に必ず無効化しましょう。