db — データベースに関する操作を行うコマンド

artisan

Laravel 12 Artisan DB: Seed コマンドリファレンス


一言概要

  • カテゴリ:artisan
  • 掲載バージョン:Laravel 12・PHP 8.4
  • FQCN / コマンドphp artisan db:seed
  • 関連migrate, db:drop, db:reset, db:refresh
  • 変更履歴:Laravel 10 で --class がデフォルトクラス名 DatabaseSeeder を明示的に指定できるように変更。

TL;DR

  • 目的:データベースに初期データ(シーダー)を投入する。
  • コマンドphp artisan db:seed
  • ポイント
  • デフォルトでは database/seeders/DatabaseSeeder.php が呼び出される。
  • 既存データの重複挿入には注意。
  • 本番環境で実行する場合は --force を付ける。

概要

php artisan db:seed は、開発・テスト環境のデータベースにサンプルデータや初期データを投入するための Artisan コマンドです。
DatabaseSeeder クラスを介して複数のシーダーをまとめて実行でき、テストデータ作成やデモ環境構築に便利です。


構文 / シグネチャ

php artisan db:seed
引数 必須 既定値 説明
--class string いいえ DatabaseSeeder 実行するシーダークラス名
--database string いいえ null 使用するデータベース接続名
--force bool いいえ false 本番環境で実行する場合に確認をスキップ
--env string いいえ APP_ENV 環境別シーダーを指定
--path string いいえ database/seeders シーダーファイルのパス
--no-interaction bool いいえ false インタラクティブプロンプトを無効化
  • 戻り値void(成功時はコンソールにメッセージを出力)
  • 例外/副作用
  • Illuminate\Database\ConnectionException(データベース接続失敗)
  • クラスが見つからない場合は InvalidArgumentException
  • 重複挿入により PDOException が発生する可能性

使用例

最小構成

# 依存最小・そのまま動く例
php artisan db:seed

実務例

# テスト環境で初期データを投入
php artisan db:seed --class=UserSeeder
# 本番環境で既存データを上書きせずに実行
php artisan db:seed --force

よくある落とし穴・注意点

  1. デフォルト挙動DatabaseSeederrun() 内で他のシーダーを呼び出す必要があります。
  2. 重複データINSERT 文は重複を許容しないため、シーダー内で firstOrCreate() などを使う。
  3. 環境分離--env=testing を忘れると開発環境のデータが上書きされる恐れ。
  4. パフォーマンス:大量データ挿入時は DB::table()->insert() で一括挿入を検討。

代替・関連APIとの比較

API 選定基準 メリット デメリット
php artisan migrate:fresh スキーマを再生成してデータ投入 シーダーと一括実行 テーブル削除が必要
php artisan db:reset マイグレーションとシーダーを同時に実行 スクリプト化容易 テーブル削除が必要
php artisan db:refresh マイグレーションとシーダーを再適用 開発時に便利 大規模データでは時間かかる

選定基準

  • スキーマ変更がないでデータのみ投入 → db:seed
  • テーブルを初期化したい → migrate:fresh
  • マイグレーションとデータを同時にリセットしたい → db:reset / db:refresh

テスト例(Pest)

it('runs the database seeders', function () {
    Artisan::call('db:seed', ['--class' => 'TestSeeder']);

    expect(User::count())->toBeGreaterThan(0);
});

トラブルシュート(エラー別)

症状 / エラー 原因 対処
Class "DatabaseSeeder" not found シーダークラスが正しく配置されていない app/Database/seeders/DatabaseSeeder.php を確認
Missing required argument --class シーダークラスを明示的に指定したい --class=UserSeeder を追加
PDOException: SQLSTATE[23000]: Integrity constraint violation 重複データ挿入 firstOrCreate() で重複回避

参考リンク


レン (Wren)

こんにちは。レンです。

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

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

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

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

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

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