ありますよ、お客さん!
Laravelには、自動的にデータベースのダミーデータを大量生成できる機能(factoryとseeder)が付いてます!
もしくはこんな仮の投稿も↓
自動的にランダムな名前やEmail、投稿などをデータベースに生成できちゃいます!
LaravelでDBに仮データを自動生成する方法(factoryとseeder)
というわけで、
- ユーザー名とメールアドレスを自動生成
- コンテンツ(投稿/記事)を自動生成
の2つを例にやり方を解説していきます。
まずはfakerを日本語対応にしよう!
まず、この仮データ、つまりFakeデータを自動生成する方法なんですが、
基本的にはラテン語や英語に全部なってしまいます。
ただ、一部、人名、地名、文章など、日本語に対応しているので、日本語になるように先に設定しておきます。
では、まず、config\app.phpを開いてください。
そこで、109行目辺りにあるfaker_localeを探して、en_USをja_JPに書き換えて、上書き保存してください。
これで、一部日本語になります。
FactoryとSeederでユーザー名やメールアドレスを自動生成してみよう!
そしたら、Laravelに標準で付いているusersテーブルを使って、
大量の仮ユーザーを自動生成してみましょう。
まず、phpMyAdminを開きます。
すでにあなたのサイトのデータベース上に
usersテーブルがあるかを確認してください。
なければ・・
なければ、まず、database\migrationsフォルダに、以下の4つのファイルが入ってる事を確認してください。Laravelインストール時にデフォルトで付いてきます。
そして、
- コマンドプロンプト(shell/ターミナル)を立ち上げて
- cdでLaravelプロジェクトフォルダに移動した後
- php artisan migrate と入力、Enterしてください。
usersテーブルが作られるはずです。
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します。
成功すれば、データベースのusersテーブルに仮データが入ってるはずです。
phpMyAdminから再度確認してみてください。
無事うまくいきました!
ちゃんと、lastName, firstNameに書き換えた?nameだと日本語にならないよ。
あと、コマンドプロンプトに、php artisan config:cacheと入力、Enterしてみて。キャッシュが消えるから。
そして、もう一回composer dump-autoloadして、
php artisan db:seed --class=UsersTableSeederしてみて、今度はうまくいくと思うよ。
FactoryとSeederで投稿記事を自動生成してみよう!
では、今度は、口コミサイトやブログをLaravelで作ってる場合は、投稿を大量に仮作成したい時もあると思うので、factoryとseederを使ってやってみましょう。
factory(faker)の作成
では、まずコマンドプロンプトを開きます。cdでLaravelプロジェクトフォルダに移動しておいてください。
で、使うコマンドなんですが、
php artisan make:factory FormFactory --model=Form
このFormの部分はモデル名です。自分が仮データを流し込みたいテーブルのモデル名に書き換えてください。
例えば、Appフォルダを開くと、
データベースのテーブルに対応したモデル(formsテーブルだったら、Form.php)があるので、そのモデル名を使います。
エロクワントのモデルを使ってない場合(クエリビルダだけ使ってる場合)は、このfactoryは使えないから、モデルを作成してね。
で、先程のコマンドを入力、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一覧が乗ってます。
その中でも、いくつかピックアップすると、
Formatter | 例 | 表示言語 |
lastName | 山田 | 日本語 |
firstName | 花子 | 日本語 |
randomNumber | 741258 | |
country | ウクライナ | 日本語 |
city | 佐世保市 | 日本語 |
address | 3642390 愛知県小泉市中央区野村町喜嶋2-2-5 | 日本語 |
realtext | 吾輩はなんたらかんたら・・・ | 日本語 |
paragraph | Corporis et commodi quas aut consequatur. Quod ut omnis est. Et et delectus・・・ | ラテン語 |
sentence | Corporis et commodi quas aut consequatur. | ラテン語 |
word | vero | ラテン語 |
abc@taro.com | ||
safeEmail | abc@example.com | |
freeEmail | abc@yahoo.com | |
date | 2031-02-15 | |
time | 12:25:14 |
などなど、実際はこの10倍以上あります(笑)。きっとあなたが欲しい奴もあるんで、公式を覗いてみてください。
できたら、上書き保存してください。
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を使って、
ダミーのユーザーと投稿を自動生成する方法が分かったと思いますが、