🐳

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が参照するホスト側のパスを修正します。

  1. laradock/.envファイルを開きます。

  2. APP_CODE_PATH_HOSTという項目を探し、Laravelプロジェクトを含む親ディレクトリを指定します。LaradockとLaravelプロジェクトが同じ階層にある場合、../のように指定します。

    # laradock/.env
    
    # Point to the path of your applications code on your host
    APP_CODE_PATH_HOST=../
    
  3. 次に、Nginxの設定ファイルを変更します。laradock/nginx/sites/laravel.conf.examplelaradock/nginx/sites/laravel.confとしてコピーし、rootのパスを修正します。

    # laradock/nginx/sites/laravel.conf
    
    # root /var/www/laravel/public; # 元の設定
    root /var/www/sample-app/public; # 作成したプロジェクト名に変更
    
  4. 設定を反映させるために、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ファイルを編集します。

  1. sample-app/.envファイルを開きます。(laradock/.envではないので注意)

  2. 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_HOSTmysqlと指定するのが最大のポイントです。Dockerコンテナ間は、コンテナ名をホスト名として通信します。

エラー3:db:seedClass '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側の設定(.envnginx/sites)を確認
  • DB接続エラー → Laravel側の.envDB_HOSTmysql
  • PHPのクラスエラーuse宣言の漏れを疑う

これらのポイントを押さえておけば、大半の初期エラーは解決できるはずです。


この記事の作成について
この記事は、筆者の個人的なメモを元に、GoogleのAIであるGeminiとの対話を通じて、Gemini CLI を用いて構成および加筆・修正されました。エラーの原因解説や解決策の提示、記事全体の構成化など、多くのプロセスでAIの支援を活用しています。

Discussion