【Laravel】Factoryを使って大量のダミーデータを登録する方法

Laravel PHP

【Laravel】Factoryを使って大量のダミーデータを登録する方法を解説

なやむくん
Laravelでデータベースに大量のダミーデータを登録したい…。
なやむさん
LaravelのFactory機能について知りたい。

などの疑問や悩みを解決してまいります。

Factoryとは

Factoryは、Laravelでテストや開発時に大量のダミーデータを簡単に作成できる機能です。

Factoryを使うことで、繰り返し手動でデータを作成する手間を省き、簡単に数百、数千のデータを作成することができます。

よろこびくん
とても強力な機能ですね!早く実行してみたいです!

Factoryを使用した大量のダミーデータ作成手順

それではFactoryを使用して大量データを作成する手順を説明していきます。

DBテーブルの作成

マイグレーションを実行して、DBにテーブルを作成していきます。

マイグレーションを使用したDBテーブルの作成方法については、以下の記事で解説していますので参考にしていただけたら幸いです。

参考記事
【Laravel】マイグレーションとは?作成と実行、ロールバックから基本的なコマンドまで解説
【Laravel】マイグレーションとは?作成と実行、ロールバックから基本的なコマンドまで解説

続きを見る

今回は参考記事で作成したテーブルと同じ内容で解説を進めていきたいと思います。

idnamecreated_atupdate_at
作成したtestsテーブルのカラム構造

こちらのテーブルにデータを登録していきます。

Modelファイルの作成

Factoryを使用するには、登録するテーブルに紐づくModelクラスが必要になります。

Modelファイルは以下のコマンドで作成します。

// Modelファイル作成コマンド
php artisan make:model {モデル名}

// 例
php artisan make:model Test

今回用意しているテーブル名が「tests」でしたので、Model名をTestとしています。

ポイント

Laravelでは、Modelクラスに紐づくデフォルトのデータベーステーブル名は、クラス名の複数形となります。

みつた
php artisan make:model モデル名 --migrationでModelファイルとマイグレーションファイルを一括で作成することも可能です。

作成すると以下のようなメッセージが表示されます。

app/Models配下に、作成したModelファイルが追加されているか確認してください。

みつた
今回Modelファイルは編集しませんので、追加されていればOKです!

Factoryファイルの作成

Factoryファイルを作成するには以下のコマンドを実行します。

// Factoryファイル作成コマンド
php artisan make:factory {ファクトリ―ファイル名}

// 例
php artisan make:factory TestFactory

正常に作成されると以下のようなメッセージが表示されます。

みつた
作成されたファイルは、database/factories内に追加されているので確認してください!

Factoryファイルの中身

作成したFactoryファイルを以下のように変更して下さい。

<?php

namespace Database\Factories;

use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str; // 追加

/**
 * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Test>
 */
class TestFactory extends Factory
{
    /**
     * Define the model's default state.
     *
     * @return array<string, mixed>
     */
    public function definition(): array
    {
        return [
            'name' => Str::limit(fake()->name(), 20), // fake() を使用して名前を生成
        ];
    }
}

登録するデータをdefinition()メソッド内に記載していきます。

testsテーブルのname20文字の制限がかかっているので、Str::limitで登録するデータに対して設定しています。

またfake()メソッドを使用して、ランダムな名前(フルネーム)を生成します。

みつた
fake()メソッドは、ダミーデータを作成する上で重宝するメソッドです!

ダミーデータの日本語設定

このままでは出力したダミーデータが英語で登録されてしまうので、日本語で出力されるように設定を行います。

config/app.phpの以下の箇所を変更します。

'faker_locale' => 'ja_JP',

Seederファイルの作成

Seederファイルの作成方法は以下の記事を参考にしていただけると幸いです。

参考記事
【Laravel】Seeder(シーダー)機能の使い方!データベースにデータを投入する方法を解説
【Laravel】Seeder(シーダー)機能の使い方!データベースにデータを投入する方法を解説

続きを見る

ここでTestsTableSeeder.phpを作成します。

TestsTableSeeder.phpの編集

作成したTestsTableSeeder.phpを以下のように編集します。

<?php

namespace Database\Seeders;

use App\Models\Test; // Testモデルをインポート
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class TestsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        Test::factory()->count(100)->create(); // 100個のダミーデータを作成
    }
}

Factory機能を使用するためTestモデルをインポートします。

use App\Models\Test;

run()メソッドの処理を見ていきます。
ModelのTestクラスでfactory()メソッドを実行し、count()メソッドで作成するデータ数を設定できます。

Test::factory()->count(100)->create(); // 100個のダミーデータを作成
みつた
今回はデータを100個生成します。
よろこびくん
count()メソッドの引数に好きな数字を入れることで、簡単に作成データ数を制御できるのは素晴らしいです…!

DatabaseSeeder.phpの編集

登録するデータの設定ができましたら、次にDatabaseSeeder.phpを編集します。

みつた
DatabaseSeeder.phpは、database/seeders内にあります。
<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     */
    public function run(): void
    {
        $this->call([
            TestsTableSeeder::class // 実行するSeederクラスを記述
        ]);
    }
}

DatabaseSeeder.phpでは、複数のSeederクラスをまとめて実行する役割を果たします。

Call()メソッド内にTestsTableSeederクラスを記述します。

みつた
これでSeederを実行したら、TestsSeederTableクラスが呼び出せます。

Seederの実行

以下コマンドでSeederを実行します。

php artisan db:seed

みつた
Seederの実行により、100件のダミーデータがtestsテーブルに登録されていたらOKです。

まとめ

LaravelのFactoryを使うことで、簡単に大量のダミーデータをデータベースに登録できます。
Factoryクラスを定義し、fake()メソッドを活用してランダムなデータを生成し、Seederを通じてデータベースに大量データを投入することが可能です。
DBデータ準備が効率化されるのがFactoryの魅力なので、ぜひこの記事を参考にFactoryを活用してください。

  • この記事を書いた人
  • 最新記事

みつた

完全未経験&異業種から30歳の年でIT企業に転職。

Web系開発言語が好き。
どちらかというとバックエンドよりもフロントエンドが好き(現時点では…)

最近はサウナと観葉植物にハマっている。
野球が好きで一応投手。

-Laravel, PHP