Laravel Seederの基本的な使い方
投稿日:2026/01/17
Laravelでは、データベースに初期データやテストデータを投入するために Seeder(シーダー) を使用します。
マスターデータの登録や、開発環境での動作確認用データ作成をコードで再現できる点が特徴です。
本記事では、Seederの基本的な使い方について、次の内容を解説します。
- Seederとは何か
- Seederファイルの作成方法
- データ登録の実装例
- 実行方法と運用ルール
- 活用パターン
Seederとは?
Seederとは、データベースにデータを登録する処理をコードで管理する仕組みです。
次のような用途で使用されます。
- マスターデータ(都道府県・カテゴリなど)の登録
- 初期管理ユーザーの作成
- 開発・検証用のダミーデータ作成
- 環境構築の自動化
Seederを使うことで、
- 環境ごとの差分をなくせる
- 手作業による登録ミスを防げる
- Gitで履歴管理できる
といったメリットがあります。
Seederファイルの作成
artisanコマンドで作成する
以下のコマンドでSeederを作成します。
php artisan make:seeder SamplesTableSeeder
作成されるファイルは次の場所に生成されます。
database/seeders/SamplesTableSeeder.php
Seederの実装例
サンプルデータを登録する
use Illuminate\Database\Seeder;
use App\Models\Sample;
class SamplesTableSeeder extends Seeder
{
public function run(): void
{
Sample::create([
'title' => 'サンプル',
'body' => 'Seederから登録したテストデータです。',
'is_published' => true,
]);
}
}
このSeederを実行すると、samplesテーブルに1件のレコードが登録されます。
DatabaseSeederから呼び出す
Seederは単体では実行されず、
DatabaseSeeder から呼び出して実行します。
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run(): void
{
$this->call([
SamplesTableSeeder::class,
]);
}
}
Seederを実行する
実行コマンド
php artisan db:seed
DatabaseSeeder に登録されたSeederがすべて実行されます。
マイグレーションと同時に実行する
php artisan migrate --seed
テーブル作成後にSeederが自動で実行されます。
複数データを登録する
配列でまとめて登録する
$samples = [
[
'title' => 'タイトル1',
'body' => '本文1',
'is_published' => true,
],
[
'title' => 'タイトル2',
'body' => '本文2',
'is_published' => false,
],
];
foreach ($samples as $sample) {
Sample::create($sample);
}
Factoryと組み合わせる
大量のダミーデータを作成したい場合は、Factoryと組み合わせます。
Sample::factory()->count(50)->create();
SeederからFactoryを呼び出すことで、
テスト用データを一括生成できます。
よく使うSeederの種類
| 種類 | 用途 |
|---|---|
| マスタSeeder | カテゴリ・権限・設定値 |
| 初期ユーザーSeeder | 管理者アカウント |
| 開発用Seeder | ダミーデータ |
| テストSeeder | 自動テスト用 |
運用上の注意点
- 本番環境でダミーデータSeederを実行しない
- 冪等性(何度実行しても問題ない設計)を意識する
- マスターデータは更新方法を明確にする
- 実行対象Seederを環境で切り替える
よくあるミス
データが重複登録される
同じSeederを何度も実行すると、
同一データが重複登録されることがあります。
対策例:
Sample::updateOrCreate(
['title' => 'サンプル'],
['body' => '更新データ']
);
まとめ
- Seederは初期データ・テストデータを登録する仕組み
- db:seed で一括実行できる
- Factoryと組み合わせると大量データ生成が可能
- 本番環境では実行対象に注意する