などの疑問や悩みを解決してまいります。
Factoryとは
Factoryは、Laravelでテストや開発時に大量のダミーデータを簡単に作成できる機能です。
Factoryを使うことで、繰り返し手動でデータを作成する手間を省き、簡単に数百、数千のデータを作成することができます。
Factoryを使用した大量のダミーデータ作成手順
それではFactoryを使用して大量データを作成する手順を説明していきます。
DBテーブルの作成
マイグレーションを実行して、DBにテーブルを作成していきます。
マイグレーションを使用したDBテーブルの作成方法については、以下の記事で解説していますので参考にしていただけたら幸いです。
-
【Laravel】マイグレーションとは?作成と実行、ロールバックから基本的なコマンドまで解説
続きを見る
今回は参考記事で作成したテーブルと同じ内容で解説を進めていきたいと思います。
id | name | created_at | update_at |
---|---|---|---|
こちらのテーブルにデータを登録していきます。
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ファイルが追加されているか確認してください。
Factoryファイルの作成
Factoryファイルを作成するには以下のコマンドを実行します。
// Factoryファイル作成コマンド
php artisan make:factory {ファクトリ―ファイル名}
// 例
php artisan make:factory TestFactory
正常に作成されると以下のようなメッセージが表示されます。
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
テーブルのname
は20文字の制限がかかっているので、Str::limit
で登録するデータに対して設定しています。
またfake()
メソッドを使用して、ランダムな名前(フルネーム)を生成します。
fake()
メソッドは、ダミーデータを作成する上で重宝するメソッドです!ダミーデータの日本語設定
このままでは出力したダミーデータが英語で登録されてしまうので、日本語で出力されるように設定を行います。
config/app.phpの以下の箇所を変更します。
'faker_locale' => 'ja_JP',
Seederファイルの作成
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個のダミーデータを作成
count()
メソッドの引数に好きな数字を入れることで、簡単に作成データ数を制御できるのは素晴らしいです…!DatabaseSeeder.phpの編集
登録するデータの設定ができましたら、次にDatabaseSeeder.phpを編集します。
<?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
クラスを記述します。
TestsSeederTable
クラスが呼び出せます。Seederの実行
以下コマンドでSeederを実行します。
php artisan db:seed
tests
テーブルに登録されていたらOKです。まとめ
LaravelのFactoryを使うことで、簡単に大量のダミーデータをデータベースに登録できます。
Factoryクラスを定義し、fake()
メソッドを活用してランダムなデータを生成し、Seederを通じてデータベースに大量データを投入することが可能です。
DBデータ準備が効率化されるのがFactoryの魅力なので、ぜひこの記事を参考にFactoryを活用してください。