簡単!Laravelで日本語の仮データをDBに自動生成(factoryとseeder)

更新日:

Laravelで投稿サイトを作ったんだけど、仮ユーザーや仮投稿を大量に作ってテストしたいんだ。でも、手動で何十人分もの仮データを作るのって面倒だよね?もっと楽な方法ないの?

 

ありますよ、お客さん!

Laravelには、自動的にデータベースのダミーデータを大量生成できる機能(factoryとseeder)が付いてます!

この機能があれば、こんな感じにドドーンと、

もしくはこんな仮の投稿も↓

自動的にランダムな名前やEmail、投稿などをデータベースに生成できちゃいます!

 

LaravelでDBに仮データを自動生成する方法(factoryとseeder)

というわけで、

  • ユーザー名とメールアドレスを自動生成
  • コンテンツ(投稿/記事)を自動生成

の2つを例にやり方を解説していきます。

 

一応解説はLaravel6を例に書いていくよ!
Neby

 

まずはfakerを日本語対応にしよう!

まず、この仮データ、つまりFakeデータを自動生成する方法なんですが、
基本的にはラテン語や英語に全部なってしまいます。

ただ、一部、人名、地名、文章など、日本語に対応しているので、日本語になるように先に設定しておきます。

 

では、まず、config\app.phpを開いてください。

 

そこで、109行目辺りにあるfaker_localeを探して、en_USja_JPに書き換えて、上書き保存してください。

これで、一部日本語になります。

 

FactoryとSeederでユーザー名やメールアドレスを自動生成してみよう!

そしたら、Laravelに標準で付いているusersテーブルを使って、
大量の仮ユーザーを自動生成してみましょう。

 

まず、phpMyAdminを開きます。

すでにあなたのサイトのデータベース上に
usersテーブルがあるかを確認してください。

 

なければ・・

なければ、まず、database\migrationsフォルダに、以下の4つのファイルが入ってる事を確認してください。Laravelインストール時にデフォルトで付いてきます。

そして、

  1. コマンドプロンプト(shell/ターミナル)を立ち上げて
  2. cdでLaravelプロジェクトフォルダに移動した後
  3. php artisan migrate と入力、Enterしてください。

usersテーブルが作られるはずです。

LaravelのMigrationとは?初心者でも図解で面白いほどよく分かる!

 

factory(faker)の設定

次にdatabase\factoriesフォルダの、UserFactory.phpを開いてください。

 

そんなの無いよ?

もし、そんなの無いよ!って場合は、作ります。

コマンドプロンプトを開いて、cdでまだLaravelプロジェクトフォルダに移動してない場合は、移動後

php artisan make:factory UserFactory

と入力、Enterしてください。

これで、出来てるはずです。

 

で、この13行目辺りにある'name' => $faker->name,なんですが、このままだと英語名になってしまうので、日本語名に変えるために、書き換えます。

'name' => $faker->lastName.$faker->firstName,

と書き換えてください。

 

中身が空っぽだった場合は、下をコピーしてください。

コピーしました

コピー

'name' => $faker->lastName.$faker->firstName,
'email' => $faker->unique()->safeEmail,
'email_verified_at' => now(),
'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
'remember_token' => Str::random(10),

そして上書き保存します。この$fakerっていうのが、fakeデータを自動生成してくれるシステムなんです。

 

seederの設定

factory(faker)は、fakeデータを作るための機能で、seederは、データベースにデータを流し込む機能です。

先程のコマンドプロンプトをまた開いて、

php artisan make:seeder UsersTableSeeder

と入力、Enterします。

 

database\seedsフォルダを開くと、UsersTableSeeder.phpが出来てるはずです。

それを開いてください。

 

 

public function run( )の{ }内に黄色部分のように、追記します。

コピーしました

コピー

// 10人の仮ユーザーを作成する
$users = factory(App\User::class, 10)->create();

この( )内の10という数字を156に変えれば156人分のデータが自動生成されます。

 

ちなみに1人だけ生成したい場合は↓

コピーしました

コピー

$user = factory(App\User::class)->create();

のように書けばOKです。そしたら、上書き保存してください。

 

実際にseederで仮ユーザーを自動生成する

では、先程のコマンドプロンプトを開いて、

composer dump-autoload

と入力、Enterし、3分ほど待ちます。

 

完了後、

php artisan db:seed --class=UsersTableSeeder

と入力、Enterします。

migrationファイルと違って、seederファイルは、このコマンドを打つと実行済みのファイルでも何度でも実行されちゃうから、実行したいファイルを、--class=で指定して実行してね。
Neby

 

成功すれば、データベースのusersテーブルに仮データが入ってるはずです。

phpMyAdminから再度確認してみてください。

無事うまくいきました!

 

ねぇ、日本語にならないで、英語名になっちゃうんだけど・・

ちゃんと、lastName, firstNameに書き換えた?nameだと日本語にならないよ。

あと、コマンドプロンプトに、php artisan config:cacheと入力、Enterしてみて。キャッシュが消えるから。

そして、もう一回composer dump-autoloadして、

php artisan db:seed --class=UsersTableSeederしてみて、今度はうまくいくと思うよ。

Neby

 

エラーが出たら、必ずエラー文を読もう。

これだったら、remember_tokenと出てるという事はその部分か、周辺にミスがあるという事が分かるわけ。

Neby

 

FactoryとSeederで投稿記事を自動生成してみよう!

では、今度は、口コミサイトやブログをLaravelで作ってる場合は、投稿を大量に仮作成したい時もあると思うので、factoryとseederを使ってやってみましょう。

 

さっきの仮ユーザー作成で流れは分かったと思うから、もう少し踏み込んだ細かい設定方法も解説するよ!
Neby

 

factory(faker)の作成

では、まずコマンドプロンプトを開きます。cdでLaravelプロジェクトフォルダに移動しておいてください。

で、使うコマンドなんですが、

php artisan make:factory FormFactory --model=Form

このFormの部分はモデル名です。自分が仮データを流し込みたいテーブルのモデル名に書き換えてください。

例えば、Appフォルダを開くと、

データベースのテーブルに対応したモデル(formsテーブルだったら、Form.php)があるので、そのモデル名を使います。

 

エロクワントのモデルを使ってない場合(クエリビルダだけ使ってる場合)は、このfactoryは使えないから、モデルを作成してね。

LaravelのModel(Eloquent)とは?初心者でも図とチュートリアルでちゃんと分かる!

Neby

 

で、先程のコマンドを入力、Enterしたら、database\factoriesフォルダにFactory.phpが出来てるので、開きます。

 

まず、赤線部分がモデル名になってる事を確認してください↓

そして、return[ ]の所に以下を追記してください。

コピーしました

コピー

'title' => $faker->city,
'main' => $faker->realText,

これを、あなたのデータベース環境によって書き換える必要があります。

 

'title' 'main' というのは、ダミーデータを流し込みたいデータベースのカラム名です。

私だったら、formsテーブルにtitleカラムとmainカラムがあり、そこに仮データを流し込みたいので、それを指定しています。

 

次に => $faker-> に続く部分なんですが、

 

cityと入れると、ランダムの市名が入ります。

realTextと入れると、ランダム文が入ります。こんな感じ↓

 

例えば、先程のusersテーブルであれば、

lastName なら名字、firstNameなら下の名前、 safeEmailならメールアドレスのように、ここの値(formatter)を変える事で、 表示されるものが変わります。

もともと、これ、fakerっていうLaravelパッケージの機能なんで、
Githubにこのformatter一覧が乗ってます。

GitHub Faker

その中でも、いくつかピックアップすると、

Formatter表示言語
lastName山田日本語
firstName花子日本語
randomNumber741258 
countryウクライナ日本語
city佐世保市日本語
address3642390 愛知県小泉市中央区野村町喜嶋2-2-5日本語
realtext吾輩はなんたらかんたら・・・日本語
paragraphCorporis et commodi quas aut consequatur. Quod ut omnis est. Et et delectus・・・ラテン語
sentenceCorporis et commodi quas aut consequatur.ラテン語
wordveroラテン語
emailabc@taro.com 
safeEmailabc@example.com 
freeEmailabc@yahoo.com 
date2031-02-15 
time12:25:14 

などなど、実際はこの10倍以上あります(笑)。きっとあなたが欲しい奴もあるんで、公式を覗いてみてください。

つまり、faker->formatter名と書く事で、自動でダミーデータが入るって事だよ。
Neby

できたら、上書き保存してください。

 

seederの設定

先程のコマンドプロンプトをまた開いて、

php artisan make:seeder FormsTableSeeder

と入力、Enterします。(これも同様に赤文字を任意のテーブル名、postsテーブルなら、Postsのように書き換えてください。)

 

database\seedsフォルダを開くと、FormsTableSeeder.phpが出来てるはずです。

それを開いてください。

 

 

public function run( )の{ }内に黄色部分のように、追記します。

コピーしました

コピー

$forms = factory(App\Form::class, 5)->create();

これもpostsテーブルなら、$posts = factory(App\Post::class, 5)->create();のように書き換えて、数値はダミーの件数なので、任意で変更してください。

 

1つだけ生成したい場合は↓

コピーしました

コピー

$form = factory(App\Form::class)->create();

のように書けばOKです。そしたら、上書き保存してください。

 

実際にseederでダミー投稿を自動生成する

では、先程のコマンドプロンプトを開いて、

composer dump-autoload

と入力、Enterし、3分ほど待ちます。

 

完了後、

php artisan db:seed --class=FormsTableSeeder

と今作ったSeederファイルを指定して入力、Enterします。

 

成功すれば、データベースにダミーデータが入ってるはずです。

phpMyAdminから再度確認してみてください。

使うformatterによって、いろいろなダミーデータが作れるわけです。

 

これでFactoryとSeederを使って、
ダミーのユーザーと投稿を自動生成する方法が分かったと思いますが、

 

  • この記事を書いた人

Neby

本を毎日多読しつつ、資産運用、プログラミング、心理学、ネットビジネススキルを猛向上中。貧富の差が広がる5年後、10年後に安心生活を送るためのお金のリテラシー、スキル、資産を一緒に作っていきましょう。

-PHP Laravel入門