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
よくある落とし穴・注意点
- デフォルト挙動:
DatabaseSeeder の run() 内で他のシーダーを呼び出す必要があります。
- 重複データ:
INSERT 文は重複を許容しないため、シーダー内で firstOrCreate() などを使う。
- 環境分離:
--env=testing を忘れると開発環境のデータが上書きされる恐れ。
- パフォーマンス:大量データ挿入時は
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() で重複回避 |
参考リンク