db:seed — データベースにシードデータを投入するコマンド

未分類

db:seed

データベースにダミーデータや初期データを挿入するための Artisan コマンドです。

  • カテゴリ: artisan
  • 掲載バージョン: Laravel 12・PHP 8.4
  • 名前空間 / FQCN / コマンド: php artisan db:seed
  • 関連: migrate, make:seeder, db:reset, db:seed –class, migrate:refresh
  • 変更履歴: ver 8.0 : --class オプション追加

要点(TL;DR)

  • 何に使うか:初期データや開発用データを DB に投入
  • 最低限の使い方php artisan db:seed
  • よくある罠
  • 本番環境で --force を付け忘れると失敗
  • 既存データを上書きしてしまうことがある
  • Seeder クラス名のスペルミスでエラーになる

概要

db:seeddatabase/seeders ディレクトリ内の Seeder クラスを実行し、DB にレコードを挿入します。
開発環境でテストデータを作成したり、初期データを投入したりする際に頻繁に使われます。
本番デプロイ時は --force オプションを付けて確認をスキップします。

構文 / シグネチャ

php artisan db:seed
オプション必須既定値説明
--class=string DatabaseSeeder実行する Seeder クラスを指定
--database=string デフォルト接続使用する DB 接続を指定
--forcebool false本番環境で実行する際に確認をスキップ
--quietbool false出力を抑制
--verbosebool false詳細出力
--path=string  Seeder ファイルのパスを指定
--env=string 現在の環境実行環境を切り替える

戻り値:なし(プロセスは標準出力と終了コードで結果を返します)
例外/副作用:DB への書き込み、外部トリガー実行。失敗時は Illuminate\Database\QueryException 等が投げられ、終了コード 1 が返ります。

使用例

最小例

php artisan db:seed

実務例

# ユーザーデータを作成する専用 Seeder を実行
php artisan db:seed --class=UserSeeder
  • UserSeederdatabase/seeders/UserSeeder.php に実装し、$this->call() で他の Seeder を連鎖させることも可能。
  • 本番環境で初期化時に実行する場合は --force を付ける。

よくある落とし穴・注意

症状/エラー原因対処
Class 'UserSeeder' not foundComposer の autoload が更新されていないcomposer dump-autoload を実行
データが重複して挿入されるSeeder が insert の代わりに create を使っているupsertfirstOrCreate を検討
本番でデータが上書きされるデータの unique 制約に違反if (!User::exists(...)) { User::create(...); } などで回避

代替・関連APIとの比較

代替手段メリットデメリット
php artisan migrate:refresh --seedマイグレーションとシードを同時に実行大量データの場合時間がかかる
php artisan migrate:fresh --seedDB を全消去して再作成本番では不可
php artisan make:seeder + --class で個別実行目的の Seeder だけ実行可能手動でクラス名を指定する手間

選定基準

  • データベースを再作成する必要がない場合 → db:seed
  • マイグレーションと同時にシードしたい場合 → migrate:refresh --seed
  • 本番で確実にデータを投入したい場合 → db:seed --force

テスト例(Pest)

it('inserts users via UserSeeder', function () {
    // シーダー実行
    Artisan::call('db:seed', ['--class' => UserSeeder::class]);

    // 期待するレコードが存在することを確認
    expect(User::count())->toBeGreaterThan(0);
});

トラブルシュート

トラブル原因解決策
Seeder が実行されないdatabase/seeders 以外の場所にファイルがある--path= を使用
シード中に PDOException が発生データベース接続情報が間違っているphp artisan config:clear--database= を確認

参考リンク

レン (Wren)

こんにちは。レンです。

Laravelのコードの森に住んでいる、小さな案内役です。
ルーティングの枝やクラスの影を歩きながら、コードの流れや仕組みを眺めています。

このサイトでは、Laravelの基本から実装のコツまで、開発で役立つポイントを静かに整理しています。
難しいことを増やすのではなく、コードの見通しが少し良くなるヒントを届けるのが役目です。

「この処理はどこに書くのがいいのか」
「Laravelではどう考えると整理できるのか」

そんな疑問に、小さなメモを残すような気持ちで記事を書いています。

コードを書いている途中で迷ったとき、
このサイトが少し立ち止まって整理できる場所になればうれしいです。

レン (Wren)をフォローする