LaravelでFakerを使って、テスト(ダミー)データを作成する方法をまとめています。
FakerはPHPのライブラリで、Laravelでも採用されているため使用することができます。
Fakerを使用したデータをFactoryに設定することで、日本語の名前や住所などのテスト(ダミー)データをテーブルにインサートすることが可能です。
この記事では、実際にFakerを使用する方法とFakerで使いそうな項目を一覧にしています。
今回のサンプルコードの検証はLaravelの8で行っています。
使用するテーブルを確認する
今回は既に作成済みのMember
モデルを使用して、Faker
でmembers
テーブルにデータを入れていきます。
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で実行していきます)
項目 | 型 |
---|---|
id | integer |
name | varchar |
gender | tinyint |
age | integer |
address | varchar |
tel | varchar |
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->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.
実際に登録したテーブルのデータを確認します。
下記のように定義した内容で、入力されていることが確認できました。
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
コメント