ダミーデータを作らないといけないことはよくあります。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
など。
残念ながら日本語には対応していないようですが、テキストエリアを埋めるには何もないよりいいです。
その他、数多くのプロバイダがありますので、是非本家サイトを確認してみてください。