LoginSignup
76
84

More than 5 years have passed since last update.

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

Posted at

ダミーデータを作らないといけないことはよくあります。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

など。
残念ながら日本語には対応していないようですが、テキストエリアを埋めるには何もないよりいいです。
その他、数多くのプロバイダがありますので、是非本家サイトを確認してみてください。

76
84
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
76
84