Open5

【Laravel】tinker実行時Xdebugのブレークポイントで止めたい

pconipconi

表題の通りで、既存の設定ではブラウザやPostmanではブレークポイントで止まるがtinkerからdispatch()実行すると処理が止まらなかった。なぜ?

pconipconi

動作環境:

  • MacM1
  • VScode
    • PHP Debug
  • Dockerコンテナ(Alpine Linux)
    • PHP8.1
    • Laravel10
    • Xdebug v3
pconipconi

2時間ほど格闘して、結論だけ書く👇

.vscode/launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Listen for Xdebug",
      "type": "php",
      "request": "launch",
      "port": 9003,
      "runtimeArgs": [
        "-dxdebug.start_with_request=yes"
      ],
      "pathMappings": {
        "/var/www/html": "${workspaceFolder}"
      },
      "env": {
        "XDEBUG_MODE": "debug,develop",
        "XDEBUG_CONFIG": "client_host=host.docker.internal client_port=9003"
      }
    },
  ]
}

php.ini(開発環境用)

log_errors=On
memory_limit=2048M
post_max_size=561M
upload_max_filesize=11M
max_input_vars = 32000
max_multipart_body_parts = 32000
max_file_uploads = 2000
expose_php = Off
max_execution_time = 300
[opcache]
zend_extension = opcache.so
opcache.enable = 1
opcache.enable_cli = 1
opcache.memory_consumption = 256
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 100000
opcache.validate_timestamps = 1
opcache.revalidate_freq = 0
[xdebug]
xdebug.client_host = host.docker.internal
xdebug.start_with_request = yes
xdebug.mode = debug
xdebug.client_port = 9003
xdebug.discover_client_host = 0
xdebug.remote_handler = "dbgp"
xdebug.log = /var/log/xdebug.log

設定重複していそうだけどまあよし。

pconipconi

tinker検証

...
class User  ← ブレークポイント設置
{
...

tinker起動

php artisan tinker
> $user = App\Models\User::find(1);

はい、止まりました!

これでジョブの処理でもブレークポイントを利用してデバッグできるようになったので快適。