2026年5月22日
2026年5月22日
XdebugでWordPressのPHPをデバッグする方法|Xdebug 3の設定とVS Code連携
Xdebug は、PHP の拡張モジュールです。ブレークポイントで処理を止めて変数の中身を1行ずつ確かめる「ステップデバッグ」、エラー時に詳しい呼び出し履歴を出す機能、処理時間を調べるプロファイリングなどができます。WordPress のテーマやプラグインで「どこで値がおかしくなるのか分からない」ときに、var_dump() やログを入れて何度も試すより早く原因にたどり着けます。
この記事では、開発環境に Xdebug 3 を入れ、VS Code と連携して WordPress の PHP を調べる手順を説明します(2026年10月時点の Xdebug の公式ドキュメントに基づきます)。Xdebug は処理を大きく遅くするため、本番サーバーには入れず、ローカルやステージングの環境で使います。
Xdebug でできること
xdebug.mode という設定で、使う機能を選びます。カンマ区切りで複数を指定できます。
| 値 | 機能 |
|---|---|
off |
何もしない |
develop |
エラー時の詳しい呼び出し履歴、見やすい var_dump() など(既定値) |
debug |
ステップデバッグ(IDE と接続してブレークポイントで止める) |
profile |
プロファイリング(関数ごとの処理時間をファイルに出す) |
trace |
関数の呼び出しをすべてファイルに記録する |
coverage |
テストのコードカバレッジ |
Xdebug をインストールする
Ubuntu / Debian
sudo apt-get install php-xdebug
# PPA などで特定の版の PHP を入れている場合は、その版のパッケージを入れる(例: PHP 8.3)
sudo apt-get install php8.3-xdebug
RHEL / Fedora 系
sudo dnf install php-xdebug
パッケージが無い場合
PECL でソースからビルドします。GCC と PHP の開発用ヘッダーが必要です。Xdebug の公式ドキュメントでは、PECL の後継の PIE(pie install xdebug/xdebug)も案内されています。
pecl install xdebug
PECL が php.ini に extension=xdebug.so を追加するよう促しても、従わないでください。Xdebug は zend_extension で読み込む拡張です。php.ini、または conf.d の中に作った 99-xdebug.ini などのファイルに、次の1行を書きます。
zend_extension=xdebug
Docker の公式 WordPress イメージ
公式の wordpress イメージ(Debian ベース)を使っている場合は、Dockerfile で次のように入れられます。
FROM wordpress:6-php8.3-apache
RUN pecl install xdebug && docker-php-ext-enable xdebug
読み込まれたか確認する
php -v
出力に with Xdebug v3.… の行があれば、CLI では読み込まれています。Web サーバー側で読み込まれているかは、管理画面の「ツール」→「サイトヘルス」→「情報」や、一時的に置いた phpinfo() のページで確認します。インストール後は、Apache または PHP-FPM を再起動してください。
Xdebug 3 の設定を書く
Xdebug の設定ファイル(Ubuntu なら /etc/php/8.3/mods-available/xdebug.ini のように、名前に xdebug を含むファイル)に、次の設定を追加します。zend_extension の行がすでにある場合は、その行は重ねて書きません。
xdebug.mode = develop,debug
xdebug.start_with_request = trigger
xdebug.client_host = localhost
xdebug.client_port = 9003
xdebug.log = /tmp/xdebug.log
| 設定 | 意味 |
|---|---|
xdebug.mode |
使う機能。ステップデバッグには debug を含める |
xdebug.start_with_request |
trigger はトリガー(後述)があるときだけデバッグを始める。yes はすべてのリクエストで始める |
xdebug.client_host |
IDE が動いているパソコンのアドレス。既定値は localhost |
xdebug.client_port |
IDE が待ち受けるポート。Xdebug 3 の既定値は 9003 |
xdebug.log |
接続の記録を書き出すファイル。つながらないときの調査に使う |
設定を変えたら、Apache または PHP-FPM を再起動します。
Xdebug 2 の設定名は使えない
Xdebug 3 では設定名が大きく変わりました。古い解説にある次の設定は、そのままでは効きません。
| Xdebug 2 の設定 | Xdebug 3 での書き方 |
|---|---|
xdebug.remote_enable=1 |
xdebug.mode=debug |
xdebug.remote_host |
xdebug.client_host |
xdebug.remote_port=9000 |
xdebug.client_port=9003(既定値が変わった) |
xdebug.remote_autostart=1 |
xdebug.start_with_request=yes |
xdebug.profiler_enable_trigger=1 |
xdebug.mode=profile と xdebug.start_with_request=trigger |
VS Code と連携する
VS Code の拡張機能「PHP Debug」をインストールし、WordPress のフォルダーを開いて、.vscode/launch.json を次のように作ります。
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003
}
]
}
Docker やリモートサーバーのように、PHP が見ているファイルの場所(例: /var/www/html)と、VS Code で開いているフォルダーが違う場合は、pathMappings で対応を指定します。指定しないと、ブレークポイントで止まりません。
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/var/www/html": "${workspaceFolder}"
}
}
]
}
PhpStorm も、Xdebug 3 の既定のポート 9003 で待ち受けられます。設定方法は PhpStorm の公式ドキュメントを参照してください。
デバッグを始める
- VS Code の「実行とデバッグ」で「Listen for Xdebug」を開始します。
- 調べたいテーマやプラグインのファイル(例: functions.php)の行番号の左をクリックし、ブレークポイントを置きます。
- トリガーを付けてページを開きます。
xdebug.start_with_request = triggerの場合、URL にXDEBUG_TRIGGERを付けると、そのリクエストでデバッグが始まります。
https://example.test/sample-page/?XDEBUG_TRIGGER=1
XDEBUG_TRIGGER は、GET や POST のパラメーター、Cookie、環境変数のどれで渡してもかまいません。古い名前の XDEBUG_SESSION も使えます。管理画面の Ajax(admin-ajax.php)や REST API の呼び出しまで続けて止めたい場合は、ブラウザの拡張機能などで Cookie を付ける方法が便利です。
処理がブレークポイントで止まると、VS Code に変数の中身や呼び出し履歴が表示され、1行ずつ進めながら確認できます。
WP-CLI や PHP スクリプトをデバッグする
コマンドラインでは、環境変数を付けて実行します。
XDEBUG_SESSION=1 wp eval 'var_dump( get_option( "blogname" ) );'
Docker やリモートサーバーで動かす場合
xdebug.client_host は、PHP から見た「IDE が動いているパソコン」のアドレスです。PHP がコンテナや別のサーバーで動いていると、localhost では IDE に届きません。
- Docker Desktop:
xdebug.client_host = host.docker.internalとします。Linux の Docker Engine では、docker runに--add-host=host.docker.internal:host-gatewayを付けると同じ名前が使えます。 - リモートの開発サーバー: ポートを外部に開ける代わりに、SSH のリモートフォワードを使うと安全です。サーバー側の
xdebug.client_hostはlocalhostのままにし、パソコンから次のように接続しておきます。
# サーバーの 9003 番への接続を、手元のパソコンの 9003 番へ転送する
ssh -R 9003:localhost:9003 user@dev.example.com
つながらないときは、xdebug.log に書いたファイルを見ると、どのアドレスとポートに接続しようとして失敗したかが分かります。PHP のコードの中で xdebug_info() を呼ぶと、今の設定と有効な機能を一覧で確認できます。
WordPress のデバッグ設定と組み合わせる
Xdebug の develop モードでは、PHP のエラーや警告が出たときに、どの関数から呼ばれたかの履歴が付きます。WordPress 側でエラーを表示または記録する設定にしておくと、原因を追いやすくなります。開発環境の wp-config.php で次のように設定します。
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true ); // wp-content/debug.log に記録する
define( 'WP_DEBUG_DISPLAY', true ); // 画面にも表示する(開発環境のみ)
プロファイリングで遅い処理を探す
ページの表示が遅い原因を探すときは、profile モードを使います。
xdebug.mode = profile
xdebug.start_with_request = trigger
xdebug.output_dir = /tmp
トリガーを付けてページを開くと、xdebug.output_dir に cachegrind.out. で始まるファイルができます。KCachegrind や QCacheGrind、PhpStorm のプロファイラー表示で開くと、どの関数に時間がかかっているかが分かります。プロファイルのファイルは大きくなりやすいため、調べ終わったら削除し、xdebug.mode を元に戻します。
使うときの注意
- 本番サーバーでは使わない: 有効にした機能によっては PHP の処理が大きく遅くなり、エラー時に内部の情報が画面に出ることもあります。本番では拡張モジュールそのものを読み込まないようにします。
- デバッグ用のポートを外部に開けない: 9003 番は IDE 側が待ち受けるポートです。インターネットに開けず、リモートでは SSH のフォワードを使います。
- 使わないときは止める:
xdebug.mode = offにするか、Ubuntu ならsudo phpdismod xdebugで無効にし、Apache または PHP-FPM を再起動します。 - タイムアウトに注意: ブレークポイントで長く止めていると、PHP の
max_execution_timeや Web サーバーのタイムアウトで処理が打ち切られることがあります。
まとめ
- Xdebug は開発環境だけで使い、本番サーバーには入れない
- Xdebug 3 では
xdebug.mode・xdebug.start_with_request・xdebug.client_host・xdebug.client_port(既定 9003)で設定する。Xdebug 2 のremote_*は使えない - VS Code は「PHP Debug」拡張と
launch.json、場所が違う環境ではpathMappingsを設定する XDEBUG_TRIGGERを付けたリクエストだけデバッグし、つながらないときはxdebug.logとxdebug_info()で確認する- Docker では
host.docker.internal、リモートサーバーでは SSH のリモートフォワードで IDE に接続する
関連記事: