メシのタネ

メシのタネになる、Laravelや設計思想の技術配信サイト


Faker活用ライトガイド – “それっぽい” ダミーデータを 5 秒で錬成する


  1. Laravel
  2. Faker活用ライトガイド – “それっぽい” ダミーデータを 5 秒で錬成する

「Seeder は書けるけど名前が全部 John Smith なのがダサい」──そんなあなたに贈る Faker 徹底(だけどライト)講座。

Laravel 付属の Faker (fakerphp/faker) を 入れっぱなし状態 から カスタム職人 へ格上げするまでを 1 ページで。

👉️ Eloquent総合は Laravel Eloquent 超攻略ロードマップ — Active Record とリレーション沼を一気に突破

fakerのインストールは済んでるか?

composer require fakerphp/faker --dev

👉️ ぶっちゃけ9以降は最初から入ってます

fakerのロケールを変えて世界旅行

$faker = \Faker\Factory::create('fr_FR'); // フランス風
$fakerJP = \Faker\Factory::create('ja_JP');
  • ja_JP: 住所は「名古屋市中区橘….」形式、電話は 080-xxxx-xxxx。
  • en_US: デフォルト (ダサい)。

💡 : Factory クラス内でも $this->faker->locale(‘ja_JP’) で切替可。(バージョンが古いとできないかも)

fakerの標準プロバイダ逆引きカタログ

カテゴリメソッド例出力例
名前name() / firstName() / lastName()田中 賢二
住所postcode() / prefecture()(ja_JP拡張)100‑0001 / 東京都
ネットsafeEmail() / ipv4() / url()mike@example.com
文章sentence() / paragraph() / text(200)(いい感じの Lorem)
日付date('Y-m-d') / dateTimeBetween('-1 year','now')2024-09-17
数値numberBetween(1,100) / randomFloat(2,0,999.99)42 / 123.45
たねまる

example.comは、実在してはいけないとされて決め打ちされたドメインなので、安全に利用できるよ〜〜

fakerで日本語住所・電話番号のリアリティを盛る方法

$faker = Factory::create('ja_JP');
$title  = $faker->prefecture() . $faker->city() . $faker->streetAddress();
  • 文字数が長すぎる場合は mb_substr() でトリム。
  • 郵便番号 + 住所をまとめるとダッシュボードのサンプルが映える。

Custom Provider で独自ダミー – 業界用語も OK

class MedicalProvider extends \Faker\Provider\Base
{
    protected static $diseases = ['インフルエンザ','糖尿病','高血圧'];

    public function disease(): string
    {
        return static::randomElement(self::$diseases);
    }
}
$faker->addProvider(new MedicalProvider($faker));
$faker->disease(); // => "高血圧"

業務システム特有データ(顧客コード・病名・品番)を作るなら custom provider 一択。

unique(), optional(), randomElement() の使い分け

$email = $faker->unique()->safeEmail();          // 重複させたくない
$status = $faker->optional()->randomElement(['draft','published']);
  • unique()limit 超えると例外→テストが死ぬ。unique(false) で解除。
  • optional(0.3) で 30% だけ値を null にする小技も便利。

シード値固定でテストを再現可能に

$faker = Factory::create();
$faker->seed(12345); // 何度やっても同じ順番

CI でたまに落ちるテストを撲滅する裏技。シード値を環境変数にすると便利。

よくある落とし穴と対策

事故現象解決策
unique() が枯渇50 件しか作れないのに 100 件要求unique(false) or データ件数減らす
ja_JP の住所が長いUI が崩れるmb_strimwidth() でカット
ロケールごちゃ混ぜ氏名は日本語なのに email が john@example.comロケールを1箇所で生成して DI する

まとめ – Fakerは味変用スパイスだ

  • ロケール切替で 国籍ロンダリング 可能
  • Custom Provider で 業界特有のダミーデータ も作れる
  • uniqueseed()テストの再現性 を確保

本記事のテストコードはこちら
👉️ https://github.com/wasipo/syugyou/blob/main/tests/Unit/faker-guide-2025.php


コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください