XdebugでCakePHPのプロジェクトをデバッグする
Docker で PHP を実行できる環境を用意することはとても簡単ですが、さらなる開発効率をあげるため、PHPのデバッグができると良いですよね。
変数などを片っ端からログファイルを書き出すのも手ですが、いかんせん面倒・・・。
ですが、Visual Studio Codeには Xdebug によるデバッグが可能になる拡張機能があります。
今回はその設定を紹介していきます。
はじめに
今回紹介する各環境は下記のとおりです。
- CakePHP 4
- Docker Desktop 3.3.1
- PHP 7.4.11
- nginx 1.18.0
- Xdebug 3.0.4
補足ですが nginx と PHP は 9000 番ポートでつながってます。
また CakePHP4 は Windows の C:\project に一式があり、 docker コンテナ内の /var/www/html とマウントしているものとします。
Xdebugを設定する
まず、下記のコマンドで Dockerfile による Xdebug のインストールを行います
1 2 3 4 5 |
RUN pecl install xdebug \ && docker-php-ext-enable xdebug \ && mkdir -p /var/log/xdebug |
そして php.ini を編集します。
1 2 3 4 5 6 7 8 9 10 11 |
; zend_extension=xdebug [XDebug] xdebug.mode=debug xdebug.start_with_request=yes xdebug.discover_client_host = 0 xdebug.client_host=host.docker.internal xdebug.client_port=9003 xdebug.log=/var/log/xdebug/xdebug.log |
ここでポイントは extensionの記載をしないこと です。
これは 公式 でも発表されています。
Warning: You should ignore any prompts to add “extension=xdebug.so” to php.ini — this will cause problems.
警告: php.iniに “extension=xdebug.so “を追加するように促されても無視してください – 問題が発生します。
さらに、今回は zend_extension もコメントアウトしていますが、これは phpのモジュールとして xdebug がすでにコンパイルされているためです。
コンパイル済みかどうかは下記のコマンドで確認できますが、入っていなければ追記してください。
1 2 3 |
$ php -m |
そして zend_extension を記載するときは こちら の注意事項をよく読んで設定してください。
Note: If you want to use Xdebug and OPCache together, you must have the zend_extension line for Xdebug below the line for OPCache.
Otherwise, they won’t work properly together.
注意: Xdebug と OPCache を一緒に使いたい場合は、Xdebug 用の zend_extension 行が OPCache 用の行よりも下にある必要があります。
そうしないと、これらは一緒に正しく動作しません。
設定後は PHP を再起動しましょう。
これで Xdebug の設定は完了です。
Visual Studio Code の設定を行う
拡張機能の PHP Debug をインストールします。
メニューの [表示] > [実行] を選択してデバッグ実行画面を表示し、サイドバー内にある[実行] の 「launch.json ファイルを作成します」 をクリックします。
これで launch.json が作成されるので、中身を書き換えていきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
{ // IntelliSense を使用して利用可能な属性を学べます。 // 既存の属性の説明をホバーして表示します。 // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ // CakePHPデバッグ(自動) { "name": "Xdebug (CakePHP)", "type": "php", "request": "launch", "port": 9003, "stopOnEntry": true, "pathMappings": { // "サーバーのパス": "ローカルのパス" "/var/www/html": "C:\\project" }, "ignore": [ "**/vendor/**/*.php" ] } ] } |
デバッグしてみる
実行とデバッグ (Ctrl + Shift + D) を表示し、構成プルダウンから 「Xdebug (CakePHP)」 を選択します。
構成ブルダウンの隣にある 「デバッグの開始」 ボタンを押すか、 「F5」 を押すことでデバッグが開始されます。
あとはブラウザで対象画面を開くことでデバッグが実行されます。
(「stopOnEntry:true」 を設定することで、ブラウザで開かれたときに自動でデバッグが行われ、ブレークポイントで止まるようになる)
さいごに
Xdebug は非常に便利ですが、実は普通のデバッグと異なり、長時間止めっぱなしにするとサーバーがタイムアウトします。
その時はもう一度アクセスしましょう。
さらに、docker による各個人ごとの環境を用意できるため、サーバーを停止させても他の開発者の邪魔をしないのはとても便利です。
可能な限り効率化して快適な開発をしていきましょう。
ではでは。
- おすすめ記事
POPULAR
のえる
Full-stack Developer