ダミーデータの生成方法

ダミーデータの作成

データベースの実装をテストする際にダミーデータが必要になる場合があります。ダミーデータとは、仮のデータのことで大量に用意する必要がある場合もあり、人力でデータを入力するのは現実的ではありません。そこでLaravelでは自動で大量のダミーデータを生成する仕組みがあります。

FactoryとSeeder

Factoryはモデルに関連付けられたダミーデータを生成する仕組みで、テストデータの生成の構造の設定を行います。一方、Seederはデータベースにダミーデータを挿入する仕組みで、Factoryを利用したり、直ですデータを指定したりしてテストデータを生成します。

Factoryの記述方法

Factoryを実際に作ります。まず、下記のコマンドでFactoryファイルを作成します。今回は以前作成したbooksテーブルのダミーデータを生成するために作成します。

php artisan make:factory BookFactory

上記のコマンドを実行するとdatabase/factories/BookFactory.phpが作成されます。生成されたファイルの中身を以下のように書き換えます。

<?php

namespace Database\Factories;

use App\Models\Book;
use Illuminate\Database\Eloquent\Factories\Factory;

/**
 * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Book>
 */
class BookFactory extends Factory
{
    protected $model = Book::class;

    /**
     * Define the model's default state.
     *
     * @return array<string, mixed>
     */
    public function definition(): array
    {
        return [
            "title" => $this->faker->word(),
            "author" => $this->faker->name(),
            "price" => random_int(0, 2000),
        ];
    }
}

ダミーデータはfakerを使用します。整数に関してはfakerでなく乱数を使用します。model変数には紐づけるモデルを指定します。

モデルの編集

モデルのBook.phpに以下のようにコードを追加します。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Book extends Model
{
    use HasFactory;

    protected $fillable = [
        "title",
        "author",
        "price",
    ];
}

HasFactoryを記述することで、Factoryとモデルを紐づけることができます。

Seederの記述方法

次に、Seederを記述します。以下のコマンドでSeederを作成します。今回は、以前作成したbooksテーブルのダミーデータを生成するプログラムを記述します。

php aritsan make:seeder BookSeeder

上記のコマンドを実行すると、database/seeder/BookSeeder.phpが生成されます。生成されたファイルの中身を以下のように書き換えます。

<?php

namespace Database\Seeders;

use App\Models\Book;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class BookSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        Book::factory()->count(50)->create();
    }
}

Bookモデルに紐づけられているfactoryメソッドのcountで生成するダミーデータの個数を指定します。ここでは、50としています。createでダミーデータの生成を実行します。

Seederの実行

次に作成したSeederを実行します。以下のコマンドで実行します。

php artisan db:seed --class=BookSeeder

以下のコマンドで、データベースにダミーデータが登録されていれば成功です。

select * from books;

複数のSeederの同時実行

Seederはまとめて実行することができます。DatabeseSeeder.phpのrunメソッドに以下のように記述します。

$this->call([
            UserSeeder::class,
            BookSeeder::class,
        ]);

その後、以下のコマンドを実行します。

php artisan db:seed

以上で、ダミーデータの生成は終了です。

今回は、データベースのテストなどに使用するダミーデータの生成について解説しました。次回は、ビューの共通化について解説します。

コメントを残す

CAPTCHA