LoginSignup
27
26

More than 5 years have passed since last update.

【Laravel】モデルファクトリをつかってテスト用データを一度にたくさん生成する

Posted at

Laravelのシーダーでテスト用のデータを作成するときに、それっぽいテスト用データを自動的に生成してくれるモデルファクトリが利用できます。
これで「ああああ太郎」とか「テストテストテストテストテスト」だらけのテストデータとおさらばできます。

前提

例えば topics というテーブルがあるとします。
構造はこんな感じ

テーブル名: topics

フィールド 中身
title 記事のタイトル
content 記事の内容

的なテーブルがあるとします。
Eloquent(モデル): Topic まで作成済みの前提。

シーダーの作成

$ php artisan make:seeder TopicsTableSeeder

database/seeds/TopicsTableSeeder.php
が作成されます

とりあえず、シーダーファイルはそのままにして、ファクトリをつくります。

モデルファクトリを作成

$ php artisan make:factory TopicFactory --model=Topic

database/factories/TopicFactory.php
が作成されます

ファクトリを記述

database/factories/TopicFactory.php
use Faker\Generator as Faker;

$factory->define(App\Topic::class, function (Faker $faker) {
    return [
        'title' => $faker->sentence(rand(1,4)), // 1〜4つの単語で文章
        'content' => $faker->realText(512), // 512文字の文章
    ];
});

titleには、1〜4の単語でできた文章
contentには、512文字のテキスト
と定義します。

Fakerについて

この定義内容は何かと言うと
Faker
というテスト用データを作成してくれるPHPライブラリの機能になります。

詳しくは
https://github.com/fzaninotto/Faker
こちらにあります。

よく使いそうなのは


$faker->word() // 単語
$faker->sentence(n) //単語数指定した文章
$faker->text($max) //$max文字数までの文章
$faker->name() //名前 (日本語)
$faker->realText() //文字数指定した文章 デフォルトは200(日本語)
$faker->phoneNumber() //電話番号(日本語)
$faker->address() //住所(日本語)
$fake->company() //会社名(日本語)

などなど、

日本語対応

Fakerは、そのままだと英語っぽい単語などがでてきちゃいますが、設定により日本語対応可能です。
config/app.phpに追記

config/app.php
'faker_locale' => env('APP_FAKER_LOCALE', 'ja_JP'),

.envに追記することで、環境ごとにわけたりもできます。

APP_FAKER_LOCALE=ja_JP

全部が日本語対応しているわけじゃないですが、上記で紹介した(日本語)と書いてある項目は対応していました。

シーダーの実行

というわけであとはシーダーの実行です。

database/seeds/TopicsTableSeeder.php
public function run()
{
    factory(App\Topic::class, 20)->create(); // 20件のデータを作成
}

20のところを変えれば何件でも作成可能です。

実行

$ php artisan db:seed --class=TopicsTableSeeder

以上で、簡単に大量のテスト用データを作成することができました。

名前とか、ほんとにそれっぽいのを生成してくれるので、手間が省略されて作業が捗ります。

関係ないけど、Seederってシーダーなのかシーダなのか迷いますね。

参考

https://readouble.com/laravel/5.5/ja/seeding.html
https://github.com/fzaninotto/Faker
https://qiita.com/kazuhei/items/5d33eedb9ebdd62e0bfb

27
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
26