3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Laravel】Laravel6でテストデータを作成する方法

Last updated at Posted at 2024-05-19

エンジニア初心者の投稿であるため、間違っている箇所が多くあるかと思います。
間違っているなどあればご教授いただけると幸いです。

はじめに

私は仕事において初めてlaravelの機能である、Factoryというものを使用してテストデータを作成しました。最新バージョンのLaravelを使った解説が多く、指定のバージョン6についてまとめられているものが少なかったです(検索力不足かもしれませんが...)。そこで今回は色々ハマりながらも、作成できたので、記録として残したいと思います。

Factoryとはなんぞや

laravelの標準機能であるFactoryは一言でいうと、DBに対して大量のテストデータ(レコード)を作りたい時に使う機能です。

例えば...

名前  年齢 電話番号 メールアドレス
キー太郎 5 090-0123-4567 aaaaa@example.com
... ... .... ....
キー子 5 070-0123-4567 bbbb@example.com

このようなリレーションデータベースがあったときにテーブルに対して、レコード数を増やした時にどのような挙動になるかを知っておく必要があります。増やすといっても1〜何十ではなく、何百、何千単位で作成しないと作成してもテストデータとして意味がないです。全て手打ちしてもいいですが、あまりにも効率が悪すぎる。その時に活躍してくれるのがFactoryという機能です。

実例

実際にFactoryが利用できるまでの流れを説明します。すでにLaravel6を利用していることを前提で話を進めます。また、Factoryの説明以外は省かせていただきますので、ご了承ください。

Laravelのバージョン

Laravel 6.*(今回テストデータを入れるテーブル名: UserList)

⓪必要ファイルを作成する

  • Modelファイル
    Modelについて理解ができていな人はこちらの記事をみてください。

terminal
php artisan make:model User

artisanコマンドで作成されたものは以下のディレクトリ内にあります。
/src/app/User.php


  • Seederファイル
    Seederについて理解ができていな人はこちらの記事をみてください。

terminal
php artisan make:seeder UsersSeeder

artisanコマンドで作成されたものは以下のディレクトリ内にあります。
src/database/seeds/UserSeeder.php


  • Factoryファイル
    Modelファイル、Seederファイルと同様にFactory用のコマンドが用意されているので作成します。
terminal
php artisan make:factory UserFactory

artisanコマンドで作成されたものは以下のディレクトリ内にあります。
src/database/factories/UserFactory.php

①Modelファイルでの設定

初期状態のModelファイルは以下のようになっています。

User.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    //
}

Modelをテーブルと対応させる(今回はUserListテーブル)必要があるので以下を編集します。

User.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    // ここに対応させるテーブル名記載する
    protected $table = 'UserList';
}

②Seederファイルでの設定

初期状態のSeederファイルは以下のようになっています。

UserSeeder.php
<?php

use Illuminate\Database\Seeder;

class UserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
    }
}

run()の中にはfactory()を利用して、factoryを使用することを明示する必要があります。

UserSeeder.php
<?php

use Illuminate\Database\Seeder;

class UserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //第一引数に対応させるModel名を記載する
        //第二引数はテストデータの個数を指定(今回は1000件のレコードを作成してくれる)
        factory(App\User::class, 1000)->create();
    }
}

③Factoryファイルでの設定

Facctoryファイルでは新たにFakerというクラスが出てきます。まずはFakerについて見ていきたいと思います。

Fakerとは

Fakerとはテストデータを作ってくれる優れものです。Fakerの説明も外部の記事が非常にわかりやすくまとめられているのでこちらをご覧ください。


初期状態のFactoryファイルは以下のようになっています。

UserSeeder.php
<?php

/** @var \Illuminate\Database\Eloquent\Factory $factory */

use App\Model;
use Faker\Generator as Faker;

$factory->define(Model::class, function (Faker $faker) {
    return [
        //
    ];
});

$fakerの後に続くアロー演算子(->)には特定のメソッドを記載する必要があります。
記載する内容をきれいにまとめてくれている記事があるのでこちらをご覧下さい。

UserSeeder.php
<?php

/** @var \Illuminate\Database\Eloquent\Factory $factory */

//自分が設定したModelの名前に変更
use App\User;
use Faker\Generator as Faker;

//第一引数は自分が設定したModelの名前に変更
$factory->define(User::class, function (Faker $faker) {
    return [
        //UserListテーブルの項目とそれぞれの項目へのテストデータの設定を記入
        'name' => $faker->unique()->name(),
        'age' => $faker->unique()->numberBetween(0, 100),
        'tel_num' => $faker->unique()->phoneNumber(),
        'mail' => $faker->unique()->email(),
    ];
});

実行

ここまで設定ができたらあとは実行するだけです。

terminal
//ロードして
composer dump-autoload

//キャッシュを消して
php artisan config:cache
php artisan config:clear

//seederを実行
php artisan db:seed

サンプルデータが1000件作成されていれているはずです。

おわりに

Laravelにはいくつもバージョンがあり、バージョンによってはソースコードの記入方法が違います。今回はバージョン6のときの書き方です。現在(2024/5/19)はLaravel9が登場しており、Factoryのコードの書き方も違ってきます。Laravel6を使用している方で、参考にしていただければ幸いです。また、初学者のため、間違えた書き方をしている可能性があります。「もっとこんな書き方があるよ」という方がいればご教授いただければと思います。

参考文献

3
4
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
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?