Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
82
Help us understand the problem. What is going on with this article?
@zaburo

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

More than 5 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

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

82
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
zaburo
こんにちは。自分用のメモをだらだら公開しています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
82
Help us understand the problem. What is going on with this article?