BLOG

ブログ

2025/07/14 プログラミング

【Laravel】Factory&Fakerで日本語のダミーデータを登録する

この記事を書いた人 T.S

はじめに

Laravelには、ダミーデータをDBに登録するためのFactoryと、ダミーテキストを作成するためのFakerが標準で搭載されています!
今回は、「日本語のダミーデータをDBに登録する方法」をご紹介します!また、リレーション込みでのデータの作り方についても軽く触れていきます。

検証環境は以下の通りです。

  • Laravel:11.34.1
  • PHP:8.3.14
  • MySQL:8.4.0

ダミーデータ作成までの流れ

例として、Shops(店)テーブル・モデルが既に存在する前提で、このテーブルに対してダミーデータを登録する手順を解説します!

①ファクトリ(Factory)ファイルを用意する

ファクトリには、「どのテーブル(モデル)に対して」「どのようなデータを生成するか」を定義します。
以下のArtisanコマンドで、database/factoriesディレクトリ内に新しいファクトリファイルが作成されます。オプションをつけることで、関連ファイルを同時に作成することもできます。

// ファクトリのみを作成
$ php artisan make:factory ShopFactory

// ファクトリ + モデルを同時に作成
$ php artisan make:model Shop --factory

// ファクトリ + マイグレーション + モデル + シーダーを同時に作成
$ php artisan make:model Shop -mfs

次に、作成されたファクトリファイルを編集し、「対応するモデル」と「生成するダミーデータの内容」を記述します。
Fakerで用意できるダミーテキストの種類はとても豊富で、実際のアプリケーションでよく使うフィールドを簡単に生成できます! name()(名前)やemail()(メールアドレス)、text()(文章)、emoji()(絵文字😊)、bloodType() (血液型)などなど…。その他の関数は、Faker公式サイトのFormattersタブからチェックしてみてください!

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

class ShopFactory extends Factory
{
    // 対応するモデルを指定
    // クラスの名前が 「モデル名 + Factory」 の形式であれば省略可能
    protected $model = Shop::class;

    // 生成するダミーデータの内容を定義
    public function definition(): array
    {
        return [
            'shop_name' => $this->faker->company,               // 店名
            'shop_address' => $this->faker->address(),          // 住所
            'shop_phone_number' => $this->faker->phoneNumber(), // 電話番号
        ];
    }
}

②ファクトリとモデルを紐づける

①で作成したファクトリを有効にするために、対象のモデルに HasFactory トレイトを追加します(ちなみにArtisanコマンドでモデルを作成した場合は、デフォルトでHasFactoryがついているので、この工程はスキップ可能です)
以下のようにモデルファイルを編集します。

use Illuminate\Database\Eloquent\Factories\HasFactory;

class Shop extends Model
{
    use HasFactory; // 追加

③Fakerの設定を日本語にする

Fakerで生成されるダミーデータを日本語にするために、ja_JP を指定します。Laravelのバージョンによって指定方法が異なるので注意してください⚠️
ここでja_JP を指定することで、name()(名前)や address()(住所)、phoneNumber()(電話番号)などが、日本向けの形式で生成されるようになります!実際にどんなデータがどんな仕組みで生成されるか気になった方は、vendor/fakerphp/faker/src/Faker/Provider/ja_JP フォルダ配下のPHPファイルから中身を確認できるのでぜひ〜🔍

  • Laravel 10.x以前

config/app.php を直接書き換えます。

'faker_locale' => 'en_US',
// ↓ 変更
'faker_locale' => 'ja_JP',
  • Laravel 11.x 以降

.env ファイルを書き換えます(APP_FAKER_LOCALEが使用されます)

APP_FAKER_LOCALE=en_US
# ↓ 変更
APP_FAKER_LOCALE=ja_JP

④シーダーを実行 → データ登録!

①で作成したファクトリファイルを元にダミーデータを作ります。
ここではシーダーを用いる方法をご紹介します。シーダーは以下のコマンドで作成できます。

$ php artisan make:seeder ShopSeeder

作成されたシーダーに対し、①で作成したファクトリの呼び出しを記述します。

use Illuminate\Database\Seeder;
use App\Models\Shop;

class ShopSeeder extends Seeder
{
    public function run(): void
    {
        Shop::factory()->count(5)->create(); // 店データを5件作成
    }
}

最後に、以下のコマンドでシーダーを呼び出して、ダミーデータの作成完了です!

$ php artisan db:seed —class=ShopSeeder

リレーション込みのダミーデータを作る方法

ファクトリを使って、リレーションをもつ関連データをまとめて一括生成する方法をご紹介します!今回は、以下のような「親・子・孫」の関係を持つリレーションを例にします🛒

  • 親要素:店(shops
  • 子要素:商品(items
  • 孫要素:レビュー(reviews
  • 関係性:
    • 1つの店が複数の商品を持つ(1対多)
    • 1つの商品が複数のレビューを持つ(1対多)

①子要素(Item)のファクトリ設定

shop_id カラムで、親要素のShop モデルと紐づけます。

public function definition(): array
{
   return [
        'shop_id' => Shop::factory(), // Shopと紐付け
        'item_name' => $this->faker->word,
    ];
}

②孫要素(Review)のファクトリ設定

item_id カラムで、子要素のItemモデルと紐づけます。

public function definition()
{
    return [
        'item_id' => Item::factory(), // Itemと紐付け
        'comment' => $this->faker->realText(50),
    ];
}

③親要素のシーダーを調整

親要素( Shop )のシーダーでhas() メソッドを使って指定するだけで、子・孫要素のデータも一気に生成できます!以下の場合だと、「5店舗 × 各5商品 × 各商品に3レビュー」の構造がまとめて生成されます。
has() は、リレーション先のデータを一緒に作るためのメソッドです✨ 詳しくは公式ドキュメント(Eloquent ファクトリ – リレーションのファクトリ)も参考にしてみてください。

use Illuminate\Database\Seeder;
use App\Models\Shop;
use App\Models\Item;
use App\Models\Review;

class ShopSeeder extends Seeder
{
    public function run(): void
    {
        Shop::factory()
            ->count(5) // 5つの店を生成
            ->has(
                Item::factory()
                    ->count(5) // 各店に5個の商品
                    ->has(Review::factory()->count(3)) // 各商品に3件のレビュー
            )
            ->create();
    }
}

終わりに

今回は、Laravelで日本語のダミーデータを登録する方法をご紹介しました。
FactoryとFakerを活用すれば、テストや開発用のデータを簡単に生成できてとても便利です!さらに日本語の指定をしておくと、より実際の画面に近い・馴染みのあるデータとなるため、確認作業もしやすくなると思います👍
開発中のちょっとした確認や、リレーション構造のテストにも役立つので、ぜひ活用してみてください〜!


株式会社ウイングドアは福岡のシステム開発会社です。
現在、私達と一緒に"楽しく仕事が出来る仲間"として、新卒・中途採用を絶賛募集しています!
ウイングドアの仲間達となら楽しく仕事できるかも?と興味をもった方、
お気軽にお問い合わせ下さい!

アーカイブ