LaravelでFakerを使って、テストデータを作成する方法!

LaravelLaravel

LaravelでFakerを使って、テスト(ダミー)データを作成する方法をまとめています。
FakerはPHPのライブラリで、Laravelでも採用されているため使用することができます。

Fakerを使用したデータをFactoryに設定することで、日本語の名前や住所などのテスト(ダミー)データをテーブルにインサートすることが可能です。
この記事では、実際にFakerを使用する方法とFakerで使いそうな項目を一覧にしています。

今回のサンプルコードの検証はLaravelの8で行っています。

使用するテーブルを確認する

今回は既に作成済みのMemberモデルを使用して、Fakermembersテーブルにデータを入れていきます。
membersテーブルのマイグレーションは下記のように作成しました。

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateMembersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('members', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->boolean('gender');
            $table->integer('age');
            $table->string('address');
            $table->string('tel');
            $table->softDeletes();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('members');
    }
}

Laravelではマイグレーションを使用して、データベースのテーブルを作成することができます。
このマイグレーションを実行すると、membersテーブルができます。

テーブルの内容は下記になります。(今回はSQLiteで実行していきます)

項目
idinteger
namevarchar
gendertinyint
ageinteger
addressvarchar
telvarchar

membersテーブルについては、下記の記事で作成しました。
LaravelのEloquentで論理削除を使う方法!

マイグレーションの使い方については、下記を参考にしてください。
Laravelのmigrationまとめ

Factoryを作成する

Memberモデルに対するFactoryを作成していきます。
Factoryはモデルのデータを作成する時の内容を書いておくためのファイルです。

artisanコマンドを使用して、下記のように実行します。

$ php artisan make:factory MemberFactory

そうすると、このように実行完了したことが確認できます。

$ php artisan make:factory MemberFactory
Factory created successfully.

作成したFactoryのファイルはdatabase/factories配下に配置されます。
今回はdatabase/factories/MemberFactory.phpになりました。

ファイルの内容は下記になります。

<?php

namespace Database\Factories;

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

class MemberFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = Member::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            'name' => $this->faker->name(),
            'gender' => rand(1, 2),
            'age' => rand(1, 99),
            'address' => $this->faker->address(),
            'tel' => $this->faker->phoneNumber(),
        ];
    }
}

Mmeberモデルが$model変数に格納されています。
これが、このFactoryに対応するモデルになります。
artisanコマンドで渡したパラメータから実際に存在するモデルを紐付けて作成してくれます。

definitionメソッドには何も書いていませんでしたが、上記のように修正しました。
ここにテーブルに入れたいデータを定義して、シーダーなどで実行することで、定義したデータを格納してくれます。

Fakerを使用している箇所は、下記になります。

・`$this->faker->name()`でダミーの名前を取得してくれる。
・`$this->faker->address()`でダミーの住所を取得してくれる。
・`$this->faker->phoneNumber()`でダミーの電話番号を取得してくれる。

Factoryについては、下記に使い方の記事を書いているので参考にしてください。
LaravelでFactoryを使ってテストデータを作成する方法!

Seederを作成する

最後にSeederを作ります。
Seederもartisanコマンドから作成できます。
下記のようにコマンドを実行すると作成してくれます。

$ php artisan make:seeder FakerMemberSeeder

実行すると、下記のように作成が完了したことが確認できます。

$ php artisan make:seeder FakerMemberSeeder
Seeder created successfully.

database/seeders配下にFakerMemberSeeder.phpというファイルができます。
開いて、下記のように修正しました。

<?php

namespace Database\Seeders;

use App\Models\Member;
use Illuminate\Database\Seeder;

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

runメソッドが最初は実装されていませんが、今回処理を追加しました。
このシーダーではMemberモデルからダミーデータを作成しているだけです。

追加した処理は1行で、Memberモデルからfactoryメソッドを呼んで、countメソッドに50を渡しています。
その後にcreateメソッドを実行しています。

これで、50件のダミーデータが先ほど作成したMemberFactoryクラスを使用して作られます。

Seederについては、下記にも書いたので参考にしてください。
LaravelでSeederを使う方法!(初期データを登録する)

Fakerの日本語設定をする

実はデフォルトのままだと、Fakerで取得できる値が英語圏のものになってしまうので、日本語設定しましょう。
config/app.phpを開いて、faker_localeの項目をja_JPに設定します。

'faker_locale' => 'ja_JP',

動作確認する

実際に作成したSeederを動かしてみましょう。
--classオプションで特定のシーダーだけ実行可能です。

$ php artisan db:seed --class FakerMemberSeeder

下記のように処理が成功したことが確認できます。

$ php artisan db:seed --class FakerMemberSeeder                             
Database seeding completed successfully.

実際に登録したテーブルのデータを確認します。
下記のように定義した内容で、入力されていることが確認できました。
LaravelでFakerを使用してデータ作成

Fakerをコントローラーなどで使う

Factory以外でFakerを使用して、ダミーデータを作る場合です。
下記のようにFaker\Factoryクラスのcreateメソッドを使用して、取得することが可能です。

$faker = Faker\Factory::create(config('app.faker_locale'));
echo $faker->name;

Fakerで使用できるメソッドの一覧

Fakerで、よく使用しそうなメソッドを公式のREADMEから抜き出してみました。
実際に実行してみて、結果が返ってくることを確認しています。

メソッド内容値の例
$faker->lastName姓を取得する佐々木
$faker->firstName名を取得する亮介
$faker->name姓名どちらも一緒に取得する山岸 加奈
$faker->address住所を取得する2457947 奈良県井上市中央区加藤町吉田5-9-7
$faker->postcode郵便番号を取得する7745113
$faker->phoneNumber電話番号を取得する090-7123-9227
$faker->country国を取得するハンガリー
$faker->emailメールアドレスを取得するetanaka@hotmail.co.jp

他にもいろいろなダミーデータを作成できるようです。
詳細はgithubのREADME(トップページ)に詳しく書いているので、確認してみてください。
https://github.com/fzaninotto/Faker

Laravelプログラミング
yasuakiをフォローする
codelikeなブログ

コメント

タイトルとURLをコピーしました