takaya030の備忘録

PHP、Laravel、Docker などの話がメインです

Lumen で Laravel Sail を使用する

Lumen に Laravel Sail をインストールしたときの作業手順のメモ

検証環境

Windows11 Home Edition (version 24H2)

D:\>wsl --version
WSL バージョン: 2.3.26.0
カーネル バージョン: 5.15.167.4-1
WSLg バージョン: 1.0.65
MSRDC バージョン: 1.2.5620
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26100.1-240331-1435.ge-release
Windows バージョン: 10.0.26100.2605

# installed ubuntu version
Ubuntu 22.04.4 LTS (Jammy Jellyfish)

# docker
Docker version 27.4.1, build b9d17ea
Docker Compose version v2.32.1
github.com/docker/buildx v0.19.3 48d6a39

Ubuntu 環境に devbox をインストール

下記コマンドで devbox をインストール

$ curl -fsSL https://get.jetify.com/devbox | bash

正常にインストールされたか確認

$ devbox version
0.13.7
$ devbox help
Instant, easy, predictable development environments

Usage:
  devbox [flags]
  devbox [command]

Available Commands:
  add         Add a new package to your devbox
  auth        Devbox auth commands
  cache       Collection of commands to interact with nix cache
  completion  Generate the autocompletion script for the specified shell
  create      Initialize a directory as a devbox project using a template
  generate    Generate supporting files for your project
  global      Manage global devbox packages
  help        Help about any command
  info        Display package info
  init        Initialize a directory as a devbox project
  install     Install all packages mentioned in devbox.json
  list        List installed packages
  rm          Remove a package from your devbox
  run         Run a script or command in a shell with access to your packages
  search      Search for nix packages
  secrets     Interact with devbox secrets in jetify cloud.
  services    Interact with devbox services.
  shell       Start a new shell with access to your packages
  shellenv    Print shell commands that create a Devbox Environment in the shell
  update      Update packages in your devbox
  version     Print version information

Flags:
  -h, --help    help for devbox
  -q, --quiet   suppresses logs

Use "devbox [command] --help" for more information about a command.

Lumen のプロジェクトを作成

Lumen プロジェクトのディレクトリを作成して phpcomposer をインストール

$ mkdir lumen-project
$ cd lumen-project

$ devbox init
$ devbox add php82 php82Packages.composer

composer を使って Lumen をインストール

$ devbox shell
$ composer create-project laravel/lumen ./tmp
$ mv ./tmp/* ./tmp/.* .
$ rmdir ./tmp

$ php artisan --version
Laravel Framework Lumen (10.0.4) (Laravel Components ^10.0)

Laravel Sail のインストール

composer を使って Laravel Sail をインストール

$ composer require laravel/sail --dev

boostrap/app.php に下記を追加

if(env('APP_ENV') == 'local')
{
    $app->register(Laravel\Sail\SailServiceProvider::class);
}

sail 関連の artisan コマンドが追加されているか確認

$ php artisan list
    .
    .
    .
 sail
  sail:add             Add a service to an existing Sail installation
  sail:install         Install Laravel Sail's default Docker Compose file
  sail:publish         Publish the Laravel Sail Docker files
    .
    .
    .

php artisan sail:install を実行する

$ php artisan sail:install --devcontainer

Laravel Sail のカスタマイズ

インストール直後の状態では HTTP サーバーが起動しないためカスタマイズを行う

docker-compose.yml

laravel.testenvironmentSUPERVISOR_PHP_COMMAND を追加

--- a/docker-compose.yml  2025-01-02 17:27:54.006158767 +0900
+++ b/docker-compose.yml  2025-01-02 17:14:04.886161856 +0900
@@ -17,6 +17,7 @@
             XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
             XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
             IGNITION_LOCAL_SITES_PATH: '${PWD}'
+            SUPERVISOR_PHP_COMMAND: "/usr/bin/php -d variables_order=EGPCS -S 0.0.0.0:80 -t /var/www/html/public"
         volumes:
             - '.:/var/www/html'
         networks:

.env

WWWGROUPWWWUSER を追加

WWWGROUP=1000
WWWUSER=1000

動作確認

下記コマンドで sail を立ち上げる

$ ./vendor/bin/sail up -d

http://localhost にアクセスして以下のレスポンスが返れば成功

Lumen (10.0.4) (Laravel Components ^10.0)

トラブルシューティング

artisan sail:publish が動作しない

artisan sail:publish は内部で artisan vendor:publish を呼び出しているため Lumen では動作しない
下記手順で artisna sail:publish と同じ結果が得られる

vendor/laravel/sail/ 以下の docker 関連ファイルを ./docker/ 以下へコピー

$ mkdir ./docker
$ cp -rf ./vendor/laravel/sail/runtimes/* ./docker/
$ cp -rf ./vendor/laravel/sail/database/* ./docker/

必要に応じて docker-compose.yml のパス指定を変更する

--- a/docker-compose.yml  2025-01-02 18:36:41.176152586 +0900
+++ b/docker-compose.yml  2025-01-02 18:37:11.586153133 +0900
@@ -1,7 +1,7 @@
 services:
     laravel.test:
         build:
-            context: './vendor/laravel/sail/runtimes/8.4'
+            context: './docker/8.4'
             dockerfile: Dockerfile
             args:
                 WWWGROUP: '${WWWGROUP}'

参考サイト

readouble.com

www.jetify.com

www.php.net

stackoverflow.com