シーダーとファクトリでテストデータを作る
動作確認用のダミーデータを自動で投入する「シーダー」と「ファクトリ」の使い方を、初心者向けにやさしく解説します。
広告枠(記事上)— 本番では AdSense 広告が表示されます
テーブルを作ったばかりの状態は、当然ながら空っぽです。画面の表示を確認するには、いくつかデータが入っていると便利です。毎回手で入力するのは大変なので、Laravel にはダミーデータを自動で入れる仕組みがあります。それが シーダー と ファクトリ です。
シーダーとファクトリの役割
- シーダー(Seeder)…「データを投入する係」。どんなデータを入れるかを書く。
- ファクトリ(Factory)…「それっぽいダミーデータを作る係」。名前やメールなどを自動で生成する。
イメージは、ファクトリが料理(ダミーデータ)を作り、シーダーがそれをテーブルに配膳する、という分担です。
ファクトリを作る
ここでは前の単元で作った posts 表にデータを入れます。まず、Post モデルとファクトリを用意します(モデルは次章で詳しく学びます。今は「表とセットの相棒」とだけ思ってください)。
php artisan make:model Post --factory
database/factories/PostFactory.php が作られます。definition() に「1件分のダミーデータの形」を書きます。
public function definition(): array
{
return [
'title' => fake()->sentence(),
'body' => fake()->paragraph(),
];
}
fake() は、それっぽいダミー文字列を自動生成してくれる便利な道具です。sentence() は短い文、paragraph() は段落を作ります。
シーダーから呼び出す
次に、ファクトリを使ってデータを投入します。database/seeders/DatabaseSeeder.php の run() に書きます。
public function run(): void
{
\App\Models\Post::factory(10)->create();
}
factory(10)->create() で、「ダミーの投稿を10件作って保存する」という意味になります。
実行する
シーダーを実行してデータを投入します。
php artisan db:seed
マイグレーションとシーダーをまとめてやり直したいときは、次の1コマンドが便利です(既存データは消えます)。
php artisan migrate:fresh --seed
これで、空だった posts 表に10件のダミー投稿が入りました。次章で、このデータを画面に表示していきます。
まとめ
- シーダーはデータを投入する係、ファクトリはダミーデータを作る係。
make:model Post --factoryでモデルとファクトリをまとめて作成。- ファクトリの
definition()に1件分の形を書き、fake()でそれっぽい値を生成。 php artisan db:seedで投入。migrate:fresh --seedで作り直し+投入をまとめて実行。- 第4章はこれで完了です。次章では、いよいよ Eloquent でデータを自在に操作します。
広告枠(記事下)— 本番では AdSense 広告が表示されます