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 コマンドと組み合わせてパフォーマンスのボトルネックを特定し、本番デプロイ前に必ず無効化しましょう。

お気軽にご相談ください

お見積りへ お問い合わせへ