Implist | 個人プロダクト開発を加速させるための理論と実装

Laravel9+Sail(Docker)で環境構築してみた


LaravelにはSailと呼ばれる「Laravel環境を簡単に構築・起動」出来る機能があります。このSailはDockerを利用してMySQLやRedisなどの様々なミドルウェアを追加・Laravelと連携可能になります。メールサーバなども建てられちゃいます。

実際に環境構築を行ったところ、めちゃくちゃ簡単だったので、その方法を解説します。

対象環境は以下です。

  • MacOSX
  • PHP8.0以上
  • Laravel9

構築方法

それでは構築を行います。インターネットにつながっている状態で以下コマンドを実行してください。

curl -s "https://laravel.build/laravel9-app" | bash

ここで「laravel9-app」となっている箇所の名前は何でも良いです。好きに命名してください。
実行すると、laravelアプリケーションとvendor配下も作られます。
「Please provide your password so we can make some final adjustments to your application's permissions.」このようなメッセージが出てきたらmacのパスワードを入力してあげてください。

実際にアプリケーションのフォルダ覗いてみましょう

cd laravel9-app
ls

このようにディレクトリ群が作られていると思います。

これで構築は完了です。

起動方法

起動方法はsailを使っていきます。
今まではphp artisanコマンドを使っていたと思いますが、sailコマンドを使います。
sailコマンドはvendor配下に配置されているので、プロジェクト直下で以下の様に起動します。

./vendor/bin/sail up 

実行すると、デフォルトでSailが用意しているMySQLやRedis等のDockerコンテナが立ち上がります。
初回の起動は各種Dockerイメージをダウンロードしてくるので遅いですが、2回目以降はダウンロードしないので高速に起動します。

ちなみにデフォルトで起動するコンテナは以下のようなものがあります。

  • MySQL
    • データベース
  • Redis
    • キーバリューストア
  • MeiliSearch
    • 全文検索エンジン
  • MailHog
    • メールサーバ
  • Selenium
    • ブラウザ操作自動化ツール

これはプロジェクト直下のdocker-compose.ymlを見るとわかります。不要なものはこのファイルから消して置くと起動が若干早くなりますよ

各種コンテナイメージを取得して、コンテナが起動すると「http://localhost:80」でLaravelにアクセスできます。

このような画面が表示されれば、成功です。右下にLaravel9.2/php8.1.1と記述されていますね。

ちなみにこのLaravelはDockerコンテナ上(PHPのコンテナ)で動作しています。以下のようなコマンドで、コンテナ上のコマンドが実行できます

docker-compose exec laravel.test  php -v
docker-compose exec laravel.test ls

PHPのバージョンを確認したり、lsをすることでLaravelプロジェクトのディレクトリ群がコンテナ上にマウントされているのが分かります。
「laravel.test」はPHPのコンテナ名です。変更することも可能です

DB接続

mysqlのコンテナにアクセスしてみます。
.envにユーザ名、パスワードが記述されているので、それを使ってmysqlコマンドにてアクセスします。

docker-compose exec mysql mysql -usail -ppassword

このようにmysqlの操作ができればOKです

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| laravel9_app |
+--------------------+
2 rows in set (0.01 sec)

テーブル作成をartisanコマンドで行う

DBとの接続は確認できたので、phpコンテナ側からartisanを使って、テーブル作成を行ってみましょう。
Laravelプロジェクト作成後、database/migrations/配下にマイグレーションファイルが作成されるのでこれを使います。

以下コマンドを実行します。

docker-compose exec laravel.test php artisan migrate:refresh

このような結果がでればテーブル作成成功です。migrationsディレクトリ配下のマイグレーションファイル通りにテーブルが作成されているはずです。

docker-compose exec mysql mysql -usail -ppassword
mysql> show databases;
mysql> use laravel9_app;
mysql> show tables;

この様にテーブルが作成されていることが分かります。

よく使うコマンドまとめ

最後によく使うコマンドだけまとめておきます。
開発の際はこの辺をよく使うので、メモしておくと良いでしょう。

Laravel起動

./vendor/bin/sail up 

PHP関連

docker-compose exec laravel.test composer install
docker-compose exec laravel.test composer update

Laravel関連

コントローラファイルを生成する
docker-compose exec laravel.test php artisan make:controller SampleController
モデルファイルを生成する
docker-compose exec laravel.test php artisan make:model Sample

DB関連

テーブル作成ファイル生成
docker-compose exec laravel.test php artisan make:migration create_sample_users_table
データ作成ファイル生成
docker-compose exec laravel.test php artisan make:seeder SamplesTableSeeder
テーブル・データの投入(すでにDBに入っている場合は削除して投入)
docker-compose exec laravel.test php artisan migrate:refresh --seed

 

今回のようにSailを使わず、Docker+Laravelで環境構築をする方法はこちらで紹介していますので、そちらを使いたい方は参考にしてみてください。