【Laravel】ダミーデータ作成(factory)でよく使うfaker一⁠覧

はじめまして!
今年4月に中途入社したゆっきーです。
よろしくお願いいたします!

バックエンド
エンジニア

ゆっきー

Laravelの標準ライブラリであるfactoryとphpのライブラリのfakerを使用すれば、大量の異なる内容のダミーデータを簡単に作成することができます。
fakerのメソッドは大量にあるのですが、個人的によく使うものを紹介します!

ダミーデータ作成の準備

まずはダミーデータを作成するための環境を作ります。
よく使うfakerメソッド一覧のみ見たいという方はこちらをクリックしてください。

記事のダミーデータを作成するという前提で進めていきます。

ダミーデータを日本語化するための「config\app.php」ファイルの言語設定を英語から日本語へ変更をします。

'faker_locale' => env('APP_FAKER_LOCALE', 'ja_JP'),

キャッシュのクリアをします。

php artisan cache:clear
php artisan config:clear

記事モデルを作成して、記事モデル専用のマイグレーションファイルとfactoryファイルを作成します。

php artisan make:model Article --migration --factory

上記コマンドを実行することで、下記ファイルが作成されます。
/Models/Article.php
/database/migrations/生成された日付_create_articles_table.php
/database/factories/ArticleFactory.php

「Article.php」ファイルでデータベースにデータ登録、更新を許可するカラムを指定します。

class Article extends Model
{
	use HasFactory;

	protected $fillable = [
		'title',
		'thumbnail',
		'content',
		'is_public',
	];
}

「生成された日付_create_articles_table.php」ファイルでデータベースに登録するカラムを指定します。

public function up(): void
{
	Schema::create('articles', function (Blueprint $table) {
		$table->id();
		$table->string('title'); 
		$table->string('thumbnail');
		$table->text('content');
		$table->boolean('is_public');
		$table->timestamps();
	});
}

「ArticleFactory.php」ファイルでダミーデータを定義します。

public function definition(): array
{
	return [
		'title' => fake()->name(),
		'thumbnail' => fake()->imageUrl(),
		'content' => fake()->realText(250),
		'is_public' => fake()->numberBetween(0, 1),
	];
}

「/database/seeders/DatabaseSeeder.php」ファイルでダミーデータが登録されるようにします。

public function run(): void
{
	// User::factory(10)->create();

	User::factory()->create([
		'name' => 'Test User',
		'email' => 'test@example.com',
	]);
	\App\Models\Article::factory(20)->create();
}

下記コマンドを実行して、データベースとダミーデータの作成を行います。

php artisan migrate:fresh --seed

phpMyAdminで添付画像のようになっていることが確認できます。

phpMyAdminを使用できない方は、laravelのtinkerでも確認することができます。

php artisan tinker
> \App\Models\Article::all();

上記を実行すると下記のデータが閲覧できます。

= Illuminate\Database\Eloquent\Collection {#6066
all: [
	App\Models\Article {#6068
	id: 1,
	title: "宇野 淳",
	thumbnail: "https://via.placeholder.com/640x480.png/00dd33?text=ea",
	content: "その実験じっけんかくひょうはみんなし)とおってしましょうはたがたがいながら、",
	is_public: 0,
	},
]

以上で下準備は終了になります。

よく使うfakerメソッド一覧

個人情報【名前】

fake()->name(),
// フルネーム(漢字) 例:田中 一郎
// 引数にmale若しくはfemaleを渡すと、男女を選択することできる
fake()->lastName(),
// 名(漢字) 例:田中
fake()->firstName(),
// 姓(漢字) 例:一郎
// 引数にmale若しくはfemaleを渡すと、男女を選択することできる
fake()->kanaName(),
// フルネーム(カタカナ) 例:タナカ イチロウ
// 引数にmale若しくはfemaleを渡すと、男女を選択することできる
fake()->lastKanaName(),
// 名(カタカナ) 例:タナカ
fake()->firstKanaName(),
// 名(カタカナ) 例:イチロウ
// 引数にmale若しくはfemaleを渡すと、男女を選択することできる
fake()->userName(),
// ユーザーネーム 例:tanaka.ichiro

個人情報【住所】

fake()->address()
// 住所 例:6284950 三重県松本市西区佐々木町坂本5-7-3 ハイツ原田101号
fake()->postcode(),
// 郵便番号 例:6284950
fake()->postcode1()
// 郵便番号1 例:628
fake()->postcode2(),
// 郵便番号1 例:4950
fake()->prefecture(),
// 都道府県 例:三重県
fake()->city(),
// 市 例:松本市
fake()->streetAddress(),
// 市以降 例:西区佐々木町坂本5-7-3
fake()->secondaryAddress(),
// 建物 例:ハイツ原田101号

個人情報【その他】

関数関数

fake()->unique()->safeEmail(),
// 重複しない(unique関数)メールアドレス 例:zmiyake@example.com
fake()->phoneNumber(),
// 電話番号 例:09-8538-7302
fake()->company(),
// 会社名 例:株式会社 松本

日付

fake()->dateTime(), 
// 日時 例:2012-01-07 03:02:59
fake()->dateTime()->format('Y年m月d日 H時i分s秒'),
// フォーマット指定 例:2012年01月07日 03時02分59秒
fake()->date(),
// 日付 例:2012-01-07
fake()->date('Y年m月d日'),
// フォーマット指定 例:2012年01月07日
fake()->time(),
// 時間 例:03:02:59
fake()->time('H時i分s秒'),
// フォーマット指定 例:03時02分59秒
fake()->dateTimeBetween('-1 year', '+1 year'),
// 日時範囲指定(1年前後) 例:2025-05-29 03:17:28
fake()->dateTimeBetween('-1 year', '+1 year')->format('Y年m月d日 H時i分s秒'),
// フォーマット指定 例:2025年05月29日 03時17分28秒

文章

fake()->realText(10),
// 日本語対応の文章 引数は文字数で省略可能
fake()->sentence(8),
// 英語の文章(タイトル) 引数は文字数で省略可能
fake()->paragraph(10),
// 英語の文章(本文) 引数は文章数で省略可能

数字

fake()->randomNumber(),
// 数字 例:989076654、7、129543など
fake()->randomNumber(8, true),
// 数字(9桁までの桁数指定) 例:82916041、21720805など
fake()->numberBetween(10, 20),
// 数字(範囲指定) 例:10、16など

fake()->randomFloat(),
// 数字(小数点) 例:896.71099438
fake()->randomFloat(2),
// 数字(小数点の桁数指定) 例:5.86、91879735.38など
fake()->randomFloat(2, 10, 20),
// 数字(小数点の桁数指定(2桁)/整数の範囲指定(10~20))
// 例:14.43、17.56など

その他

fake()->url()
// URL 例:http://wakamatsu.org/
fake()->imageUrl(),
// 画像URL 例:https://via.placeholder.com/640x480.png/006644?text=sit
fake()->randomElement(['a', 'b', 'c', 'd']),
// 配列からランダムに取得する 例:a

おわりに

factoryとfakerはどの案件でも使うと思いますので、早めに理解を深めたい要素の1つです。
他にもまだまだ便利なfakerメソッドがたくさんあると思いますので、良いなと思うメソッドがありましたら、都度更新していこうと思います。

ロジカルスタジオではエンジニアを募集しています。

記事を読んで興味を持った方はぜひコチラから↓