Posted at

Faker@PHPでダミーデータを作る

More than 3 years have passed since last update.

ダミーデータを作らないといけないことはよくあります。Fakerを使ってダミーデータを作ってみます。


インストール

compoerを使う。

composer require fzaninotto/faker

何も指定しなければ、最新版が入る(2015/7/20現在では1.5)。

testディレクトリを作ってそこで作業する。

mkdir test

cd test
composer require fzaninotto/faker

そうするとvendorフォルダができるので、autoload.phpを読み込んで利用する。


生成してみる(素のPHP)

個人的に利用するものだと、こんな感じ。

<?php

require_once './vendor/autoload.php';

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

$gender = ['男','女'];

for($i=0; $i<10; $i++)
{
echo $faker->name."<br>";
echo $faker->address."<br>";
echo $faker->userName."<br>";
echo $faker->password."<br>";
echo $faker->email."<br>";
echo $faker->phoneNumber."<br>";
echo $faker->date($format='Y-m-d',$max='now')."<br>";
echo $faker->creditCardNumber."<br>";
echo $faker->randomElement($gender)."<br>";
echo $faker->regexify('[1-9]{3}-[0-9]{4}')."<br>";
echo "<hr>";
}

で、こんな出力。

山田 篤司

2179693 青森県山岸市東区原田町大垣7-2-1 コーポ中島102号
uno.taro
75D
uno.momoko@yahoo.co.jp
090-1186-9018
1975-09-03
5540806828245734

735-4103
----------
松本 七夏
2743930 鹿児島県鈴木市西区大垣町江古田7-10-6
akira69
Rv_~@)cdr!y!
qtanabe@nagisa.jp
080-8725-8522
2012-11-11
4707240418342598

115-3280


便利な点

通常のコマンドはもちろんですが、


  • randomElement(array)でこちらで用意した配列から生成可能。社内独自コードなどを利用する際に便利。

  • regexify('')で正規表現が使えるのでほぼ何でもあり。


気づいた点

先人様のお陰で大変便利なのですが、いくつか注意?も。


  • addressは頭に郵便番号?が入るので、住所だけ欲しい場合はスペースでsplitとかする必要がある。

  • 誕生日などを得たい場合、date()を使いたいがunixtimeより前の年は得られない?みたい。

  • 当然ですが、氏名とIDとかemailとかが一致するわけではない(名前 山田太郎、email suzuki@yahoo.co.jpとか)。

まあ、randomや正規表現(regexify())が使えるのでおこのみでなんとでもなりますが。


Laravelの中で使う

laravelにはFakerがはじめから組み込まれています。なので、Seederの中で使うことでダミーデータが簡単につくれます。Seederの使い方はlaravelのドキュメントをどうぞ。5.1からartisanでseederのテンプレートも作れるようになったみたいです。

こんな感じ。

<?php

use Illuminate\Database\Seeder;
use App\User;

class UserTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/

public function run()
{
//一旦削除
DB::table('users')->delete();

//faker使う。普通に使う場合と同じ。
$faker = Faker\Factory::create('ja_JP');

for($i=0; $i<10; $i++)
{
User::create([
'username'=>$faker->userName(),
'password'=>$faker->password(),
]);
}
}
}


その他

他に使えそうなプロバイダ(コマンド)としては、


文字系


  • sentence($nbWords = 3)。

  • paragraph($nbSentences = 3)。

  • text($maxNbChars = 100)。


バーコード系


  • ean13

  • isbn13

など。

残念ながら日本語には対応していないようですが、テキストエリアを埋めるには何もないよりいいです。

その他、数多くのプロバイダがありますので、是非本家サイトを確認してみてください。