rukurxの日記

自分の日々の作業や調べたことのメモ

PHPのFakerを使ってテストデータを自動生成する

PHPユニットテストを書いていると、適当なテストデータが必要になる。 毎回テストとかHoge的なテストデータを使っていたので、ちゃんとしたテストデータを使いたかった。 PHPにはFakerというランダムにテストデータを生成してくれるライブラリがあるので早速使ってみた。

github.com

PHPのFaker自体はPerlData::FakerRuby Faker にインスパイアされたものらしい。 PHPでも使えるようにしてもらえて感謝。

$ mkdir faker-sample
$ cd faker-sample
  • FakerをComposer経由でインストールする
$ composer require fzaninotto/faker
$ php -a
Interactive shell

php > // Fakerのオートーロードをrequireする
php > require_once 'vendor/fzaninotto/faker/src/autoload.php';
php > // Faker\Generatorインスタンスを生成する
php > $faker = Faker\Factory::create();
php > echo $faker->name;
Dr. Zachery Ledner V
php > echo $faker->address;
860 Jaskolski Gateway Apt. 806
Rutherfordville, ID 44854-0067
php > echo $faker->text;
Nemo ipsa placeat aut et nostrum perferendis et. Neque dolor accusantium sint sit.
php >

デフォルトではロケールen_USになっているため、英語になる。 ただし、textは何故かラテン語...

php > require_once 'vendor/fzaninotto/faker/src/autoload.php';
php > $faker = Faker\Factory::create('ja_JP');
php > echo $faker->name;
伊藤 春香
php > echo $faker->address;
9584833  佐賀県西之園市東区吉本町佐藤2-4-6
php > echo $faker->text;
Nemo maxime suscipit ut. Enim veritatis enim libero quas necessitatibus id. Et ad aspernatur iusto. Accusamus ut dolores consequuntur.
php >

日本語にするとより自動生成されたテストデータがリアルなものに感じます。 それでもtextはまだラテン語...

ソースを読んでみると都道府県や名前情報を配列でもっている。

Fakerの都道府県定義
Fakerの都道府県定義

Fakerで自動生成できるデータは日本語では現在以下の6種類ある。 日本語形式でなくてもよければ他にも使える。

  • 住所
  • 企業
  • インターネット
  • 電話番号
  • テキスト

どんなものを自動生成してくれるかと、呼び出し方はここのソース読むとわかる。 直下の 各ロケール内のクラスが継承している親クラスと、使いたいロケール内にあるクラスのメソッドをプロパティとして呼び出すことで使うことができる。

  • 人(Person)の場合
php > // 共通メソッド(Person.php)
php > echo $faker->name;
藤本 晃
php > echo $faker->firstName;
学
php > echo $faker->firstNameMale;
修平
php > echo $faker->firstNameFemale;
幹
php > echo $faker->lastName;
近藤
php > echo $faker->title;
Dr.
php > echo $faker->titleMale;
Mr.
php > echo $faker->titleFemale;
Prof.
php > // ja_JPロケールで定義されているメソッド (ja_JP/Person.php)
php > echo $faker->kanaName;
ワタナベ マアヤ
php > echo $faker->firstKanaName;
リョウヘイ
php > echo $faker->firstKanaNameMale;
トモヤ
php > echo $faker->firstKanaNameFemale;
リカ
php > echo $faker->lastKanaName;

使えるテストデータの種類が多いのでPHPUnitでテストする際には必須級のライブラリです。インストールと使い方もとても簡単なのでガンガン使っていきたいと思います。既にかなりお世話になってるけど。