今更ながらLaravel8のSailを試す


久しぶりに記事を書くのでリハビリがてら短めのものをまとめました。

普段Laravelを使う場合は基本的にLTSの6.x系を使っているのですが、さすがにLaravelもバージョンがどんどん進んでいって、LTSは安心といっても新しいバージョンも魅力的に見えてきます。
周りでLaravel8から追加されたSailが超便利という声を聞くので、自分もちょっと試してみました。
確かに超便利でした。

Laravel Sailとは、Laravelの開発環境をDockerで立ち上げ、簡単に開発環境を管理できる機能です。
Dockerの知識やdocker-compose.ymlの書き方などわからなくても大丈夫です(わかっていたほうがよりよいのですが)。
初心者向けといえば初心者向けですね。

インストール

始めてみます。
既に存在するLaravelプロジェクトにSailをインストールする場合もドキュメントに載っていますが、今回は何もないところから始めます。
SailにはPHP7.4またはPHP8.0を利用する2種類があります。今回はPHP8.0を使いました。
尚、自分の環境はmacOSで、既にDocker Desktopはインストール済みです。

$ curl -s "https://laravel.build/example-app?with=mysql,mailhog" | bash
$ cd example-app && ./vendor/bin/sail up

MySQLとMailHogを使いたかったので、クエリーで指定しています。
これでブラウザでlocalhost(デフォルト80番ポート、環境変数でポートは変更可能)にアクセスすると、Laravelの画面が表示されます。
簡単ですね

Sailをバックグラウンドで起動したい場合は-dオプションを付けて実行します。

$ ./vendor/bin/sail up -d

私の環境ではsail upの時にエラーが出てしまって、調べたら既に起動していた別のMySQLとMailHogのコンテナが3306と8025を使っていたので、それらを落としたらsail upが正常に実行できました。

SailのWebサーバ

SailではWebサーバにPHPのビルトインサーバを利用しています。
ソースコードを調べると、
vendor/laravel/sail/runtimes/8.0/Dockerfile
で最後に
vendor/laravel/sail/runtimes/8.0/start-container
を実行していて、start-container内ではSupervisordを実行しています。
vendor/laravel/sail/runtimes/8.0/supervisord.conf
を見るとわかるように、PHPのビルトインサーバを永続化させています。
SupervisordはLaravelのキューワーカ用でした利用したことがなかったのですが、こういう使い方もあるんですね。

ただまあビルトインサーバは公式ドキュメントでも警告されている通りあくまでテスト用なので、たとえ開発環境であっても最初からNginxなどを使ってもよいのかなとは思います。

まとめ

他にもSailのドキュメントやソースコード(それほど複雑ではない)を見ればコマンドがたくさん充実しているのがわかります。
現在の自分は独自のDocker環境で開発していて、それ以前はValetを使ったりしていたのですが、Sailがあれば開発環境構築の手間が一気に省けて楽になりますね。
実際に仕事で導入するとなると、本番環境との差異をどうやってなくすかなど工夫が必要になるはずですが、Laravelユーザには作りたいものを作ることに集中できるようになって、よりよい開発者体験に繋がる素晴らしい機能だと思いました。