Visual Studio CodeでLaravelをデバッグする設定【Docker Compose編】


前回、Visual Studio CodeでLaravelをデバッグする設定【Vagrant編】を書きましたが、今回はDocker Compose環境でのデバッグ設定です。

マシンスペック

  • Mac mini 2018
  • macOS Catalina(10.15.x)
  • Intel Core-i7 3.2GHz 6コア
  • メモリ 32GB
  • SSD 512GB

Docker環境

  • Nginx 最新版
  • PHP(PHP-FPM) 7.4.x
  • MySQL 8.x
  • Composer 2.x
  • Laravel 8.x
  • Redis 最新版
  • MailHog 最新版

やること

  • Docker Compose環境のVSCodeデバッグ設定

前提

このポート環境を満たしてないと、多分ブレークポイント止まらない。
【コピペ】Docker ComposeでLaravel開発環境を構築その肆#IDEでブレークポイント止める為の準備

Docker環境の準備

【コピペ】Docker ComposeでLaravel開発環境を構築その伍#使い方

デバッグするコードの準備

ブレークポイントを止めなきゃなので、WelcomeページをController経由に修正。

routes/web.phpを編集

routes/web.php
use Illuminate\Support\Facades\Route;
・・・
Route::get('/', function () {
    return view('welcome');
});

↓ 下記に編集。

routes/web.php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Web\WelcomeController;
・・・
Route::group(['namespace' => 'Web'], function () {
    Route::get('/', [WelcomeController::class, 'index']);
});

WelcomeControllerを作成

app/Http/Controllers/Web/WelcomeController.php
<?php

namespace App\Http\Controllers\Web;

use App\Http\Controllers\Controller;

class WelcomeController extends Controller
{
    public function index()
    {
        return view('welcome');
    }
}

デバッグする

拡張機能をインストール

  • 拡張機能を開きます
  • phpで検索します
  • PHP Debugをインストールします

デバッグ設定

  1. デバッグするLaravelプロジェクトを開きます
  2. 左メニューの好きな所を右クリックします
  3. 実行をクリックします
  4. launch.json ファイルを作成しますをクリックします
  5. PHPをクリックします
  6. Laravelプロジェクトに追加されます
  7. launch.jsonを編集します
  8. 赤枠を下記に変更します。
{
    "name": "Listen for Xdebug",
    "type": "php",
    "request": "launch",
    "port": 9001,
    "pathMappings": {
        "/home/docker/laravel": "${workspaceRoot}"
    }
},

デバッグ

デバッグ操作は下記を参考にする。
Visual Studio CodeでLaravelをデバッグする設定【Vagrant編】#デバッグ

「Illuminate\Contracts\Encryption\DecryptException: The payload is invalid.」対応

ページアクセスすると、下記の例外に引っ掛かるかも知れません。

対応方法
  1. F12もしくは右クリック→「検証」で、デベロッパーツールを開きます。
  2. Applicationタブ→左側リストの「Cookies」→該当URLを選択すると、右側にリストが表示されます。
  3. 右側リストの「Name」を「app/Http/Middleware/EncryptCookies.php」ファイルに追加します。

再度ページアクセスすると、ブレークポイント置いた箇所に止まります。

※参考
【Laravel6】Xdebug実行で”The payload is invalid”と出る場合の対処方法(pgAdminを使用している場合)