2024/04/08 追記
「使いづらい点」を主に紹介していましたが、改善できましたので、「使い方」を紹介します。
記事に至らない点があったのですが、ただの批判記事のまま放置になってしまっておりました。
すみませんでした。
お疲れ様です。
新しくプロジェクトを構築しようと思い、新し目のソリューションのLaravel Sailを利用してみました。
使ってみた結果、整理のためにまとめます。
公式:
https://readouble.com/laravel/8.x/ja/sail.html
https://readouble.com/laravel/9.x/ja/sail.html
https://readouble.com/laravel/10.x/ja/sail.html
https://readouble.com/laravel/11.x/ja/sail.html
良い点
ローカル環境が爆速で構築できる
すでにDockerを利用している人なら数ステップでローカル環境が構築できます。
docker-compose.yml等を書く必要がありません。
使いづらい点
全体的に、プロジェクト作者のためだけの設定になっているように思います。
これをリモートリポジトリにpushし、他の人がcloneする際に問題が発覚します。
./vendor/bin/sail が .gitignore で無視されている
vendor配下はデフォルトで.gitignoreに記載されているので、git cloneした人はsailコマンドを打つことができません。
また、./vendor/bin/sail
の他に./vendor/laravel/sail
も必要です。
他の開発者にもLaravel Sailを利用してもらうなら(普通はそうしたいと思いますが)、
vendorの一部のファイルの無視設定をやめるため、vendor配下に以下のファイルを追加するなどの対応をする必要があります。~~
つまり依存パッケージ(sail)をリモートリポジトリにpushできるようにしてしまっているのでいまいちです。
composerのscriptが実行された前提になっている
プロジェクトをcloneした人は自前で以下のコマンドを打つ必要があります。
(もちろんMakefileなどで管理するのでも良い)
(composer createでプロジェクトを作成した人は、composerのscriptが実行されるので何もしなくてもOK)
上記が無いと、コンテナ構築の際に.envの設定を読めないため、
コンテナを作り直さないとrole "root" does not exist docker
(PostgreSQLの場合)とか言われてDBに接続できなくなったりします。
upする前に上記コマンドを打って、必ず.envを用意してください。
上記が無いと、No application encryption key has been specified.
とか言われてLaravelが実行できません。
composer installされている前提でwebサーバーが動く
プロジェクトをgit cloneしてきたらまず、依存パッケージをインストールするため、composer installしないとLaravelが動きません。
そのためにsail upしますが、webサーバーはcomposer installされていないとエラーを吐いて接続できなくなります。
up -> composer install -> 接続
としたいですが
up -> composer install -> down -> up -> 接続
としないと接続できません。
Dockerイメージをダイレクトに実行する
composer install
composerが自分のマシンにインストールされていなくても、
以下のコマンドを実行して、composer installを実行できます。
docker run -it --rm -v "$PWD":/app composer install
これでvendor配下の依存ファイルがインストールされます。
php artisan sail:install
PHPが自分のマシンにインストールされていなくても、
以下のコマンドを実行して、sail:installを実行できます。
docker run -it --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:8.2-cli php artisan sail:install
これでdocker-compose.ymlが出来上がります。
sail up
そして、sail upが実行できます!
./vendor/bin/sail up
Docker最高!