Closed6

PHP+Laravel+Phpstormでデバッガを刺したい

schemelispschemelisp

前提:PHP, LaravelはDocker上で動いており、APIサーバ運用

Docker環境上でPHP+Laravelを開発しているとデバッグにlaravel.logを見に行くことになるが、いくらなんでも開発体験が悪すぎるのでデバッガを刺したくなった。
本当はprintf debuggingが一番すきなのだが、PHPくんはコンソールに何も表示してくれないので…

なお、Zendについては何も知らない状態(ほんとうはZendの何かが入ってると話がややこしくなるらしいのだが、今回はガン無視決め込んでうまくいったので…)

schemelispschemelisp

xdebugを採用することにする。
Dockerfileで次を追記する。デバッガのポートはなんとなく決めておく。今回は 9200 にした(デフォでは9003ぐらいらしいが、無視した)

RUN pecl install xdebug && \
    docker-php-ext-enable xdebug

EXPOSE 9200

php.iniあるいはそれに準じたiniファイルに次を追記。

[xdebug]
xdebug.client_host = host.docker.internal
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.discover_client_host = 0
xdebug.client_port = 9200
xdebug.idekey = "editor_xdebug"

idekey は好みの文字列にしてよい。ただし、後々使うのでメモるか覚えておく。

ところで、 remote_handler はXdebugのv3でサポートされなくなったので、書かなくてもいい。

終わったら、docker buildをして、コンテナの中に入り、次のコマンドを実行してみる。

$ php -m | grep Xdebug

Xdebugと表示されたら勝ち。表示されなかったらどうしよう。

schemelispschemelisp

PhpStormの設定が一番だるい。

PhpStormのSettingsを開き、PHP -> Debugを選択してXdebugのポートを先ほど設定したポートにする。

同じく設定画面で、PHP -> Serversを選んで、項目を追加する。

hostは localhost 、 portはこちらも先ほど設定した値を設定する。DebuggerはXdebugを選んでおく。Nameはこのあとすぐ使うので覚えておくかメモっておく。

Use path mappingsも設定する。チェックボックスを入れて、localリポジトリのディレクトリパスと、Docker container上のディレクトリパスを合わせる。
今回はlocalリポジトリのrootが /var/www にdocker-composeによってマウントされているので、そのように書いてある。

schemelispschemelisp

最後に、Run/Debug ConfigurationでPHP Reomte Debugの設定をする。

Nameは、わかればなんでもいい。
FIlter debug connection by IDE Keyにチェックを入れて、ServerとIDE Keyを入力する。
このServerはこの前のスクラップで入力したものを選べばよい。
IDE Keyはphp.iniとかに書いた xdebug.idekey に設定した値を使う。

これで設定は完了。

schemelispschemelisp

いろいろな理由により動作画面のスクショが用意できなかったが、適当な場所にBreakpointsを刺して、Debugパネルでいろいろ表示されたら成功。
だめだったら、次の選択肢をとろう。

・ググる

・叫ぶ

・怒り狂う

頑張って!

このスクラップは2ヶ月前にクローズされました