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


Laravel + Docker(Sail)構築手順 – Windows版

前提確認

環境状態確認方法
Docker Desktop起動してる?右下のクジラアイコン
WSL2(推奨)wsl -l -v で確認(Ubuntuなど)
Windows Terminal / CMDどちらでも可
Git Bash(推奨)Bashの方がLinuxコマンド使える

構築手順ステップ

composer create-project laravel/laravel web-circular
  • Laravel Sailというパッケージを開発環境用の依存関係としてインストール
composer require laravel/sail --dev

–devオプションについて

composer.json の構造 composer.json “require”: { “laravel/framework”: “^10.0”, “guzzlehttp/guzzle”: “^7.0” } “require-dev”: { “laravel/sail”: “^1.0”, “phpunit/phpunit”: “^10.0”, “laravel/pint”: “^1.0” } 本番環境でも必要 (アプリ動作に必須) 開発時のみ必要 (テスト、デバッグ用) インストール時の動作: 開発環境 composer install → 全てのパッケージインストール 本番環境(レンタルサーバー) composer install –no-dev → require のみインストール(require-dev は無視)
  • Sailを導入
php artisan sail:install

  Which services would you like to install? [mysql]
  None ............................................................................................................. 0  
  mysql ............................................................................................................ 1  
  pgsql ............................................................................................................ 2  
  mariadb .......................................................................................................... 3  
  mongodb .......................................................................................................... 4  
  redis ............................................................................................................ 5  
  valkey ........................................................................................................... 6  
  memcached ........................................................................................................ 7  
  meilisearch ...................................................................................................... 8  
  typesense ........................................................................................................ 9  
  minio ........................................................................................................... 10  
  mailpit ......................................................................................................... 11  
  rabbitmq ........................................................................................................ 12  
  selenium ........................................................................................................ 13  
  soketi .......................................................................................................... 14  
❯ 1

選択肢リスト、Laravel Sail の「どのサービス(コンテナ)を含めるか」を選べるようです。

無駄なサービスを入れすぎるとDockerコンテナが激重に

表示されるリストから Ubuntu (WSL) を選ぶ

  • SailコマンドでDockerコンテナ起動
    1. Docker Desktopを起動
    2. Ubuntu(WSL)に切り替える
      VSCodeターミナル右上の + 横の 下矢印ボタン ⏷ をクリック

sailコマンドはUbuntuでしか使えない(≒ Linux環境(bash)じゃないと動かない)

/mnt/c/web-circular# vendor/bin/sail up -d

Laravel Sail の正体は、Laravel開発用にチューニングされたDockerラッパースクリプト

処理内容自動化されてる?実際の挙動
Dockerイメージの取得laravelsail/php82-composer とか mysql:8 をPull
docker-compose.yml生成sail:install 実行時に .dockerdocker-compose.yml を作成
コンテナ起動sail up -d で Laravel(PHP)と MySQL の2コンテナが起動
ネットワーク/ボリューム作成LaravelとDBが同一ネットワークで通信できるように設定

先ほどのコンテナ起動でMySQLも一緒に起動されてます

./vendor/bin/sail up Laravel (PHP) + MySQL (DB) + その他 (Redis等) 1つのコマンドで複数のコンテナが同時起動
  • データベースが生きてるか確認
vendor/bin/sail artisan migrate

   INFO  Preparing database.  

  Creating migration table ...................................................... 308.69ms DONE

   INFO  Running migrations.  

  0001_01_01_000000_create_users_table .......................................... 586.27ms DONE
  0001_01_01_000001_create_cache_table .......................................... 171.50ms DONE
  0001_01_01_000002_create_jobs_table ........................................... 400.70ms DONE

※Laravelの初期DBスキーマ(テーブル)をMySQLコンテナ上に作成

Laravelのマイグレーションは「データベースのバージョン管理システム」Gitみたいなもの

以上でブラウザでウェルカムページが確認できます

Laravel Let’s get started Laravel has an incredibly rich ecosystem. We suggest starting with the following. Read the Documentation → Watch video tutorials at Laracasts → Deploy now http://localhost

xserverのような共用サーバーではvendor/bin/sail artisan~のようなsailコマンドが使用できない??ので下記の方法がいいかも

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