動作環境
今回の環境は以下の通り
Ubuntu
Docker(インストール済み)
作業環境は
Windows10Pro
VSCode
DockerDesktop
今回は、Ubuntu上で構築したDocker環境を、Windows10から接続したPCでリモートアクセスする環境を構築しています。
LaravelSail
LaravelSailはLaravelの開発環境をDockerで動作させるためのユーティリティーです。
コマンド一つでLaravelの開発環境を一発で作成可能です。
LaravelSailの導入
まず、sailのためにLaravelをインストールします。開発用環境のUbuntuにログインして以下のようなシェルを実行します。なお、Dockerはすでに導入済みです。
curl -s https://laravel.build/sample-app | bash
sample-appの部分はプロジェクト名で好きな名前にすることができます。
実行すると、プロジェクト名のフォルダが作成されLaravelのコードが展開されます。
コンテナ起動
コンテナの起動は、通常dockerやdocker-composeコマンドで行いますが、sailでは専用のコマンド、sailで操作します。
./vendor/bin/sail up
初回の起動には非常に時間がかかりますが、コンテナ起動後にローカルホストもしくは、IPアドレスにアクセスするといつものLaravel初期画面が表示されます。
Ctrl+Dで強制終了ができます。
エイリアス設定
./vendor/bin/sail というコマンドですが、長いので入力が面倒です。
ということで、エイリアス設定で、sailだけで起動できるようにします。
ubuntuの場合は
~/.bashrc ファイルの最後に、以下の記述し、再起動します。
# Laravel Sail Command Alias
alias sail="./vendor/bin/sail"
これで、インストールしたフォルダでsailと打つだけでコマンドの実行が可能になります。
コンテナの操作
sailコマンド
Laravel Sail で起動させた場合、コンテナの起動・停止やartisan コマンド等は sail コマンドを使う事で実行できます。
sail command
command部分は、基本的にdockerとほぼ同じです。
コンテナ起動はup
sail up -d
コンテナ停止はdown
sail down
コンテナへの接続はshellだけで可能(アプリケーションコンテナに接続されるようです)
sail shell
APPコンテナ以外のほかのコンテナに入りたい場合はexecコマンドで可能。docker-composeと同じです。
sail exec mysql bash
artisanコマンド
sail artisan command
VSCode上でのデバッグ
それではVSCode上でのLaravelのデバッグを試してみます。
ホスト側の設定
まず、.evn ファイル(インストールしたルートにあるもの)に以下の追記します
SAIL_XDEBUG_MODE=develop,debug
Dockerファイルを修正するために、以下のコマンドでDockerファイルをかき出します。
sail up -d
sail artisan sail:publish
sail down
※コンテナが起動していないとダメみたいなので、いったん起動している
成功すると、dockerフォルダができているはずです。
docker-compose.ymlも一部変更されていて、詳細は省きますがphpのバージョンを指定したい場合はこちらを修正することで可能なようです。
services:
laravel.test:
build:
context: ./docker/8.0
dockerfile: Dockerfile
以下略
laravel.test: build: context を見ると、PHPは8.0を使っているようでそのファイルを書き換える必要があります。場所は docker/8.8/php.ini で、以下を追記します。
[XDebug]
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.client_host = host.docker.internal
設定を反映させるためにイメージをリビルドします。–no-cacheを付けないと失敗することがあるようです。
docker build --no-cache
リモート側の設定
VSCodeをインストールして、下記の拡張機能をインストールします。
PHP Debug
リモートエクスプローラ
Dockerをローカルで動かしている場合はリモートエクスプローラは不要です。
リモート接続の場合はリモートエクスプローラの機能を使ってSSH経由でホストサーバーに接続して作業します。
VSCodeのフォルダを開くから、LaravelSailをインストールしたフォルダを開きます。
lanche.json に以下を追加
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/var/www/html": "${workspaceFolder}"
},
},
これで、VSCode上からデバッグを実行してみましょう。
とりあえず、routes/web.phpの view(‘wellcome’); の行にブレークポイントを設定してトップページにアクセスするとブレークがかかることが確認できると思います。