[PHP] Fakerでランダムなフェイクデータを作成する

概要

PHPでランダムなフェイクデータ(テストデータ/ダミーデータ)を作成するためのライブラリであるFakerのTips

全体

以下環境で動作確認済み

debian 8.6
php 7.0
composer 1.5.2
faker 1.7.2

Fakerについて

FakerはPHPで利用できる、フェイクデータ(テストデータ/ダミーデータ/フェイクデータ)を生成するためのライブラリで、以下のようにそれっぽいデータを作成することができる。

<?php
// Faker autoloadeをrequireすることで使える
require_once 'vendor/fzaninotto/faker/src/autoload.php';

// フェイクデータを生成するジェネレータを作成
$faker = Faker\Factory::create('ja_JP');

// ジェネレータのプロパティにアクセスする形式でフェイクデータを取得できる
echo $faker->name;
  // '若松 直樹';
echo $faker->address;
  // '8891527  石川県田中市東区斉藤町佐藤4-4-2 ハイツ桐山107号';
echo $faker->text;
  // Dolores sit sint laboriosam dolorem culpa et autem. Beatae nam sunt fugit
  // et sit et mollitia sed.
  // Fuga deserunt tempora facere magni omnis. Omnis quia temporibus laudantium
  // sit minima sint.

用途としては、開発中のシステムのテストデータが考えられる。リリース前のサービスで、本番と同様の条件で動作を確認したい時、テストデータがuser1,user2,user3などの形式的なデータだとリアリティがない。そんな場合にFakerを使えば、実在しそうなユーザなどのデータを容易に準備することが出来る。

さらに、Fakerはフェイクデータ取得の都度、異なるデータを生成するので、毎回まったく違うデータで動作確認を行うことができるため、特定のデータの場合にのみ発生するバグなどに気づくこともできる。

Fakerのインストール

FakerはComposerで簡単にインストールできる。動作確認用の環境にcomposerが入っていなかったので、まずcomposerをインストールする。

$ sudo apt-get update
$ sudo apt-get -y composer
$ composer --version
Composer 1.5.2 2017-09-11 16:59:25

Composerが入ったので、fakerをインストールする。

$ composer require fzaninotto/faker

利用準備

まずは簡単な例でfakerの使い方を確認する。composer installを実行したディレクトリにPHPファイルを作成し、以下のコードを記述する。

<?php

// インストールしたfakerのautoload.phpをrequireする
require_once 'vendor/fzaninotto/faker/src/autoload.php';

// フェイクデータを生成するジェネレータを作成
$faker = Faker\Factory::create('ja_JP');

// 日本人の氏名を10人分出力
for ($i = 0; $i < 10; $i++) {
  echo $faker->name . "\n";
}

実行すると、以下のように日本人の氏名が10人分出力される。

青山 治
渡辺 京助
三宅 加奈
渡辺 裕樹
小泉 治
佐藤 さゆり
笹田 幹
村山 さゆり
原田 零
木村 京助

下記のジェネレータ生成メソッドでは、’ja_JP’を指定しているが、これは生成するフェイクデータのローケル情報を表す。

$faker = Faker\Factory::create('ja_JP');

これを省略して下記のように定義し、上記コードを実行すると

$faker = Faker\Factory::create();
Lynn Bins
Mozelle Glover
Mikel Borer PhD
Dr. Joel Marvin
Aurelie Beahan
Pete Herzog
Janae Borer I
Toy Heidenreich
Prof. Tiara Shanahan DDS
Ivah Blanda V

のように、英語圏の人名が出力される。
日本語に対応しているフェイクデータは、氏名、住所などの一部のデータに限るが、以降ではja_JPを指定した状態で進める。

名前関連のフェイクデータ

氏名とフリガナは日本語でそれぞれ取得できる。本当に居そう。

// 氏名
echo $faker->name . "\n";

// 名字
echo $faker->lastName . "\n";

// 名前
echo $faker->firstName . "\n";

// 氏名(カナ)
echo $faker->kanaName . "\n";

// 名字(カナ)
echo $faker->lastKanaName . "\n";

// 名前(カナ)
echo $faker->firstKanaName . "\n";
斉藤 くみ子
山本
美加子
カノウ アスカ
カノウ
ナオト

個人情報関連のフェイクデータ

// メールアドレス
echo $faker->email . "\n";

// 電話番号
echo $faker->phoneNumber . "\n";

// 住所
echo $faker->address . "\n";

// 郵便番号
echo $faker->postcode . "\n";

// 都道府県
echo $faker->prefecture . "\n";

// 市町村
echo $faker->city . "\n";

// 番地など
echo $faker->streetAddress . "\n";

// 誕生日(20歳から80歳になるように)
echo $faker->dateTimeBetween('-80 years', '-20years')->format('Y-m-d') . "\n";
0410-021-281
7443156 奈良県村山市東区加納町木村10-1-5
1384890
岐阜県
山口市
井高町青山10-5-8
1942-07-21

Webサービスっぽいフェイクデータ

// UUID
echo $faker->uuid . "\n";

// ユーザ名
echo $faker->userName . "\n";

// パスワード(記号あり)
echo $faker->password . "\n";

// URL
echo $faker->url . "\n";

// IPアドレス(IPv4)
echo $faker->ipv4 . "\n";

// マックアドレス
echo $faker->macAddress . "\n";

// ユーザーエージェント
echo $faker->userAgent . "\n";
vagrant$ php qs.php
2e829943-718c-3cd8-a2fb-6614ab1139b1
kudo.kyosuke
DKVA_6K03S-=@|
http://tanabe.com/qui-asperiores-sequi-sit-voluptatem-sint-dolore-vero-assumenda.html
144.48.103.1
D8:0E:E5:B9:D4:22
Opera/9.42 (X11; Linux i686; sl-SI) Presto/2.11.249 Version/11.00

乱数系

この辺はfakerでなくても出来るけど、どうせならfaker1本で済ませたい。

// 一桁の乱数
echo $faker->randomDigit() . "\n";

// 100~200の整数
echo $faker->numberBetween(100, 200) . "\n";

// 小数2桁の0~100の実数
echo $faker->randomFloat(2, 0, 100) . "\n";

// a,b,c,dからいずれか一つ
echo $faker->randomElement(['a', 'b', 'c', 'd']) . "\n";

// a,b,c,dからいずれか二つ
var_dump($faker->randomElements(['a', 'b', 'c', 'd'], 2));

// 文字列をシャッフル
echo $faker->shuffle('abcdefghijklmnopqrstuvwxyz') . "\n";
4
178
43.38
b
array(2) {
[0]=>
string(1) "d"
[1]=>
string(1) "a"
}
nziajpludqogcyfkrmweshtbxv

文字列系

最初難しい英単語ばかりだなと思ったけど全部ラテン語だった。

// ラテン語1つ
echo $faker->word() . "\n";

// ラテン語3つ
var_dump($faker->words(3));

// 10単語で構成される文
echo $faker->sentence(10) . "\n";

// 文章
echo $faker->paragraph() . "\n";
voluptatem
array(3) {
[0]=>
string(10) "blanditiis"
[1]=>
string(8) "expedita"
[2]=>
string(10) "reiciendis"
}
Qui voluptatum doloribus ad mollitia laudantium nobis quia.
Debitis est soluta quibusdam harum facilis ut deleniti aperiam. Molestias repellendus occaecati ad cupiditate omnis voluptatum et beatae. Enim et fugit quae et explicabo iusto maxime. Molestiae enim maiores et sit ut occaecati.

備考

ここで紹介したのはFakerの機能の極一部。もっと知りたい方はfzaninotto/Faker: Faker is a PHP library that generates fake data for youを見よう

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です