Tech Starlog

Laravel Factory

投稿日:2026/01/22

LaravelのFactoryは、テストや開発時に使用するダミーデータを簡単に生成できる仕組みです。
本記事では、Factoryの基本を解説します。


前提条件

  • Laravelプロジェクト作成済み(Laravel8以上)
  • Eloquentモデルが存在する

Factoryとは?

Factoryは、モデルのダミーデータを自動生成する仕組みです。

できること

  • ✅ テストデータ作成
  • ✅ 手動データ投入の削減

Factoryを使わない場合

Task::create([
    'title' => 'テストタスク',
    'description' => '本文',
]);

毎回データを書く必要があります。

Factoryを使う場合

Task::factory()->create();

ダミーデータが自動生成できます。


Factoryの作成方法

① Factoryファイル作成

php artisan make:factory TaskFactory --model=Task

作成されるファイル:

database/factories/TaskFactory.php

② Factoryファイルの編集

<?php

namespace Database\Factories;

use App\Models\Task;
use Illuminate\Database\Eloquent\Factories\Factory;

/**
 * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Task>
 */
class TaskFactory extends Factory
{
    protected $model = Task::class;

    /**
     * Define the model's default state.
     *
     * @return array<string, mixed>
     */
    public function definition(): array
    {
        return [
            'title' => fake()->sentence(),
            'description' => fake()->paragraph(),
            'is_completed' => false,
        ];
    }
}

Laravelは内部でFakerを使い、ランダムなデータを生成します。

③ Modelの修正

Laravel8以降のFactoryは、モデルにHasFactoryを設定しないと使えません。

修正前

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Task extends Model
{
    protected $fillable = [
        'title',
        'description',
        'is_completed',
    ];
}

修正後

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Task extends Model
{
    use HasFactory;

    protected $fillable = [
        'title',
        'description',
        'is_completed',
    ];
}

Factoryの実行テスト

今回はSeederから実行します。

① Seeder作成

php artisan make:seeder TaskSeeder

② Seeder編集

今回はテストデータを10件登録します。

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\Task;

class TaskSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        Task::factory()->count(10)->create();
    }
}

③ Seeder実行

php artisan db:seed --class=TaskSeeder

④ 登録結果の確認

DBに10件データが登録されていればOK

↓登録された1件をサンプルで記載

mysql> select * from tasks where id = 2\G;
*************************** 1. row ***************************
          id: 2
       title: Facilis et voluptatum eaque a itaque sed dolores culpa.
 description: Cum qui nisi libero laudantium enim quasi occaecati. Doloremque nemo reiciendis debitis repellendus ipsum est.
is_completed: 0
  created_at: 2026-01-22 22:06:12
  updated_at: 2026-01-22 22:06:12
1 row in set (0.02 sec)

Factoryの基本的な使い方

1件作成

Task::factory()->create();

複数件作成

Task::factory()->count(5)->create();

配列だけ取得(DB保存しない)

$data = Task::factory()->make()->toArray();

Seederとの違い・使い分け

項目 Factory Seeder
目的 テスト・開発 初期データ
データ ランダム 固定
実行頻度
環境 ローカル / CI 本番

⚠️ 注意点

  • ❌ 本番DBでFactoryを実行しない
  • ✅ fakerのランダム性によるテスト不安定対策
  • ✅ 件数が多い場合はパフォーマンス注意