延び延びになっていたLaravel9が2月8日にリリースされましたので、遅まきながら使ってみたいと思います。
なお、今までは開発環境の構築にVirtualBoxを使用してきましたが、Laravel8辺りからDockerベースで動作環境を簡単に構築できる「Laravel Sail」なる機能が提供されるようになったので、今回はこの「Laravel Sail」を使用してみたいと思います。
ちなみに、ホストOSはMac(Catalina)で、Docker Desktopもインストール済みです。
Laravel9のインストール
公式サイトの説明によれば、環境構築は以下のコマンドを叩くのみです。
curl -s "https://laravel.build/mylaravel" | bash
上記で「mylaravel」の部分は任意に指定可能で、同コマンドを実行したフォルダ直下に指定した名称(ここでは「mylarave」)のフォルダが生成され、その中にLaravel環境が構築されます。
ちなみに、上記でcurlコマンドにより取得される内容は以下のようになっています。
docker info > /dev/null 2>&1
# Ensure that Docker is running...
if [ $? -ne 0 ]; then
echo "Docker is not running."
exit 1
fi
docker run --rm \
-v "$(pwd)":/opt \
-w /opt \
laravelsail/php81-composer:latest \
bash -c "laravel new mylaravel && cd mylaravel && php ./artisan sail:install --with=mysql,redis,meilisearch,mailhog,selenium "
cd mylaravel
CYAN='\033[0;36m'
LIGHT_CYAN='\033[1;36m'
WHITE='\033[1;37m'
NC='\033[0m'
echo ""
if sudo -n true 2>/dev/null; then
sudo chown -R $USER: .
echo -e "${WHITE}Get started with:${NC} cd mylaravel && ./vendor/bin/sail up"
else
echo -e "${WHITE}Please provide your password so we can make some final adjustments to your application's permissions.${NC}"
echo ""
sudo chown -R $USER: .
echo ""
echo -e "${WHITE}Thank you! We hope you build something incredible. Dive in with:${NC} cd mylaravel && ./vendor/bin/sail up"
fi
ざっくり整理すると、「laravelsail/php81-composer」なるDockerイメージの最新版を実行することで環境構築を行なっているようですが、同イメージに対してはLaravelインストーラによる環境構築(laravel new mylaravel)を行った後、同Laravel環境に移動し、artisanコマンド(sail:install)を実行するように指示してます。
このsail:installの実行ではdocker-compose.ymlを生成するようですが、この時Laravel本体用コンテナ以外にmysql, redis, meilisearch, mailhog, seleniumに関するコンテナも併せて生成するように指定しています。
ここで指定している各機能は以下のようなものです。
mysql | SQLデータベース |
redis | NoSQLデータベース |
meilisearch | Rustで実装された全文検索エンジン |
mailhog | 送信しようとしたメールをインターセプトし、ブラウザで同メールの内容を確認できるようにする機能 |
selenium | Web ブラウザの操作を自動化するためのフレームワーク |
mysql, redis, meilisearchは実運用でも(必要に応じて)使う機能、mailhog, seleniumはテスト用の機能と言ったところでしょうか。
Laravel Sail(Docker)の起動
環境が構築できたら、同環境で以下のように実行することでdocker-compose.ymlに指定されたコンテナが起動されます。
./vendor/bin/sail up -d
ネット上の説明では「-d」オプションが付いていないものも多いですが、「-d」オプション指定によりコンテナがバックグラウンドで実行されるようになるので、個人的にはこちらがお勧めです。
上記を実行すると、以下のように表示されます。
[+] Running 7/7
⠿ Network mylaravel_sail Created 0.0s
⠿ Container mylaravel-selenium-1 Started 0.7s
⠿ Container mylaravel-mysql-1 Started 0.8s
⠿ Container mylaravel-meilisearch-1 Started 0.9s
⠿ Container mylaravel-redis-1 Started 0.8s
⠿ Container mylaravel-mailhog-1 Started 1.0s
⠿ Container mylaravel-laravel.test-1 Started 1.6s
Laravel本体の実行環境は「mylaravel-laravel.test-1」で、この中でWebサーバ機能やPHPが動作するようです。
なお、バックグラウンド起動したコンテナを停止する場合は以下のコマンドを実行します。
./vendor/bin/sail stop
上記実行結果として以下のように表示されます。
[+] Running 6/6
⠿ Container mylaravel-mailhog-1 Stopped 0.1s
⠿ Container mylaravel-laravel.test-1 Stopped 10.2s
⠿ Container mylaravel-selenium-1 Stopped 4.2s
⠿ Container mylaravel-meilisearch-1 Stopped 0.2s
⠿ Container mylaravel-mysql-1 Stopped 1.3s
⠿ Container mylaravel-redis-1 Stopped 0.2s
Laravelへのアクセス
Laravel Sailの起動によりLaravelの動作に必要なサービスは全て開始されているので、あとはWebサーバにアクセスするのみです。
同Laravel環境へのアクセスは、ブラウザから下記URLを実行することで可能です。
http://localhost
総括
上記をまとめると、Laravel9のインストールから関連サービスの起動までは以下の3つのコマンド実行でできてしまうことになります。
curl -s "https://laravel.build/mylaravel" | bash
cd mylaravel
./vendor/bin/sail up -d
強烈に便利なのですが、いくつか疑問点もあります。
- インストール時にLaravelのバージョンを指定していないが、旧バージョン(Laravel8)をインストールしたい場合はどうすれば良いか?
- アクセスが「localhost」限定になっているが、複数のWeb環境を共存させたい場合はどうすれば良いか?
- Laravel本体の実行環境であるコンテナの名称が「laravel.test」であり、いかにも開発環境用であるような印象だが、本番環境用のコンテナ生成はどのように行うのか?
この辺は別途考えていきたいと思います。