Dockerで構築したLaravel環境に、VSCodeでステップ実行デバッグを仕掛ける

元記事 [Dockerで構築したLaravel環境に、PHPStormでステップ実行デバッグを仕掛ける](https://qiita.com/yagrush/items/c597b3a8f3836f1908e0)
← 元元記事 [最強のLaravel開発環境をDockerを使って構築する【新編集版】](https://qiita.com/ucan-lab/items/5fc1281cd8076c8ac9f4)

# 目的

Dockerで構築したLaravel環境で実行されているPHPコードに対して、
Microsoft製の「VSCode」からステップ実行デバッグができるようにしたい。

# 概要

PHP定番デバッグツール xdebug を使用して実現していきます。
[元記事でサーバサイド側の設定](https://qiita.com/yagrush/items/c597b3a8f3836f1908e0#%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E5%81%B4%E4%BD%9C%E6%A5%AD)まで設定済みであることが前提。
本記事ではクライアント側であるVSCodeの設定のみ記載します。
(元記事、元元記事共に大変参考になりました。感謝。。)

# 環境

- 冒頭に書いた元記事および元元記事の手順でLaravel環境を構築済であること。
- VSCode最新版を使って開発している方。（Mac版で動作確認済。）

# 方法

## クライアント側作業（お手元のMac）

### VSCodeを起動する。

PHP Debugをインストールしていない場合は [PHP Debug - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=felixfbecker.php-debug) をインストールしておく

### VSCodeでdocker-laravel プロジェクトを開く。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16386/ed046010-8b1d-1b38-79f3-57e2e1ffded6.png)

### メインメニューからデバッガ設定画面を開く。
(設定ファイルがない場合は初回設定の際に作成されます。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16386/9ef34f09-c9c0-c1e0-dc6f-642b6445e393.png)

launch.jsonを作成後、以下の設定を貼り付ける

- portはサーバ側で設定した値と同じになるようにする
- pathMappings
  - サーバ側のアプリケーション配置場所："/work/backend"
  - クライアント側のアプリケーション配置場所："${workspaceRoot}/backend"

```json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9000,
            "pathMappings": {
                "/work/backend": "${workspaceRoot}/backend"
            }
        }
    ]
}
```

.vscode/launch.jsonが下記画像のように作成されていればOK
  * ドキュメントルートがDocker-backendの下に

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16386/5db7cdd7-ceae-d845-9e85-6b82bdbe2db0.png)

### ブレークポイントの設定


* 一時停止した時の挙動が確認ができるように、変数に文字をセットするようコードを修正。 

```php
-- Web.php
<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    $hoge = 'welcome';
    return view($hoge);
});
```
* Web.phpにブレークポイントをセット  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16386/f4f69b9c-6491-1801-7281-9c17f27772bb.png)


### デバッグ開始
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16386/deabbbfb-23b3-4894-5fa1-349dc4276db8.png)




### ブラウザでPHPサーバーにアクセスしてみる。

[http://localhost/](http://localhost/)

18行目で処理が一時停止、左側のタブで変数に格納された文字列を確認できる

変数にマウスオーバーしても値を確認できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16386/5bc1225f-ea22-edf6-6727-c3516201d55b.png)

## 参考リンク

- [第1回　Visual Studio Codeでデバッグをするための基礎知識 (1/4)：特集：Visual Studio Codeデバッグ入門 - ＠IT](https://www.atmarkit.co.jp/ait/articles/1707/21/news030.html)
- [docker+laravel+VSCode+Xdebugという開発環境を作る - Qiita](https://qiita.com/kefian1go/items/bbc8f9d51fe890194ad7)