Laradock + Laravel環境構築のハマりどころ備忘録【2025年版】
はじめに
PHPフレームワークであるLaravelの学習を始める際、開発環境の構築は最初のハードルです。Laradockは、Dockerを利用してLaravelに最適化された開発環境を簡単に構築できる非常に便利なツールですが、いくつかの「お約束」を知らないと、思わぬエラーで時間を溶かしてしまうことがあります。
この記事は、筆者がLaradockでLaravel環境を構築しようとして実際に遭遇したエラーと、その解決策をまとめた備忘録です。同じように困っている方の助けになれば幸いです。
前提条件
- DockerおよびDocker Composeがローカルマシンにインストールされていること。
- ローカルの80番ポートが他のアプリケーションで使用されていないこと。(もし使用されている場合は、Laradockの
.envファイルでポート番号を変更する必要があります)
1. Laradockのセットアップと起動
まずはLaradockの公式サイトの手順に従い、リポジトリをクローンしてコンテナを起動します。
# Laradockのリポジトリをクローン
git clone https://github.com/Laradock/laradock.git
cd laradock
# .envファイルを作成
cp .env.example .env
# 必要なコンテナを起動
docker-compose up -d nginx mysql phpmyadmin redis workspace
ここまでは順調に進むことが多いでしょう。問題はここからです。
2. Laravelプロジェクトの作成
次に、workspaceコンテナに入り、Laravelプロジェクトを作成します。
# workspaceコンテナに入る
docker-compose exec workspace bash
# Laravelプロジェクトを作成(ここでは`sample-app`という名前にします)
# /var/www/ に作成するのが一般的です
composer create-project laravel/laravel sample-app
3. よくあるエラーと解決策
Laravelプロジェクトを作成した直後から、様々なエラーに遭遇する可能性があります。
エラー1:localhostにアクセスすると403 Forbiddenになる
原因: Nginxのドキュメントルートが、作成したLaravelプロジェクトの公開ディレクトリ(public)を正しく指していません。
解決策: Laradockの.envファイルで、Nginxが参照するホスト側のパスを修正します。
-
laradock/.envファイルを開きます。 -
APP_CODE_PATH_HOSTという項目を探し、Laravelプロジェクトを含む親ディレクトリを指定します。LaradockとLaravelプロジェクトが同じ階層にある場合、../のように指定します。# laradock/.env # Point to the path of your applications code on your host APP_CODE_PATH_HOST=../ -
次に、Nginxの設定ファイルを変更します。
laradock/nginx/sites/laravel.conf.exampleをlaradock/nginx/sites/laravel.confとしてコピーし、rootのパスを修正します。# laradock/nginx/sites/laravel.conf # root /var/www/laravel/public; # 元の設定 root /var/www/sample-app/public; # 作成したプロジェクト名に変更 -
設定を反映させるために、Nginxコンテナを再起動します。
docker-compose restart nginx
エラー2:php artisan migrateでDBに接続できない
workspaceコンテナ内でマイグレーションを実行しようとすると、高確率でDB接続エラーが発生します。
SQLSTATE[HY000] [1044] Access denied for user 'default'@'%' to database 'laravel'
原因: Laravel側の.envファイルが、LaradockのMySQLコンテナに接続するように設定されていないためです。
解決策: Laravelプロジェクトの.envファイルを編集します。
-
sample-app/.envファイルを開きます。(laradock/.envではないので注意) -
DB接続設定を以下のように変更します。
# sample-app/.env DB_CONNECTION=mysql DB_HOST=mysql # localhostや127.0.0.1ではなく、コンテナ名`mysql`を指定 DB_PORT=3306 DB_DATABASE=default # Laradockの.envで設定したDB名 DB_USERNAME=default # Laradockの.envで設定したユーザー名 DB_PASSWORD=default # Laradockの.envで設定したパスワードDB_HOSTにmysqlと指定するのが最大のポイントです。Dockerコンテナ間は、コンテナ名をホスト名として通信します。
エラー3:db:seedでClass 'DB' not foundエラー
SeederクラスでDBファサードを使おうとすると、クラスが見つからないというエラーが発生することがあります。
Error: Class 'Database\Seeders\DB' not found
原因: Seederファイルの先頭で、DBファサードをuse宣言していないためです。
解決策: 対象のSeederファイル(例: database/seeders/BooksTableSeeder.php)の先頭に、use文を追加します。
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB; // この行を追加!
class BooksTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('books')->truncate(); // これでエラーが出なくなる
// ...
}
}
まとめ
Laradockは非常に強力ですが、Dockerの知識(特にネットワーク)と、LaradockとLaravelそれぞれの.envファイルの役割を正しく理解することが、スムーズな環境構築の鍵となります。
-
Nginxのエラー → Laradock側の設定(
.envとnginx/sites)を確認 -
DB接続エラー → Laravel側の
.envのDB_HOSTをmysqlに -
PHPのクラスエラー →
use宣言の漏れを疑う
これらのポイントを押さえておけば、大半の初期エラーは解決できるはずです。
この記事の作成について
この記事は、筆者の個人的なメモを元に、GoogleのAIであるGeminiとの対話を通じて、Gemini CLI を用いて構成および加筆・修正されました。エラーの原因解説や解決策の提示、記事全体の構成化など、多くのプロセスでAIの支援を活用しています。
Discussion