sailのすゝめ
Laravel7までは公式ドキュメントのインストールページはHomesteadを使った手順を紹介していましたが、Laravel8ではsailを使った手順に変更されています。
本記事ではsailを使ったLaravelのスタート方法を以下の2パターン紹介します。
- 新規プロジェクトをsailで始める方法
- GitHubからクローンしたプロジェクトをsailで始める方法
共有フォルダの設定
今回の環境はどちらのパターンでもVirtualBox上のUbuntu ServerでLaravelを動かして、ホストOSで開発を行いたいのでホスト-ゲスト間で共有フォルダを設定しておきます。
VirtualBox上のUbuntu Serverに共有フォルダを設定する際は以下の記事を参照してください。
VirtualBoxでUbuntu Serverに共有フォルダを張る方法
HomesteadがUbuntuだったのでUbuntuにしています。
PHPのインストール
PHPとその関連パッケージをインストールしていない場合はインストールしてください。
sudo apt install php php-dom php-mbstring php-xml php-xmlwriter
sailを使った場合LaravelはDockerで動作するので、実はPHPが無くても動きます。ただし、当然artisanコマンドなどは使えないのでPHPは結局必要です。
user@localsv:~/code/example-app$ php artisan make:controller ExampleController
Command 'php' not found, but can be installed with:
sudo apt install php7.4-cli
また、PHPだけだと以下のように足りないと怒られるので、結果的に上記で挙げたパッケージは最低限必要です。
user@localsv:~/code/example-app$ php artisan make:controller ExampleController
Composer detected issues in your platform:
Your Composer dependencies require the following PHP extensions to be installed: dom, mbstring, xml, xmlwriter
Dockerの導入
sailにはDockerが必要です。
参考:Ubuntu 20.04へのDockerのインストールおよび使用方法
上記のサイトを参考にUbuntuにDockerを導入します。以下のいくつかのコマンドを順に実行していきます。
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
sudo apt update
apt-cache policy docker-ce
sudo apt install docker-ce
sudo systemctl status docker
また、sailではDocker Composeも必要になるのでインストールしておきます。
sudo apt install docker-compose
Docker Composeをインストールしていない場合、sail upコマンドを実行した際に以下のように怒られ続けます。
root@localsv:/media/sf_code# cd example-app && ./vendor/bin/sail up
/media/sf_code/example-app/vendor/laravel/sail/bin/sail: line 42: docker-compose: command not found
/media/sf_code/example-app/vendor/laravel/sail/bin/sail: line 44: docker-compose: command not found
/media/sf_code/example-app/vendor/laravel/sail/bin/sail: line 282: docker-compose: command not found
Laravelプロジェクトを新規作成する場合
基本的には上記を参考に進めていくだけです。
まずはユーザをrootに切り替えます。
sudo su -
次にプロジェクトを作成するディレクトリに移動して次のコマンドを実行します。example-appの部分はプロジェクト名に変更してください。
curl -s https://laravel.build/example-app | bash
sail up
プロジェクトフォルダが作成されているはずなので、そこに移動して以下のコマンドを実行します。
./vendor/bin/sail up
これでコンテナが起動します。少し待てば以下のようなメッセージになるはずです。
laravel.test_1 | Starting Laravel development server: http://0.0.0.0:80
laravel.test_1 | [Sun Mar 21 01:27:11 2021] PHP 8.0.3 Development Server (http://0.0.0.0:80) started
なお、コンテナ起動中は以下のようなメッセージが出続けますが、アクセスには問題ありません。
mailhog_1 | [APIv1] KEEPALIVE /api/v1/events
mailhog_1 | [APIv1] KEEPALIVE /api/v1/events
mailhog_1 | [APIv1] KEEPALIVE /api/v1/events
...
GitHubからクローンする場合
sailの場所は「./vendor/bin/sail」にあります。通常Laravelのvenderディレクトリはgitignoreされているのでクローンした場合は存在しません。venderを取り戻す必要があります。以下のコマンドを実行してください。
sudo apt install composer
その後にプロジェクトディレクトリ直下で以下のコマンドを実行します。
composer install
composerコマンドはルート権限で実行するとエラーになるので、sudoを付けたりrootで実行しようとしないでください。
sudo composer install
Do not run Composer as root/super user!
composer installはcomposer.lockを参照してパッケージをダウンロードするのに対して、composer updateはcomposer.jsonを基に各パッケージの最新版をダウンロードするという違いがあります。
composer.lockは特定バージョンを決め打ちするためのファイルなので、composer.lockがある場合は当然composer installを実行するべきです。
sail up
後は新規作成した場合と同様にsail upするだけです。
sudo ./vendor/bin/sail up