目的

モデルファクトリーとFakerを使って日本語のテストデータを挿入する

必要な知識

  • Migration(マイグレーション)
  • Seeder(シーダー)
  • Model Factory(モデルファクトリー)
  • Faker(フェイカー)

データの挿入方法

まずはどうやってテストデータを挿入するのかを簡単に説明します。

Laravelには、マイグレーションというデーターベースをバージョン管理する機能があります。そしてdatabase\migrationsディレクトリにあるマイグレーションファイルがテーブル一つ一つの設計図になります。

テーブル設計が終わればシーダーファイルにテストデータ生成の処理を記述します。単純にEloquentORMやクエリビルダーを使います。また、複数データを挿入したい場合はループさせます。

例えば、デフォルトのUsersテーブルには以下のようにしてシーディングできます。10個分のデータの挿入処理です。

これを以下のコマンドで実行すると、初期値が挿入されたUsersテーブルが作成されます。

$ php artisan migrate --seed

モデルファクトリーとフェイカー

いちいち自分で初期値を指定するのは冗長です。テストデータなので、それらしい初期値であればいいのです。モデルファクトリーを利用しましょう。

モデルファクトリーは内部でフェイカーを使っているので、ダミーデータが生成されます。また、ループ処理を書かなくてもよく、生成したい数を記述するだけでよくなります。

つまりモデルファクトリーを定義することで、テストデータを手動で指定しなくてもよくなります。

モデルファクトリーはdatabase\factories\ModelFactory.phpにデフォルトでひとつ定義されています。Usersテーブルのモデルファクトリーです。

これをシーダーで利用しましょう。

以下はdatabase\seeds\UsersTableSeeder.phpです。ここで使われているfactory()はヘルパー関数です。vendor\laravel\framework\src\Illuminate\Foundation\helpers.phpにあります。

以下はdatabase\seeds\DatabaseSeeder.phpで、各シーダーファイルを実行するためのものです。

見たまんまですね。50件のデータを生成していることがわかります。

では実行して実際にテーブルに挿入してみましょう。データベースを一度リセットしてから再びマイグレートするコマンドがあります。その際シーダーも動作するオプションをつけましょう。

$ php artisan migrate:refresh --seed

追加したいモデルファクトリーがあれば、その都度database\factories\ModelFactory.phpに同じように記述、シーダー追加、database\seeds\DatabaseSeeder.phpでコールしましょう。

日本語化

ダミーデータはデフォルトで英語です。これを日本語にしましょう。

次のようにApp\Providers\AppServiceProvider.phpregister()を修正します。

これで、Fakerを使う時は日本語になります。

この場合はアプリケーション全体での設定になります。モデルファクトリーだけで個別に設定したい場合は以下のようにします。

このようにモデルファクトリーを定義する時に、新しくインスタンスを生成して、そっちを使うことでいろんな言語のFakerを使えるようになります。

ただし、日本語でもできるものとできないものがあります。vendor\fzaninotto\faker\src\Faker\Provider\ja_JPディレクトリが日本語のダミーデータとして利用できるものです。