dubakichi blog

[docker][PHP]Laravelでステップ実行してみる

dubakichi
dubakichi
open-pc-at-cafe

こんにちわ、どばきちです。

前回はdockerでLaravelの開発環境を用意するテンプレをご紹介させて頂きました。

今回はその環境とVSCodeを使ってステップ実行できるようにしてみたいと思います!

あると何かと便利ですしね。

完成イメージ

11行目にブレイクポイントを張って、13行目にステップ実行した時のスクショです。

左上の「変数」の領域では、変数の確認や、値の差替えができます。その他にも、コールスタック、ブレイクポイントを張った場所など所謂ステップ実行する際に他の言語のIDEでも見たことがありそうなのがあります。

必要なもの

  • VSCode(ステップ実行を実際にする環境)
  • PHP Debug(VSCodeの拡張機能)
  • Xdebug v3(dockerコンテナ上で動作してステップ実行機能を提供する)

ステップ実行導入手順

1.アプリケーションサーバにxdebugのインストール

設定ファイルの用意

前回のテンプレだと以下の様な構成でした。

この中のphpコンテナに対してxdebugをインストールします。

具体的には、以下にあるDockerfile、xdebug.iniが編集対象になります。

1~/develop/jasmine/docker main*
2❯ tree
3.
4├── laravel-app.drawio
5├── nginx
6│   └── default.conf
7└── php
8    ├── Dockerfile   xdebugのインストールについてはここに書く
9    ├── php.ini
10    └── xdebug.ini   xdebugの設定はこちらに書く(php.iniに書いても良いのだとは思う
11
122 directories, 5 files

Dockerfileは以下を追加してxdebugをインストールする様にします。

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

# xdebug.iniの内容についてはすぐ下を参照してみてください

1COPY ./xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini

xdebug.iniにはXdebugの設定を記載します。v3系で利用することを想定しています。

(v2系だと設定方法がだいぶ変わる様なので気をつけてくださいませ)

1# ステップ実行をする場合には「debug」を設定
2xdebug.mode = debug
3# dockerコンテナから到達可能なクライアントマシンのIPアドレス
4# host.docker.internalはコンテナから見た時のホストのIPアドレスに対する内部ドメイン
5xdebug.client_host = host.docker.internal
6# PHPリクエストが開始されて、PHPのコードが実行される前に実行したい時にyes
7xdebug.start_with_request = yes
8# defaultも9003。変更する場合は、vscodeの設定ファイルの方も同様に変更が必要。
9xdebug.client_port = 9003
10# ログの出力設定。xdebugがIDEに接続しようとする全ての試みが保存される。絶対パスで指定する。
11xdebug.log = /var/log/xdebug.log

xdebugの各設定項目については以下に掲載されているので詳細はこちらをご確認ください。

https://xdebug.org/docs/all_settings

設定ファイルの適用

設定ファイルを適用するためにdockerイメージを再作成します。

1docker-compose build --no-cache
2# dockerを起動
3docker-compose up -d

xdebugのインストール確認

phpコンテナに適用されたかを確認します。

1❯ docker-compose exec php bash
2root@c62a70eba647:/var/www/html# php -m | grep xdebug
3xdebug
4root@c62a70eba647:/var/www/html# php -v
5PHP 8.0.18 (cli) (built: Apr 20 2022 16:36:23) ( NTS )
6Copyright (c) The PHP Group
7Zend Engine v4.0.18, Copyright (c) Zend Technologies
8    with Xdebug v3.1.4, Copyright (c) 2002-2022, by Derick Rethans

xdebugがモジュールとして認識され、v3.1.4が使われていることが確認できます。

サーバー側の設定はここまで確認できたらOKです。

VSCodeに拡張機能の追加

VSCodeの拡張機能で以下の「PHP Debug」なるものがあるので追加します。

PHP Debugの設定追加

VSCodeのサイドバー(そう呼ぶことを今知りました。。)に以下の様なアイコンが追加されていると思うので、こちらを選択するとjsonを作成するボタンがどこかにあったと思います。(完全にここの記憶がないです、、ごめんなさい。ただそんなに複雑なものではなかったと思います。

jsonファイル(設定ファイル)を作成できたということで次に進ませてください。。

そのjsonファイルはある程度テンプレで出来上がっているので必要な箇所だけ修正します。

具体的には以下の箇所になります。

1{
2    // IntelliSense を使用して利用可能な属性を学べます。
3    // 既存の属性の説明をホバーして表示します。
4    // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
5    "version": "0.2.0",
6    "configurations": [
7        {
8            "name": "Listen for Xdebug",
9            "type": "php",
10            "request": "launch",
11            "port": 9003,        // ここのポートはサーバー側と合わせる必要あり!
12            "pathMappings": {
13                // Dockerコンテナのdocument root : 開発環境のdocument root
14		// 開発環境のdocument rootは環境に合わせて修正してください
15                "/var/www/html":"[自分自身のローカル環境のパス]/develop/jasmine" 
16            }

使ってみる!

コードにブレイクポイントを設定できる様になってると思うので、ブレイクポイントを設定します。

VSCodeの画面右上にこのボタンがあると思うのでそれを押下すると、ステップ実行ができる様になります!

で、該当のPHPコードが実行されるWebアクセスをすると、冒頭の画像の様な結果になります。

改めてになりますが、こちらです!

おわりに

なんか気付けばめっちゃ長くなってました。。

ここまで読んで頂けた方はもしかしたらいないかも知れませんが、もしいたとしたら本当にありがとうございます!

割と最近Javaにはステップ実行があるのを知っていたけど、PHPにはないと思っていたという方がいたこともあり、自分の中の整理も兼ねて書いてみようと思いました。何かしら参考になる方が一人でもいたらいいなと思います。

それでは、また!

©︎ 2022-2025 dubakichi.com