【Laravel11】Sail + DevContainer + Xdebug + debugbarでポータブルな開発環境構築
Laravel Sailで高速にアプリ立ち上げ
VScodeのDevContainerで共有できる実行環境、
Xdebugでブレークポイントを利用したデバッグ、
debugtoolbarで詳細なデバッグ、
が可能な環境構築手順メモです。
1, Laravel環境構築(Sail使用)
Laravelをインストール
今回は公式が用意するSailを使う
curl -s "https://laravel.build/sail_base_post_app?php=82&with=mysql,redis" | bash
<sail_base_post_app>
の箇所は今回作成するアプリ名に適宜変更する
デフォルトのmailpit, meilisearchのコンテナ作成は省略
(with=で指定可能)
インストール後、プロジェクトルートへ移動してsail up
で立ち上げる
cd sail_base_post_app && ./vendor/bin/sail up
laravel.test-1, mysql-1, redis-1の3つのコンテナが立ち上がるので、
ブラウザでlocalhost確認
これでLaravelインストール完了
sailコマンドのパス通しておくこと
vim ~/.zshrc
// 以下を追記し保存
alias sail='sh $([ -f sail ] && echo sail || echo vendor/bin/sail)'
source ~/.zshrc
2, Dev Containerで開く
Dev Containerとは
Visual Studio CodeでDockerコンテナを使用して統一された開発環境を構築し、管理するための機能です。
Dev Container を立ち上げると Docker コンテナに対してホストマシンからソースコードをマウントし、VS Code の拡張機能はコンテナ内にインストールされます。また、VS Code の設定や拡張機能、インストールするライブラリや起動するサービスは devcontainer.json 、Dockerfile 、docker-compose.yml ファイルに定義することができ、これらの設定は Dev Container の起動時に自動で行われます。
Dev Containerの設定をインストールするコマンドがsailで用意されているのでそれを利用する
sail artisan sail:install --devcontainer
DBを選択できるが一旦”mysql”を選択
sailを再起動
sail restart
code .
でプロジェクトをVScodeで開き、の左下の風車のようなマークをクリック
「コンテナーを再度開く」をクリック
するとVScodeが再起動され、ローカルではなくコンテナ内でVScodeを開いた状態になる。
VScodeのターミナル箇所でsail@f2a47ca9da05:/var/www/html$
などとなっていればOK.
試しにphp -v
やphp artisan
が通れば、Dev Containerを利用しコンテナ内でVScodeを開けている。
3, Xdebugを導入する
2つの準備がある。
- PHP xdebug
- VScodeの「PHP Debug」
1) PHP xdebugをインストールする
これに関してはSailでインストールしたPHPのバージョンに既に入っているため対応不要。
2) VScodeの拡張機能「PHP Debug」を追加し、ブレークポイントを置けるようにする
VScodeの「実行とデバッグ」タブを開き、青字リンクで「launch.jsonファイルを作成します。」とあるのでそのままクリック
しかし、まだXdebugが入っていないので以下のようになってしまうはず(PHPがない)
なので、コンテナ内で開くVScodeにVScodeの拡張機能を入れる。
.devcontainer/devcontainer.jsonファイルにXdebugを入れて、保存
// devcontainer.json
...
"customizations": {
"vscode": {
"extensions": [
"xdebug.php-debug" // 追記
// 余裕があればintelephenseやprettierなど入れる
],
コンテナを再ビルド。
VScode左下のマークから上部選択肢「コンテナを再ビルドする」を選択。
(時間かかる)
再度、VScodeの「実行とデバッグ」タブ→「launch.jsonファイルを作成します。」
そうすると「デバッガーの選択」の選択肢にPHPが追加されるので、クリック。
すると.vscode/launch.jsonファイルが作成される。
そこに以下を追記。
// launch.json
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": { // 追記
"/var/www/html": "${workspaceFolder}"
},
},
さらに、プロジェクトの.envファイル1行目に以下を追記
SAIL_XDEBUG_MODE=develop,debug,coverage
ここでsailを再起動する必要がある。
「コンテナをローカルで再度開く」だとアプリコンテナしかstopしないので、一旦ローカルのターミナルでsail down
→sail up -d
が良い。
VScodeの方でももう一度「コンテナで再度開く」
(手順的にもっと省略できそうではある、、)
これで設定が完了したが、この状態でブレークポイントを置いてもまだストップしない。
どうやらremote_autostar
tがオフだということで、URLパラメータに?XDEBUG_SESSION_START=session_name
をつけてリクエストする必要がある。
https://ドメイン名/パス?XDEBUG_SESSION_START=xxx
ブレークポイントはとりあえず以下に指定
// route/web.php
...
Route::get('/', function () {
return view('welcome'); // ここにブレークポイント追加
});
Listen for Xdebugでプロセスを起動
ブラウザからは以下のURLを叩く。
http://localhost:8080?XDEBUG_SESSION_START=session_name
そうするとブレークポイントで止まるようになる🌈
2回目以降は、?XDEBUG_SESSION_START=session_name
のパラメータはつけずとも止まる👀
4, laravel-debugbarをインストール
自分自身は正直あまり使わない...💦 が開発に便利なので一応紹介
sail composer require barryvdh/laravel-debugbar --dev
インストール後ブラウザ下部で利用できる
ここまででLaravel開発に便利な環境構築ができる。
Xdebugは必須かと思うのでそこだけ抽出して設定してみても良いと思いますので参考になれば😃