WEB

[Laravel]Factoryとfakerでダミーデータを作成する方法

WEB
この記事は約5分で読めます。

はじめに

こんにちは!

Factoryとfakerを使ってダミーデータを大量に作成したので、使い方を書きます。

環境

Laravel: 6.8
MySQL: 8.0

手順

fakerの言語設定

まず、はじめにダミーデータの言語を設定します。
デフォルトで英語になっているので、日本語に変更します。

config/app.php

'faker_local' => 'ja_JP' // 変更

ファイル作成

次にモデル・マイグレーション・ファクトリーを作成します。

ターミナルでphp artisan make:model Models\Test -m -fのコマンドを入力します。

テーブルの作成

まず、DBにテーブルとカラムを作成します。

先ほどのコマンドでTestモデルに紐づいたマイグレーションファイルが作成されているので、その中にコードを追加します。

database/migrations/作成日_create_tests_table.php

public function up()
    {
        Schema::create('tests', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name', 50);
            $table->string('user_name', 50);
            $table->string('sex', 1);
            $table->string('post_code', 7);
            $table->string('address');
            $table->string('email');
            $table->string('tel');
            $table->string('password');
            $table->string('text', 100);
            $table->integer('number');
            $table->timestamps();
        });
    }

今回はこんな感じで適当なカラムでテーブルを作成します。

Factoryの作成

ここが本題です。

Factoryファイルの中にダミーデータを作成する際のルールみたいのを記述します。database/factories/TestFactory.php

use App\Models\Dummy;
use Faker\Generator as Faker;

$factory->define(Test::class, function (Faker $faker) {
    return [
        'name' => $faker->name(), // 名前 姓名
        'user_name' => $faker->unique()->userName(), // ユーザー名
        'sex' => $faker->randomElement(['男', '女']), // 配列内の文字をランダムに出力 今回は男or女
        'post_code' => $faker->regexify('[1-9]'), // 正規表現で郵便番号7桁を出力
        'address' => $faker->address(), // 住所 郵便番号も
        'email' => $faker->email(), // メールアドレス
        'tel' => $faker->phoneNumber(), // 電話番号
        'password' => $faker->password(), // パスワード
        'text' => $faker->realText(20), // ランダムに日本語文を20文字で出力
        'number' => $faker->numberBetween(10, 100) // 10~100の数字をランダムに出力
    ];
});

こんな感じでテーブルのカラムに合わせて、作成して欲しいデータを追加します。

seederファイルの作成

factoryができたらseederファイルを作ります。

database/seeds/TestTableSeeder.php

    public function run()
    {
        factory(Test::class, 50)->create();
    }

先ほどのfactoryを元に50件のダミーデータを作成してもらいます。

あとはDatabaseSeeder.phpに登録します。

title=DatabaseSeeder.php

    public function run()
    {
        $this->call(TestTableSeeder::class);
    }

実行

ここまでできたら、あとはphp artisan migrate --seedもしくはphp artisan migrate:fresh --seedを実行します。

エラーなく終えて、ダミーデータが作成されていれば無事完了です。

最後に

大量のダミーデータ作れるから、csvの扱いもまとめてみるかな。。

あと、公式にいい感じのfakerチートシートみたいのあればいいな。。

参考

シーダーについて