「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 で 業界特有のダミーデータ も作れる
unique
とseed()
で テストの再現性 を確保
本記事のテストコードはこちら
👉️ https://github.com/wasipo/syugyou/blob/main/tests/Unit/faker-guide-2025.php
コメントを残す