例えば、こんなプロジェクトがあるとする
日本向け*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で生成した氏名が全然合致しないのは仕方がないが、そこに依存する機能でなければ十分使えるやり方だと思う。