Laravel FactoryとSeederでテスト用ダミーデータを手軽に作る方法

Laravelバージョンアップ・ニュース

Laravel8からはFactoryとSeederを使って、ダミーデータを手軽に作れます。

普通の作り方と、リレーションが入った場合の応用編の作り方を紹介します。

本当に簡単で、びっくりします。

Laravel7との違いも最後にお伝えしますね。

Laravel8 FactoryとSeederでダミーデータを作る方法 基本編

まずはユーザーモデルを使った基本の作り方を紹介します。

① 日本語のダミーデータを作る設定にする

日本人の名前のダミーデータを作りたい場合は、最初にapp/config のapp.phpファイルの設定を変更しておきましょう。

109行目あたりの ‘faker_locale’ を ‘ja_JP’ としておきます。

なお 【locale】は ‘ja’ としますが、【faker_locale】はなぜか’ja_JP’ としないとダメみたいなので、注意してください^^;

②Seederファイルを編集する

次にdatabase/seeders のDatabaseSeeder.phpファイルを開きます。

デフォルトで下記のように入っています。

ユーザーモデルを10個作る、という意味ですが、とりあえずこれでOKとします。

③ Seedコマンドを実行

下記のコマンドを実行します。

これで完了です。

データベースには日本名のダミーデータが10個作られています。

なんだか、本当にありそうな名前ばかりですね^^;

Laravel8 FactoryとSeederでダミーデータを作る方法 応用編

次に応用編を解説します。

リレーションがあるときや、ダミーデータの型を指定したいときには、ファクトリーファイルを編集していきましょう。

①ファクトリーファイルを作成する

php artisan make:factory を実行します。

ファクトリーの名前はお好きなものにしてください。

最後にモデル名も入れておくと、あらかじめモデル名が設定されているので便利です。

② ダミーデータ用にカラム情報を登録する

①を実行すると、database/factories の中にできたファクトリーファイルができます。

ファイルの中に、ダミーデータを作るカラム情報を登録しましょう。

たとえば件名と投稿という3つのカラムであれば、次のようにします。

ポイント

・絶対入れなければいけない値を設定している場合は、その値をいれておきましょう。

・idやtimestumpは自動で入るので、入れなくても大丈夫です。

ダミーデータのデータタイプ

faker->の後は、入れたいデータの種類によって変えてください。

次の表によく使うデータタイプをまとめたので、参考にしてください。

【fakerが作成するデータタイプ】

データ
タイプ
faker
データ型
作成される
ダミーデータ例
人の名前 nameAdeline Rippin
住所 address Rippin
34688 Kim Glens
New Linnie, MI 66103
文書 textEt occaecati aut assumenda a. Et consequatur volup…
文字数指定文書 text($maxNbChars = 100)
ランダムな1桁数字 randomDigit6
範囲指定数字 numberBetween($min=100, $max=1000)136
電話番号 phoneNumber(747) 693-2704 x645
メールアドレス emaillibby71@gmail.com

文字数制限

入れるデータに文字数制限をつけるには、カッコで文字数をいれます。

belongsToリレーション

リレーションを付けたデータを入れることも可能。

たとえば user_id カラムのデータを入れる場合、ファイルの先頭にモデル名を指定しておきます。

カラム情報は User::factory()とします。

③ Seederを作成する

database/seeders の中のDatabaseSeeder.phpファイルを開きます。

デフォルトでユーザーモデルのダミーデータを10個作る設定が入っています。

作成するモデルとダミーデータ数に合わせて、public function run() の後を変更します。

たとえばInquiryモデルのダミーデータを5個作るなら、下記のようになります。

④ seedコマンドを入力

下記コマンドを実行すれば、ダミーデータ作成完了です。

こんな感じの日本人名と件名、投稿内容入りデータが入りました。

ちょこっと追記 Laravel7までの機能との比較

Laravel8より前から、このFactory機能とSeeder機能はありました。

ただ、もう少し面倒だったのです。

Laravel8では、デフォルトでモデルファイルにHasFactoryが設定されています。

このため、今回の記事の前半でご紹介したように、ほとんど何もせずに最初からダミーデータを実行できてしまいます。

またSeederファイルにいれるコードも、Laravel8は分かりやすくなっています。

【Laravel8】\App\Models\User::factory(3)->create();
【Laravel7】$users = factory(App\User::class, 3)>create();

なおLaravel8で以前のファクトリー機能を使いたい場合には、laravel/legacy-factoriesパッケージを使う必要があります。

さいごに

Laravelの基本的な使い方、他にも色々ご紹介しています。

下記から、他の記事もチェックしてみてくださいね♪

Laravelバージョンアップ・ニュース Laravel入門講座

【Laravelの教科書・プレゼント】

Junko
Laravelの使い方を覚えたい!と思ったら、ぜひ、役立ててほしいです。 基礎編は無料でプレゼント中です♪
ひつじプログラマ
会員制サイトをいちから作っていくよ。ボタンをクリックして詳細を見てね。
Laravelの教科書の詳細を見る

最新のLaravel10版テキストに加え、Laravel8版・Laravel9版もご用意しています♪

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中! 会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

最新のLaravel10版テキストに加え、Laravel8版・Laravel9版もご用意しています♪

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravel10対応

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。

書籍の詳細を見てみる

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravel10対応

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。

書籍の詳細を見てみる


Laravelの教科書限定コミュニティ【Laravelの教科書ラボ】はじめました。
セミナーで、StripeやChatGPT連携、デバックなど実践スキルを分かりやすく学べます。

ラボの案内を見てみる

Twitter始めました。
40代からプログラミング!
タイトルとURLをコピーしました