Laravel Sail なら Docker 開発環境がコマンド 2 撃で構築できる。PHP/MySQLからキューやメール環境までオールインワン
- 公開日
- カテゴリ:Laravel
- タグ:PHP,Laravel,Docker,Sail
Laravel Sail というツールが 2020年12月9日 にローンチされました。
公式が出した Laravel アプリケーションの Docker 開発環境構築ツールですが、今回はこの Laravel Sail を使って開発環境を構築してみます。
Contents
開発環境
今回の環境は以下の通りです。
- macOS Catalina
- Docker Desktop for Mac (3.x)
Laravel Sail を Mac で動かす為には Docker Desktop を予めインストールしておく必要があります。
LaravelSail
LaravelSail は、Laravel を Docker 開発環境で動作させるためのツールです。
Laravel を動作させるための一通りの仕組みが構築され、簡単に Docker での開発環境を構築する事ができます。
LaravelSail の導入
まずは sail のための Laravel をインストールする為にシェルを実行します。書式は以下になっています。
curl -s https://laravel.build/<YOUR_PROJECT_NAME> | bash
プロジェクト名は「sample-app」にして進めます。以下のコマンドを叩きます。
curl -s https://laravel.build/sample-app | bash
Laravel インストール用のイメージが作成され、起動したコンテナにて Laravel がインストールされます。
この処理が終わると、作成されたディレクトリ sample-app/ 配下に、Laravel のソースコードが展開されているのを確認できます。
アプリケーションの起動
Laravel がインストールされたら、プロジェクトルートで以下のコマンドを叩いてアプリケーションを起動します。
./vendor/bin/sail up
初回実行の場合は mysql, redis, mailhog, そして Laravel アプリケーション用(PHP や node などが入る)のイメージが作成されてから、それぞれコンテナが起動します。
Creating sample-app_redis_1 ... done
Creating sample-app_mailhog_1 ... done
Creating sample-app_mysql_1 ... done
Creating sample-app_laravel.test_1 ... done
ネットワークの状況にもよりますが、初回実行の場合はイメージを作成するため数分程度かかります。また、途中、ディレクトリのパーミッションを変更する為にパスワードの入力を求められます。
コンテナが起動したら、http://localhost/ にアクセスすると初期画面が表示されます。
MailHog のコンテナも起動しているので、メールの受信画面へは http://localhost:8025 にアクセスすると表示されます。
これで Sail での環境構築は完了です。コマンドを 2 回叩いただけで環境が出来上がりました。
sail コマンド
Laravel Sail で起動させた場合に、コンテナの起動・停止や通常叩いている artisan コマンド等は以下の sail コマンドを使う事で実行できます。
./vendor/bin/sail <same_command...>
エイリアスを設定する
毎回 ./vendor/bin/sail ... と入力するのが手間なので、エイリアス設定して、sail ... で sail コマンドを実行できるようにしておきます。
(以下、公式と記述が異なるので公式のアナウンスに沿った形でエイリアスを記述したい場合は Configuring A Bash Alias を参照ください)
今回は .zshrc にエイリアスを設定します。
% vim ~/.zshrc
---
# Laravel Sail Command Alias
alias sail="./vendor/bin/sail"
---
設定ファイルを再読み込みします。
source ~/.zshrc
エイリアスの反映確認のため、以下のコマンドを Laravel のルートディレクトリ配下で実行します。
% sail -v
docker-compose version 1.27.4, build 40524192
エイリアスが反映された事が確認できました。
コンテナの起動・停止・確認
コンテナの起動は up で行います
sail up
停止させる時は control + c でコンテナが停止します。
コンテナをバックグラウンドで動作させたい場合は -d を付与して detach モードで起動します。
sail up -d
この場合にコンテナを停止する時は down で行います。
sail down
コンテナが起動しているかの状態は sail とコマンドを打つことで確認できます
% sail
Name Command State Ports
-------------------------------------------------------------------------------------------------------------------
sample-app_laravel.test_1 start-container Up 0.0.0.0:80->80/tcp, 8000/tcp
.
.
.
アプリケーションコンテナへの接続
アプリケーション用のコンテナに入りたい時は以下のコマンドで入ることができます。
sail shell
MySQL へログイン
MySQL へログインするのは sail exec ... で行えます。
% sail exec mysql mysql -uroot
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.22 MySQL Community Server - GPL
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
MySQL へのログインに限りませんが、元は docker-compose なので、後述のものも含め、直接 docker-compose コマンドでも sail コマンドでも、どちらでもやりやすい方でよいと思います。
artisan コマンド
artisan コマンドを実行する時も sail コマンドで行えます。
sail artisan <command ...>
% sail artisan -V
Laravel Framework 8.18.1
テストの実行
PHPUnit を動作させる時も sail コマンドで実行できます。
sail test
% sail test
PASS Tests\Unit\ExampleTest
✓ basic test
PASS Tests\Feature\ExampleTest
✓ basic test
<b>Tests:</b> 2 passed
<b style="color: rgb(248, 248, 242);">Time:</b> 0.71s
PHP コマンド
PHP コマンドも sail コマンドから実行できます
sail php <command ...>
% sail php -v
PHP 8.0.0 (cli) (built: Nov 27 2020 12:26:22) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.0-dev, Copyright (c) Zend Technologies
with Zend OPcache v8.0.0, Copyright (c), by Zend Technologies
Composer コマンド
Composer コマンドも sail コマンドから実行できます。
sail composer <command ...>
% sail composer -v
Composer version 2.0.8 2020-12-03 17:20:38
node
node もインストールされているので、sail コマンドから叩けます。(NPM)
sail node <command ...>
% sail node -v
v15.4.0
独自の設定を行う
sail で作成されるコンテナやイメージに新たに何かを追加したり変更したい場合は、Dockerfile 等の sail リソースを出力してカスタマイズする事が可能です。
以下のコマンドで出力します。
sail artisan sail:publish
コマンドを実行すると、プロジェクトルートに docker ディレクトリが作成されて Sail の Dockerfile やそこで使用している設定ファイルが出力されます。
docker
├── 7.4
│ ├── Dockerfile
│ ├── php.ini
│ ├── start-container
│ └── supervisord.conf
└── 8.0
├── Dockerfile
├── php.ini
├── start-container
└── supervisord.conf
なお、publish すると次からは、プロジェクトルートの Dockerfile を参照するようになります。
試しにイメージを変更してみます。Sail の Dockerfile はデフォルトでは タイムゾーンが UTC で設定されているので、これを JST に変更してみます。
- sample-app/docker/8.0/Dockerfile
-
# ENV TZ=UTC ENV TZ='Asia/Tokyo'
Dockerfile を変更したら、以下のコマンドでイメージをビルドします。
sail build --no-cache
イメージのビルドが終わったらコンテナを起動して確認してみます。
# 変更前
% sail shell
sail@45e7f632b6e7:/var/www/html$ date
Tue Dec 15 11:49:45 UTC 2020
# 変更後
% sail shell
sail@f577af4e8b8f:/var/www/html$ date
Tue Dec 15 21:05:55 JST 2020
アプリケーション用のコンテナに変更が反映された事が確認できました。
まとめ
たった 2 回のコマンドで環境が構築できるのはとても簡単ですね。
色々とカスタマイズもできるので、開発環境を構築する際に融通も利いて良い感じだと思います。