LoginSignup
13
5

More than 3 years have passed since last update.

laradock + atom + xdebug でPHPをステップ実行する

Posted at

はじめに

こんにちは、普段は業務で求人系サービスの開発や社内向けツールの開発を行なっている@taku-0728です。
今回は laradock + atom + xdebug でPHPのステップ実行を行います。
これができればわざわざprint文を仕込んでデバッグしたりすることがなくなりますので、作業効率の向上につながります。同じように laradock + atom で開発を行っている方は是非参考にしていただければと思います。

やること

下の画像のように処理の途中で実行を一時停止しその時点での変数の中身を確認したり、コードを1行ずつ実行して次にどの条件分岐に入るのか確認したりできるようにしていきます。

ステップ実行 (2).gif

開発環境

  • OS:macOS Catalina 10.15.6
  • PHP:7.4.11
  • Laravel:6.18.26
  • Docker:19.03.13

前提条件

Laravelプロジェクトを作成していること
laradockで必要なコンテナを立ち上げてブラウザからアクセスできること

実装

1. laradockの設定

まずlaradockの必要な設定を行います。
laradockのファイルが置いてあるディレクトリに遷移します。

$ cd xxxxxxx/laradock

envファイルを編集します。

$ vi .env
.env
WORKSPACE_INSTALL_XDEBUG=false

PHP_FPM_INSTALL_XDEBUG=false

この2行を

.env
WORKSPACE_INSTALL_XDEBUG=true

PHP_FPM_INSTALL_XDEBUG=true

こう変えます。
次に設定ファイルも変更します。

$ vi workspace/xdebug.ini
workspace/xdebug.ini
; NOTE: The actual debug.so extention is NOT SET HERE but rather (/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini)

xdebug.remote_host="host.docker.internal"
xdebug.remote_connect_back=0
xdebug.remote_port=9000
xdebug.idekey=PHPSTORM

xdebug.remote_autostart=0
xdebug.remote_enable=0
xdebug.cli_color=0
xdebug.profiler_enable=0
xdebug.profiler_output_dir="~/xdebug/phpstorm/tmp/profiling"

xdebug.remote_handler=dbgp
xdebug.remote_mode=req

xdebug.var_display_max_children=-1
xdebug.var_display_max_data=-1
xdebug.var_display_max_depth=-1

内容に多少差異はあると思いますが、大体こんな感じになっていると思います。
ここを下記のように書き換えます。
コメントアウトしていますが、別に消してもらってもかまいません。

workspace/xdebug.ini
; NOTE: The actual debug.so extention is NOT SET HERE but rather (/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini)

xdebug.remote_host=host.docker.internal
xdebug.remote_connect_back=0
xdebug.remote_port=9002
;xdebug.idekey=PHPSTORM

xdebug.remote_autostart=1
xdebug.remote_enable=1
;xdebug.cli_color=0
;xdebug.profiler_enable=0
;xdebug.profiler_output_dir="~/xdebug/phpstorm/tmp/profiling"

xdebug.remote_handler=dbgp
xdebug.remote_mode=req

;xdebug.var_display_max_children=-1
;xdebug.var_display_max_data=-1
;xdebug.var_display_max_depth=-1

似たようなことをもう一回やります。

$ vi php-fpm/xdebug.ini
php-fpm/xdebug.ini
; NOTE: The actual debug.so extention is NOT SET HERE but rather (/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini)

xdebug.remote_host="host.docker.internal"
xdebug.remote_connect_back=0
xdebug.remote_port=9000
xdebug.idekey=PHPSTORM

xdebug.remote_autostart=0
xdebug.remote_enable=0
xdebug.cli_color=0
xdebug.profiler_enable=0
xdebug.profiler_output_dir="~/xdebug/phpstorm/tmp/profiling"

xdebug.remote_handler=dbgp
xdebug.remote_mode=req

xdebug.var_display_max_children=-1
xdebug.var_display_max_data=-1
xdebug.var_display_max_depth=-1

ここも大体こんな感じになっていると思いますので、下記のように書き換えます。
コメントアウトしていますが、別に消してもらってもかまいません。

php-fpm/xdebug.ini
; NOTE: The actual debug.so extention is NOT SET HERE but rather (/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini)

xdebug.remote_host=host.docker.internal
xdebug.remote_connect_back=0
xdebug.remote_port=9002
;xdebug.idekey=PHPSTORM

xdebug.remote_autostart=1
xdebug.remote_enable=1
;xdebug.cli_color=0
;xdebug.profiler_enable=0
;xdebug.profiler_output_dir="~/xdebug/phpstorm/tmp/profiling"

xdebug.remote_handler=dbgp
xdebug.remote_mode=req

;xdebug.var_display_max_children=-1
;xdebug.var_display_max_data=-1
;xdebug.var_display_max_depth=-1

ここまでできたら、コンテナを起動します。自分の環境にあわせて適宜変えてください。

$ docker-compose up -d nginx mysql redis

※私の環境ではxdebug.iniの設定を変更する前にコンテナを起動していた場合、ステップ実行が正常に動作しませんでした。色々試しましたが最終的に一度イメージを削除して再度コンテナを起動すると正常に動作したので、もし正常に動作しなかった場合は一度イメージを削除して再度コンテナを起動してみてください。

ここまでいけば、laradock側の設定は終了です。

2. atom側の設定

laradock側の設定が終わったので、次にatom側の設定を行っていきます。
理由は後述しますがここからは使用するPHPのバージョンによってやることが変わるので、使用しているPHPのバージョンに合わせて変えてください。

使用しているPHPのバージョンが7.0以下の場合

パッケージの検索画面でphp-debugと検索し、下記の画像と同じヒットしたパッケージをインストールしてください。
スクリーンショット 2020-10-13 22.21.01.png

インストールすると、下記の画像のようにatom-debug-uiというパッケージと、atom-ide-uiというパッケージをインストールするように求められると思います。この2つのパッケージの役割は今回の記事の内容とは逸れるので割愛しますが、インストールしたphp-debugを動作させるには必須のパッケージですのでYesを選択してインストールしてください。
スクリーンショット 2020-10-13 22.21.43.png

php-debug,atom-debug-ui,atom-ide-uiの3つのパッケージをインストールしたらphp-debugの設定画面を開いてください。
まずはPortの設定を行います。
下記の画像を参考にServer Listen Portを9002番(php-fpm/xdebug.ini xdebug.remote_port, workspace/xdebug.ini xdebug.remote_portと同じ値)に設定してください。
スクリーンショット 2020-10-13 22.32.58.png
次にPath Mappingsの下記の形式を参考にremoteとlocalのパスの設定を行います。
[{"remotePath":"","localPath":""}]
remotePathにはdockerコンテナ内のファイルパスを、localPathにはMacbook内のファイルパスを指定します。
私の場合だと下記のようになります。当然ですが、ご自身の環境に合わせて変えてください。
スクリーンショット 2020-10-13 22.44.06.png

使用しているPHPのバージョンが7.1以上の場合

インストールするphp-debugのバージョンを変更します。理由はphp-debug 3.5以上の場合に必須となるatom-ide-uiにあります。このパッケージはatomにideのような様々な機能を持たせてくれる便利なパッケージなのですが、そのパッケージの機能の1つであるエラー解析がPHP7.0までしか対応していません。そのためPHP7.4から使える下記のような書き方をすると、エラーでないにもかかわらず警告が表示されてしまいます。

スクリーンショット 2020-10-14 0.16.29.png

そのままでも動くといえば動くのですが、警告がうっとうしいのでatom-ide-uiを必要としない古いバージョンのphp-debugをインストールしていきます。
私の環境がMacなので、Macを例にしてやっていきます。
左上のメニューから Atom>シェルコマンドをインストール を選択します。すでにインストールしていて、apmコマンドが使える方は飛ばしてください。
スクリーンショット 2020-10-14 0.29.22.png

シェルコマンドのインストールが完了すると、apmコマンドが使えるようになるのでターミナルを開いて下記コマンドを入力します。

$ apm install php-debug@0.2.4

インストールが完了したら、下記の画像を参考に Path Maps と Server Address を設定してください。
インストールした php-debug のバージョンが古いため、remotePathとlocalPathの形式が異なっています。下記画像を参考に間違えないようにしてください。
スクリーンショット 2020-10-14 1.00.51.png

結果

ステップ実行ができるようになったので、快適なPHPライフを送りましょう。
ステップ実行 (2).gif

参考

13
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
5