Laravelの標準ライブラリであるfactoryとphpのライブラリの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()->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 {
all: [
App\Models\Article {
id: 1,
title: "宇野 淳",
thumbnail: "https://via.placeholder.com/640x480.png/00dd33?text=ea",
content: "その実験じっけんかくひょうはみんなし)とおってしましょうはたがたがいながら、",
is_public: 0,
},
]
以上で下準備は終了になります。
よく使うfakerメソッド一覧
個人情報【名前】
fake()->name(),
fake()->lastName(),
fake()->firstName(),
fake()->kanaName(),
fake()->lastKanaName(),
fake()->firstKanaName(),
fake()->userName(),
個人情報【住所】
fake()->address()
fake()->postcode(),
fake()->postcode1()
fake()->postcode2(),
fake()->prefecture(),
fake()->city(),
fake()->streetAddress(),
fake()->secondaryAddress(),
個人情報【その他】
関数関数
fake()->unique()->safeEmail(),
fake()->phoneNumber(),
fake()->company(),
日付
fake()->dateTime(),
fake()->dateTime()->format('Y年m月d日 H時i分s秒'),
fake()->date(),
fake()->date('Y年m月d日'),
fake()->time(),
fake()->time('H時i分s秒'),
fake()->dateTimeBetween('-1 year', '+1 year'),
fake()->dateTimeBetween('-1 year', '+1 year')->format('Y年m月d日 H時i分s秒'),
文章
fake()->realText(10),
fake()->sentence(8),
fake()->paragraph(10),
数字
fake()->randomNumber(),
fake()->randomNumber(8, true),
fake()->numberBetween(10, 20),
fake()->randomFloat(),
fake()->randomFloat(2),
fake()->randomFloat(2, 10, 20),
その他
fake()->url()
fake()->imageUrl(),
fake()->randomElement(['a', 'b', 'c', 'd']),
おわりに
factoryとfakerはどの案件でも使うと思いますので、早めに理解を深めたい要素の1つです。
他にもまだまだ便利なfakerメソッドがたくさんあると思いますので、良いなと思うメソッドがありましたら、都度更新していこうと思います。
ロジカルスタジオではエンジニアを募集しています。
興味を持っていただけたら、是非採用サイトからご応募ください!