例えば、こんなプロジェクトがあるとする
日本向け*1のサービスをLaraelで開発していて、Fakerを使ってテストデータを生成している。 ある時、ユーザー名に英語表記*2をサービス内で保持する必要が出てきた。
どうやるか
Faker はFactoryパターンで実装されていて、create
メソッドにロケールを渡すことで、指定されたロケールに合致するジェネレーターを返してくれる。
なので、一時的に欲しいロケールのジェネレーターを生成することで実現できる。
具体的には、デフォルトのロケールが'ja'
の環境でUser
モデルのテストデータを生成するUserFactory
があるとき、
<?php use Faker\Generator as Faker; use App\User; $factory->define(User::class, function (Faker $faker) { $faker_en = \Faker\Factory::create('en_US'); return [ 'name' => $faker->name, 'firstName' => $faker_en->firstName, 'lastName' => $faker_en->lastName, 'email' => $faker->unique()->safeEmail ]; });
と、$faker_en
を生成することで異なるロケールのデータを生成できる。
$faker->name
が生成した日本語名と$faker_en
で生成した氏名が全然合致しないのは仕方がないが、そこに依存する機能でなければ十分使えるやり方だと思う。