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プロジェクトを作成した直後から、様々なエラーに遭遇する可能性があります。
localhost
にアクセスすると403 Forbiddenになる
エラー1:原因: 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
php artisan migrate
でDBに接続できない
エラー2: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コンテナ間は、コンテナ名をホスト名として通信します。
db:seed
でClass 'DB' not found
エラー
エラー3: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