XdebugでCakePHPのプロジェクトをデバッグする

のえる のえる
2021.04.28

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 のインストールを行います

 

 

そして php.ini を編集します。

 

 

ここでポイントは 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 がすでにコンパイルされているためです。

 

コンパイル済みかどうかは下記のコマンドで確認できますが、入っていなければ追記してください。

 

 

そして 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 が作成されるので、中身を書き換えていきます。

 

デバッグしてみる

実行とデバッグ (Ctrl + Shift + D) を表示し、構成プルダウンから 「Xdebug (CakePHP)」 を選択します。

 

構成ブルダウンの隣にある 「デバッグの開始」 ボタンを押すか、 「F5」 を押すことでデバッグが開始されます。

 

あとはブラウザで対象画面を開くことでデバッグが実行されます。
(「stopOnEntry:true」 を設定することで、ブラウザで開かれたときに自動でデバッグが行われ、ブレークポイントで止まるようになる)

さいごに

Xdebug は非常に便利ですが、実は普通のデバッグと異なり、長時間止めっぱなしにするとサーバーがタイムアウトします。

 

その時はもう一度アクセスしましょう。

 

さらに、docker による各個人ごとの環境を用意できるため、サーバーを停止させても他の開発者の邪魔をしないのはとても便利です。

 

可能な限り効率化して快適な開発をしていきましょう。

 

ではでは。

スポンサーリンク

POPULAR

のえる

のえる

Full-stack Developer