はじめに
はじめまして、株式会社TechoesのRです!2026年4月に入社した新卒エンジニアです。
次のプロジェクトでLaravelを使用することになったため、既存の開発環境とは分けて、Laravelの学習・検証用環境を構築しました。
今回はWindows上にDocker Desktopを導入し、Laravel Sailを使ってLaravel、MySQL、Redisを起動します。
構築した環境
| ソフトウェア | バージョン |
|---|---|
| PHP | 8.5.9 |
| PHP-FPM | 8.5系 |
| Laravel | 13.29.0 |
| Laravel Sail | 1.67 |
| MySQL | 8.4 |
| Redis | Alpineイメージ |
| Docker Compose | v5.1.4 |
Laravelプロジェクトは、既存の案件と混ざらないように次の場所へ作成しました。
C:\laravel-app
Laravel Sailについて
Laravel Sailは、Laravelの開発環境をDockerで動かすための仕組みです。
PHPやMySQLなどをWindowsへ個別にインストールする代わりに、それぞれをDockerコンテナとして管理できます。
今回の環境では、次の3つを使用します。
laravel.test:LaravelとPHP
mysql:データベース
redis:キャッシュなどに使用
Laravelプロジェクトの作成
PowerShellを開き、Cドライブ直下へ移動します。
cd C:\
Composerを使ってLaravelプロジェクトを作成します。
composer create-project laravel/laravel laravel-app
作成したフォルダへ移動します。
cd C:\laravel-app
Laravel Sailを追加します。
composer require laravel/sail --dev
Sailの設定を作成します。
php artisan sail:install
使用するサービスを聞かれたら、今回はMySQLとRedisを選択します。
環境変数の設定
.envを開き、データベースとRedisの接続情報を設定します。
APP_URL=http://localhost:8000
APP_PORT=8000
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=sail
DB_PASSWORD=password
FORWARD_DB_PORT=3307
REDIS_HOST=redis
REDIS_PORT=6379
FORWARD_REDIS_PORT=6380
注意点は、LaravelからMySQLへ接続するときのポートには3306を使用することです。Windows側のツールからMySQLへ接続する場合は、公開した3307を使用します。
ホスト:localhost
ポート:3307
同様に、LaravelからRedisへ接続するときは6379、Windows側から接続するときは6380を使用します。
Dockerコンテナの起動
次のコマンドでコンテナを起動します。
docker-compose up -d
起動状態を確認します。
docker-compose ps
次のコンテナが表示されれば起動できています。
laravel-app-laravel.test-1
laravel-app-mysql-1
laravel-app-redis-1
ブラウザでhttp://localhost:8000へアクセスし、Laravelの初期画面が表示されれば成功です。
Migrationの実行
Laravelのコンテナ内でMigrationを実行します。
docker-compose exec -T laravel.test php artisan migrate
実行状態は次のコマンドで確認できます。
docker-compose exec -T laravel.test php artisan migrate:status
今回は、ユーザー、キャッシュ、ジョブに関する初期テーブルが作成されました。
Redisの接続確認
Redisが使用できるか確認します。
docker-compose exec -T redis redis-cli ping
次のように表示されれば接続できています。
PONG
Laravelのテスト実行
Laravelに最初から用意されているテストを実行します。
docker-compose exec -T laravel.test php artisan test
テストがすべてPASSになれば、Laravelの基本的な実行環境は正常です。
発生した問題
Laravelの画面で500エラーが発生する
今回の環境では、storageとbootstrap/cacheの書き込み権限が原因で500エラーが発生しました。
次のコマンドで所有者と権限を修正しました。
docker-compose exec -T --user root laravel.test chown -R sail:sail storage bootstrap/cache
docker-compose exec -T --user root laravel.test chmod -R ug+rwX storage bootstrap/cache
docker-compose exec -T laravel.test php artisan view:clear
修正後に再度アクセスすると、HTTPステータス200が返ることを確認できました。
Docker Desktopへ接続できない
次のエラーが発生することがありました。
failed to connect to the docker API
dockerDesktopLinuxEngine
このエラーはLaravelではなく、Docker DesktopのLinuxエンジンが起動していない場合に発生します。まず、次のコマンドで状態を確認します。
wsl --list --verbose
docker info
今回の環境では、Docker Desktopの一時ソケットが残っていたことが原因でした。Dockerを停止して一時ファイルを退避し、使用していないDocker AI機能を無効化して復旧しました。
いきなり「Reset to factory defaults」を実行すると、コンテナや設定を失う可能性があります。最初にDockerの再起動やログ確認を行うのが安全です。
Dockerのログは、次のフォルダから確認できます。
C:\Users\ユーザー名\AppData\Local\Docker\log\host
よく使うコマンド
起動
cd C:\laravel-app
docker-compose up -d
状態確認
docker-compose ps
Migration実行
docker-compose exec -T laravel.test php artisan migrate
テスト実行
docker-compose exec -T laravel.test php artisan test
停止
docker-compose down
感想・まとめ
Laravel Sailを使用することで、PHP、MySQL、RedisをDockerコンテナとしてまとめて準備できました。
一方で、Docker Desktopが正常に起動しているか、コンテナ内とWindows側で使用するポートが異なること、Laravelが書き込むフォルダの権限などには注意が必要です。
環境構築後は、画面表示だけで終わらせず、Migration、Redis接続、テストまで確認することで、Laravelを学習できる状態になっていることを判断できます。
参考資料
この連載について
本記事は、Laravelのローカル環境構築からAWS ECS Fargateでの実行、パフォーマンスチューニングまでを扱う連載の第1回です。
今回は最初のステップとして、Docker DesktopとLaravel Sailを使ったローカル環境の構築を行いました。今後は、今回作成した環境をもとに、クラウド上での実行と性能改善まで段階的に確認していきます。
次回の記事でやること
次回は、LaravelをAWS ECS Fargateで実行することを見据え、コンテナ構成とAWS上で必要になるサービス、ローカル環境との設定の違いを整理する予定です。
今後の連載では、次の内容を取り上げます。
- AWS ECS FargateでのLaravel実行環境の構築
- Amazon RDSやAmazon ElastiCacheとの接続
- ログと監視の設定
- 負荷試験とパフォーマンスチューニング