Skip to main content

シーディングとは

シーディング(Seeding)はデータベースにサンプルデータや初期データを投入する仕組みです。 開発環境のセットアップや自動テストでは、あらかじめデータが入っている状態が必要になります。毎回手動でデータを入力するのは手間がかかるため、シーダーを使って繰り返し実行できる形にまとめます。 シーダークラスは database/seeders ディレクトリに格納されます。デフォルトで DatabaseSeeder クラスが用意されています。

シーダーの作成

make:seeder Artisanコマンドで新しいシーダークラスを生成します。
生成されたファイルは database/seeders/UserSeeder.php に配置されます。

シーダーの実装

run() メソッド内にデータ投入の処理を書きます。DBファサードやEloquentモデルを使って挿入できます。

DBファサードを使う

Eloquentモデルを使う

シーディング実行中はマスアサインメント保護が自動的に無効になります。$fillable$guarded の設定を気にせずデータを挿入できます。

モデルファクトリーとの組み合わせ

大量のテストデータが必要な場合はモデルファクトリーとの組み合わせが便利です。ファクトリーを使うとランダムなダミーデータを一括生成できます。
ファクトリーの詳細な使い方はEloquentファクトリーのドキュメントを参照してください。

DatabaseSeeder の使い方

DatabaseSeeder は複数のシーダーをまとめて管理するエントリーポイントです。call() メソッドで実行するシーダーを指定します。
call() に渡した順序でシーダーが実行されます。外部キー制約がある場合は、参照先のテーブルを先にシードする順序にしてください(例:usersposts)。

シーダーの実行

全シーダーを実行する

DatabaseSeeder が呼び出され、そこから call() で指定したシーダーが順番に実行されます。

特定のシーダーだけ実行する

--class オプションで実行するシーダークラスを指定できます。

マイグレーションと同時に実行する

migrate:fresh コマンドに --seed オプションを付けると、全テーブルを再作成してからシーディングを一括実行できます。
特定のシーダーだけ実行したい場合は --seeder オプションを使います。
migrate:fresh はすべてのテーブルを削除して作り直します。既存のデータはすべて失われるため、本番環境では使用しないでください。

本番環境での実行

本番環境でシーディングを実行しようとすると確認プロンプトが表示されます。確認なしで実行するには --force フラグを使います。
本番環境でのシーディングはデータの上書きや損失につながる可能性があります。実行前に必ずバックアップを取ってください。

モデルイベントの抑制

シーディング中にモデルのイベント(creatingcreated など)が発火するのを防ぎたい場合は、WithoutModelEvents トレイトを使います。
call() 経由で実行される子シーダーにも適用されます。

実践例:ブログアプリのシーダー

ユーザーと投稿を持つブログアプリの初期データをセットアップする例です。
実行手順:

次のステップ

Eloquent入門

シーダーで投入したデータをEloquent ORMで取得・操作する方法を学びます。
最終更新日 2026年4月3日