【2026年最新】php artisan db:seed 完全ガイド | –classオプション・よくあるエラー・本番環境の注意点【Laravel 12対応】

チートシート

Laravelのデータベースにテストデータや初期データを投入する
「php artisan db:seed」コマンドについて、基本的な使い方から
実務での活用方法、よくあるエラーと対処法まで解説します。

💡 他のコマンドも知りたい方は artisanコマンド完全チートシート をご覧ください

1. db:seedコマンドとは

php artisan db:seed は、Seederクラスを実行してデータベースに
レコードを投入するコマンドです。

このコマンドでできること

  • 開発・テスト環境へのテストデータ一括投入
  • 本番環境への初期マスターデータ登録
  • 特定のSeederクラスだけを選択して実行
  • migrateと組み合わせてDB構築を一発で完了

いつ使うのか

✅ 必ず使うタイミング:

  • 新しい開発環境を構築したとき
  • git clone後にテストデータが必要なとき
  • CI/CDでテスト用DBをリセットするとき
  • 本番環境に初期マスターデータを投入するとき

⚠️ 注意が必要なタイミング:

  • 本番環境での実行(–forceが必要、後述)

2. 実際にやってしまったミスと教訓

本番環境で php artisan db:seed を実行してしまい、
すでに存在するマスターデータが重複登録されてしまったことがあります。

Seederに truncate() が入っていた場合はさらに深刻で、
本番データが全消去されるリスクもあります。

本番でSeederを実行する際は必ず以下を確認してください。

  • --class で対象を絞る
  • Seeder内に truncate() が含まれていないか確認する
  • 実行前にDBのバックアップを取る

3. 基本的な使い方

最も基本的な使い方

すべてのSeederを実行します(DatabaseSeederが起点になります)。

php artisan db:seed

実行結果:

INFO Seeding database.

Database\Seeders\UserSeeder ………. RUNNING
Database\Seeders\UserSeeder ………. 18.77 ms DONE

オプション一覧

オプション説明使用例
–class実行するSeederクラスを指定–class=UserSeeder
–database接続先DBを指定–database=mysql
–force本番環境で強制実行–force

4. –classオプションの使い方

特定のSeederだけを実行したい場合に使います。
実務では最もよく使うオプションです。

php artisan db:seed --class=UserSeeder

実行結果:

INFO Seeding database.

Database seeding completed successfully.

複数のSeederを順番に実行したい場合

–classは1つしか指定できないため、
DatabaseSeederにまとめて呼び出す方法が実用的です。

public function run(): void
{
    $this->call([
        UserSeeder::class,
        ProductSeeder::class,
        CategorySeeder::class,
    ]);
}
// まとめて実行
php artisan db:seed

5. 実務での使用シーン

シーン1: 開発環境の初期構築

git clone後の環境構築で一番よく使うパターンです。

composer install
cp .env.example .env
php artisan key:generate
php artisan migrate --seed # migrateとseedを同時実行

シーン2: DB再構築(開発中によく使う)

# テーブルを全削除して最初からやり直す
php artisan migrate:fresh --seed

⚠️ migrate:fresh は全テーブルを DROP するので
本番環境では絶対に使わないでください。

シーン3: 特定テーブルのデータだけ入れ直す

開発中に特定のマスターデータだけ更新したいときに使います。

php artisan db:seed --class=PrefectureSeeder

シーン4: CI/CDでの利用

# GitHub Actions等でのテスト前処理
php artisan migrate:fresh --seed --env=testing

6. よくあるエラーと対処法

エラー1: “Class not found”

php artisan db:seed --class=UserSeeder
# Error: Target class [UserSeeder] does not exist.

原因:名前空間の指定が足りない、またはオートロードが更新されていない

解決方法:

# 名前空間を含めて指定
php artisan db:seed --class="Database\Seeders\UserSeeder"

# またはオートロードを更新してから実行
composer dump-autoload
php artisan db:seed --class=UserSeeder

エラー2: 本番環境で確認プロンプトが出る

**************************************
*     Application In Production!     *
**************************************
Do you really wish to run this command? (yes/no) [no]:

対処法:

# 本当に実行する場合のみ
php artisan db:seed --force

⚠️ 本番では –class で対象を絞ってから実行することを強く推奨します。

エラー3: “SQLSTATE: Duplicate entry”

原因:同じデータを2回投入しようとしている

解決方法:

// firstOrCreate を使って重複を防ぐ
User::firstOrCreate(
    ['email' => 'admin@example.com'],
    ['name' => 'Admin', 'password' => bcrypt('password')]
);

// または updateOrCreate
User::updateOrCreate(
    ['email' => 'admin@example.com'],
    ['name' => 'Admin']
);

「コロンなし」で検索している方へ:
「php artisan db seed」「db-seed」「artisan seed」と検索している方も、
このページで解説している「db:seed」コマンドが対象です。
コロン(:)あり「db:seed」が正しいコマンド名です。

7. チートシート(コピペ用)

# 全Seeder実行
php artisan db:seed
# 特定クラスだけ実行
php artisan db:seed --class=UserSeeder
# 名前空間付きで指定
php artisan db:seed --class="Database\Seeders\UserSeeder"
# migrate と同時実行
php artisan migrate --seed
# 全テーブルリセット+seed(開発環境のみ)
php artisan migrate:fresh --seed
# 本番環境での強制実行(要注意)
php artisan db:seed --force

8. 関連するArtisanコマンド

  • php artisan migrate --seed — migrate実行時にseedも同時実行
  • php artisan migrate:fresh --seed — 全リセット後にseed
  • php artisan make:seeder — Seederクラスの新規作成
  • php artisan make:factory — Factoryクラスの新規作成

まとめ

覚えておくべきポイント

✅ DO(やるべきこと):

  • 開発環境では migrate:fresh –seed を活用する
  • 本番では –class で対象Seederを絞る
  • firstOrCreate / updateOrCreate で重複を防ぐ

❌ DON’T(やってはいけないこと):

  • 本番環境で migrate:fresh –seed を実行する
  • Seederに truncate() を書いて本番実行する
  • –force を深く考えずに使う
著者

Webエンジニア歴30年、フリーランスバックエンドエンジニア。

PHP歴約30年(Laravel 7年・FuelPHP 5年・CakePHP・自作FW)、
JavaScript歴約20年(React・Vue各4年)。
AWS(EC2 / CloudFront / RDS / API Gateway など)・
GCP(BigQuery)を使ったバックエンド開発を中心に、
複数の事業会社・受託案件でシステム設計から実装・運用まで担当しています。

PHPがバージョン4の時代から書いており、
Laravelが普及する前のフレームワーク乱立期も経験しています。
「昔はこう書いていたが今はこう」という変遷を肌で知っているエンジニアとして、
単なるコマンドの使い方だけでなく、なぜそうするのかの背景まで伝えることを意識して書いています。

このブログでは、実務で実際に詰まった箇所・調べたこと・気づいたことを
そのまま記事にしています。誰かの「詰まり」が解決するきっかけになれば幸いです。

千原 耕司をフォローする

役にたったと思ったら応援をお願いします m(._.)m

チートシート
スポンサーリンク
シェアする
千原 耕司をフォローする
タイトルとURLをコピーしました