Laravel8でも途中からDockerに関する扱いが変わっているっぽい(要出典)
古い環境の場合、最新のLaravelのソースコードの変更点を見ると解決への道筋がある
- (古い環境向け)Dockerfileにphp8.0-xdebugを追加
- (古い環境向け)docker-compose.ymlにextra_hostsとXDEBUG_MODE、XDEBUG_CONFIGを追加
- (git clone時に実施).envにSAIL_XDEBUG_MODEを追加
ドキュメントにはSAIL_XDEBUG_CONFIGでIPアドレスを書き換えろと書いてあったり、検索するとhost.docker.internalがWSL2で使えないという記事があるが、Docker Desktopがアップデートされ追加する必要がなくなった - sail up -dでコンテナを立ち上げ
- (プロジェクト初回のみ実行)sail artisan sail:publishでdockerディレクトリを生成
(プロジェクト初回のみ実行)docker/バージョン名 のディレクトリにあるphp.iniに以下を追加
[xdebug]
xdebug.mode=debug
xdebug.start_with_request = yes
xdebug.client_host=host.docker.internal
xdebug.client_port=9013
xdebug.discover_client_host = 1
(プロジェクト初回のみ実行)sail build --no-cacheを実行してphp.iniを反映する
VS Codeの左側にある実行とデバッグでlaunch.jsonを生成し、以下を追加
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"hostname": "0.0.0.0",
"port": 9013,
"pathMappings": {
"/var/www/html": "${workspaceRoot}"
},
"log": true
},
]
}
VS Codeの実行とデバッグの再生ボタンを押すとデバッグが行える。
うまくいかない時はタブの下に出来るデバッガの操作ボタンの再起動を押す。
参考: