PHP+Laravel+Phpstormでデバッガを刺したい
前提:PHP, LaravelはDocker上で動いており、APIサーバ運用
Docker環境上でPHP+Laravelを開発しているとデバッグにlaravel.logを見に行くことになるが、いくらなんでも開発体験が悪すぎるのでデバッガを刺したくなった。
本当はprintf debuggingが一番すきなのだが、PHPくんはコンソールに何も表示してくれないので…
なお、Zendについては何も知らない状態(ほんとうはZendの何かが入ってると話がややこしくなるらしいのだが、今回はガン無視決め込んでうまくいったので…)
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と表示されたら勝ち。表示されなかったらどうしよう。
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によってマウントされているので、そのように書いてある。
最後に、Run/Debug ConfigurationでPHP Reomte Debugの設定をする。
Nameは、わかればなんでもいい。
FIlter debug connection by IDE Keyにチェックを入れて、ServerとIDE Keyを入力する。
このServerはこの前のスクラップで入力したものを選べばよい。
IDE Keyはphp.iniとかに書いた xdebug.idekey
に設定した値を使う。
これで設定は完了。
いろいろな理由により動作画面のスクショが用意できなかったが、適当な場所にBreakpointsを刺して、Debugパネルでいろいろ表示されたら成功。
だめだったら、次の選択肢をとろう。
・ググる
・叫ぶ
・怒り狂う
頑張って!
書いた後で気付いたがLaravelあんまり関係ないな…