Laravel 11の開発環境、Sailプロジェクトの有無それぞれ解説 SQLSTATE[42S02]: Base table or view not found: 1146 Table ‘laravel.sessions’ doesn’t existの対処法

Sailプロジェクト不使用

必要な準備

  • Dockerのインストール: Docker Desktopをインストールしておいてください。
  • Docker Compose: Docker DesktopにはDocker Composeが含まれているので、追加インストールは不要です。

ディレクトリ構成

laravel-circulation
├── docker-compose.yml        # Docker Compose設定ファイル
├── nginx
│   └── default.conf          # Nginxの設定ファイル
└── src
    ├── app                   # Laravelのアプリケーションコード
    ├── bootstrap             # Laravelのブートストラップファイル
    ├── config                # 設定ファイル
    ├── database              # データベースマイグレーション等
    ├── public                # Webサーバが公開するディレクトリ (index.phpなど)
    ├── resources             # ビューやフロントエンドリソース
    ├── routes                # ルーティング設定
    ├── storage               # ストレージ関連 (ログなど)
    ├── tests                 # テストファイル
    └── vendor                # Composerでインストールされたパッケージ

docker-compose.yml の作成

Laravelとその関連サービス(Webサーバーやデータベース)の設定を行います。

以下の例は、NginxをWebサーバーに使い、MySQLをデータベースに設定しています。

version: '3.8'

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: laravel_app
    working_dir: /var/www/html
    volumes:
      - ./src:/var/www/html
    networks:
      - laravel_network

  webserver:
    image: nginx:alpine
    container_name: laravel_webserver
    working_dir: /var/www/html
    volumes:
      - ./src:/var/www/html
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    ports:
      - "8080:80"
    networks:
      - laravel_network

  db:
    image: mysql:8.0
    container_name: laravel_db
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_DATABASE: laravel
      MYSQL_USER: laravel_user
      MYSQL_PASSWORD: laravel_password
    volumes:
      - dbdata:/var/lib/mysql
    ports:
      - "3306:3306"
    networks:
      - laravel_network

networks:
  laravel_network:
    driver: bridge

volumes:
  dbdata:

Nginxの設定ファイル nginx/default.conf の作成

server {
    listen 80;
    index index.php index.html;
    server_name localhost;
    root /var/www/html/public;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Dockerfile

DockerfileでComposerのインストール

# ベースイメージを指定
FROM php:8.1-fpm

# システムの依存関係をインストール
RUN apt-get update && apt-get install -y \
    git \
    unzip \
    libzip-dev \
    libicu-dev \
    libonig-dev \
    libpng-dev \
    libjpeg-dev \
    libfreetype6-dev \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install \
        pdo_mysql \
        zip \
        intl \
        opcache \
        gd

# Composerのインストール
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# 作業ディレクトリを設定
WORKDIR /var/www/html

# アプリケーションファイルの権限を設定
RUN chown -R www-data:www-data /var/www/html

Laravelのインストール

次に、Dockerコンテナ内でLaravelをインストールします。

# Dockerコンテナを起動
docker-compose up -d

# Laravelをインストール
docker-compose exec app composer create-project --prefer-dist laravel/laravel .

参考サイト

UnexpectedValueException PHP 8.1.30 10.48.22 The stream or file “/var/www/html/storage/logs/laravel.log” could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: The stream or file “/var/www/html/storage/logs/laravel.log” could not be opened in GitHub Copilot このエラーは、Laravelアプリケーションがログファイルに書き込もうとした際に、 ファイルの書き込み権限が不足しているために発生しています。以下の手順で解決できます。 1)Dockerコンテナに入る docker exec -it <コンテナ名> /bin/bash 2)権限を変更する chmod -R 775 /var/www/html/storage chown -R www-data:www-data /var/www/html/storage 【Laravel】 Bladeテンプレートエンジンを使用する場合、 ファイル名の末尾に.blade.phpを付ける必要があります。 php artisan serveは、Laravelアプリケーションのためのビルトイン開発サーバーを起動するコマンドです https://reffect.co.jp/laravel/laravel-breeze-next-js https://www.udemy.com/course/nextjslaravelbreeze/?srsltid=AfmBOop6AB002927qfNnmtNHzLx2oS9NSaeWHsnH8TJoPRcB0iE2DFNa&couponCode=ST6MT103124 Breezeとは Laravel Breezeは、Laravelアプリケーションにシンプルで軽量な認証機能を提供するスターターパッケージです。 ユーザー登録、ログイン、パスワードリセットなどの基本的な認証機能をすぐに利用できるようにします。 Breezeのインストール手順 以下の手順に従って、Laravel Breezeをインストールします。 ComposerでBreezeをインストール docker exec -it laravel_app composer require laravel/breeze –dev Breezeのインストール docker exec -it laravel_app php artisan breeze:install NPMパッケージのインストールとビルド docker exec -it laravel_app npm install docker exec -it laravel_app npm run dev マイグレーションの実行 docker exec -it laravel_app php artisan migrate Dockerに入る docker exec -it laravel_app /bin/bash コンテナ内でLaravelの開発サーバーを起動 root@25a3630a398d:/var/www/html# php artisan serve php artisan serveは不要: Dockerを使用する場合、php artisan serveコマンドは通常必要ありません。 このコマンドは主に、Dockerを使用せずにローカル環境で開発する場合に便利です。

Laravel Sail

Laravelが提供する Dockerの開発環境 で、特別な設定なしに PHP・MySQL・Redisなどの環境をすぐに立ち上げられる。

Laravelプロジェクト構築の2つの方法 方法1: 段階的アプローチ 1. Laravelインストール composer create-project 2. Sailインストール composer require sail 3. Sail設定 sail:install 4. Docker起動 sail up -d 方法2: 一括インストール curl -s “https://laravel.build/.” | bash 全て自動的に設定 – Laravelインストール – Sail設定 – Docker環境構築 – 依存関係の解決 ※ どちらの方法でも最終的な結果は同じです

方法2(curlコマンド)はWSL2やGit Bashなどの環境が必要
方法1は通常のWindows環境でも実行可能

Sailの導入手順(方法1)

PHPのパッケージ管理ツールComposerでLaravelをインストール

composer create-project laravel/laravel .
composer create-project laravel/laravel . 実行前 空のフォルダ Composerの処理 1. フレームワークのダウンロード 2. 依存パッケージのインストール 生成されるフォルダ 📁 app/ アプリケーションの中核 📁 config/ 設定ファイル 📁 database/ DB関連ファイル 📁 resources/ ビュー、CSS、JS 📁 routes/ ルーティング定義 📄 .env 環境設定ファイル 重要ポイント: • コマンド末尾の “.” は現在のディレクトリにインストールすることを指定 • .envファイルは開発環境の設定に重要 • vendorフォルダには依存パッケージが全て含まれる

Sailを追加

composer require laravel/sail --dev
php artisan sail:install
composer require laravel/sail –dev 開発環境用のDockerセットアップツール コマンドの意味: • require: パッケージを追加 • laravel/sail: パッケージ名 • –dev: 開発環境専用 実行前 composer.json: 通常の依存関係 vendor/: 既存のパッケージ 実行後 composer.json: “require-dev”: { “laravel/sail”: “^1.0” } vendor/: + laravel/sail 使用可能コマンド: artisan sail:install 次のステップ sail:install実行で: • docker-compose.yml • Dockerfile • その他設定ファイル が生成されます –devフラグの重要性: 本番環境にはSailは不要なため、開発環境専用のパッケージとしてインストールします。

Sailの起動

SailコマンドはLinux環境のbashシェルを必要とするため

自分の場合WindowsでPowerShellコマンドプロンプトだったので、Linux環境のBashシェルに接続

Windows PowerShell wsl -d Ubuntu WSL2 (Ubuntu) Docker Laravel Sail Containers – PHP/Laravel – MySQL – Redis – その他のサービス ① PowerShellからWSL(Ubuntu)を起動 ② WSL上でLinuxコマンドを実行可能に ③ DockerはWSL2上で動作 WSL2は、WindowsでLinuxを実行するための「橋渡し」として機能します
wsl -d Ubuntu
./vendor/bin/sail up -d

Laravel Sail開発環境のポート比較

localhostでアクセスできるPort 80 (メインポート)はすぐに使用可能です

それに対してPort 5173 (Vite開発サーバー)を使用するには、npmでパッケージのインストールが必要です。

初心者の方は、まずPort 80だけを使用して基本的な開発を始めることをお勧めします。フロントエンド開発が必要になった時点でVite(Port 5173)の設定を行うとよいでしょう。

Laravel開発環境のポート比較 Port 80 (メイン) 初期状態: ✓ すぐに使用可能 ✓ 設定不要 用途: • PHPファイルの実行 • ルーティング • APIエンドポイント アクセス: localhost Port 5173 (Vite) 初期状態: ⚠ 追加設定が必要 準備手順: 1. npm install 2. npm run dev 用途: • JavaScript開発 • CSSの編集 • ホットリロード 開発フェーズでの推奨: • バックエンド開発のみ → Port 80 • フロントエンド開発あり → 両方のポートを使用

SQLSTATE[42S02]: Base table or view not found: 1146 Table ‘laravel.sessions’ doesn’t exist

ブラウザでlocalhostにアクセスするとSQLSTATE[42S02]: Base table or view not found: 1146 Table ‘laravel.sessions’ doesn’t existエラーになります

< 内容 >

  • Laravelの設定で SESSION_DRIVER=database になっている(.envで設定されているよう🤷‍♂️)
  • しかし、必要な sessions テーブルが作られていない
// .env
SESSION_DRIVER=database
SESSION_LIFETIME=120
SESSION_ENCRYPT=false
SESSION_PATH=/
SESSION_DOMAIN=null
Laravel 11のセッション管理とエラー解決 エラー状況 SQLSTATE[42S02]: Base table or view not found: 1146 Table ‘laravel.sessions’ doesn’t exist 原因 Laravel 11の仕様変更: • デフォルトのセッションドライバーが’database’に設定 • 必要なセッションテーブルが未作成 解決方法 方法1: マイグレーション実行(推奨) ./vendor/bin/sail artisan migrate • データベースでの管理が可能 • スケーラビリティの確保 方法2: ファイル保存に変更 SESSION_DRIVER=file に変更 • シンプルな構成 • 小規模アプリケーション向け

Laravel 11.xではセッションドライバーのデフォルト設定がdatabaseになっている可能性があるそうです(下記参考サイトより)

マイグレーション実行が推奨というのも、実は、Laravel 11では、セッションテーブルの作成がcreate_users_table.phpの中に含まれています

Laravel 11 マイグレーションファイル構造 📁 database/migrations/ 📄 0001_01_01_000000_create_users_table.php users テーブル • id • name • email • password sessions テーブル • id • user_id • payload • last_activity password_reset_tokens • email • token • created_at 📄 0001_01_01_000001_create_cache_table.php 📄 0001_01_01_000002_create_jobs_table.php 実行コマンド: ./vendor/bin/sail artisan migrate
./vendor/bin/sail artisan migrate