Laravel8をsailで始める方法 (VirtualBox×Ubuntu Server)

sailのすゝめ

Laravel7までは公式ドキュメントのインストールページはHomesteadを使った手順を紹介していましたが、Laravel8ではsailを使った手順に変更されています。

本記事ではsailを使ったLaravelのスタート方法を以下の2パターン紹介します。

  1. 新規プロジェクトをsailで始める方法
  2. GitHubからクローンしたプロジェクトをsailで始める方法

共有フォルダの設定

今回の環境はどちらのパターンでもVirtualBox上のUbuntu ServerでLaravelを動かして、ホストOSで開発を行いたいのでホスト-ゲスト間で共有フォルダを設定しておきます。

VirtualBox上のUbuntu Serverに共有フォルダを設定する際は以下の記事を参照してください。

VirtualBoxでUbuntu Serverに共有フォルダを張る方法
なぜUbuntuなのか

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を入れ忘れた場合

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プロジェクトを新規作成する場合

参考:Laravel 8.x インストール

基本的には上記を参考に進めていくだけです。

まずはユーザをrootに切り替えます。

sudo su -

次にプロジェクトを作成するディレクトリに移動して次のコマンドを実行します。example-appの部分はプロジェクト名に変更してください。

curl -s https://laravel.build/example-app | bash
Docker is not running.

「sudo su -」をしていなかった場合「Docker is not running.」になります。これはsudoを付けてcurlを実行してもそうなりました。

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
ルート権限での実行はNG

composerコマンドはルート権限で実行するとエラーになるので、sudoを付けたりrootで実行しようとしないでください。

sudo composer install
Do not run Composer as root/super user!
composer updateではなくinstall

composer installはcomposer.lockを参照してパッケージをダウンロードするのに対して、composer updateはcomposer.jsonを基に各パッケージの最新版をダウンロードするという違いがあります。

composer.lockは特定バージョンを決め打ちするためのファイルなので、composer.lockがある場合は当然composer installを実行するべきです。

sail up

後は新規作成した場合と同様にsail upするだけです。

sudo ./vendor/bin/sail up

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)