Laravel

【laravel】ダミー(テスト)データを作る方法 シーダー(seeder)とfactoryとfaker【初心者向け】

PHP現場の中の人
プログラミングってほとんどデータベースとのやりとりじゃないですか。
PHP現場の中の人
データベースからのデータをどう表示させるかっていう。

『PHPの現場』というポッドキャストの放送で、ひときわ印象に残ったこの言葉。

そう言われると確かに、例えばゲームなら、

  • アイテムの名前
  • アイテムの数
  • HPにMP
  • 敵の名前
  • 敵の種類
  • 画像/動画データ など、

ありとあらゆるデータが『データベース』に保存されていてやりとりされています。

データベース・・たくさんのデータが保存できるソフト。MySQLなど。

仕事で使うような在庫管理、勤怠管理、予約管理なんかのシステムももれなく『データベース』にデータが保存されています。

何かしらのプログラミング言語を使って、

『データベース』の中のデータを表示させたり、計算したり、時には消したりしています。

PHP現場の中の人
プログラミングってほとんどデータベースとのやりとりじゃないですか。
PHP現場の中の人
データベースからのデータをどう表示させるかっていう。
アオキ
そう言われると確かにそうかもなー

と思ったりしたわけです。

効率的にプログラミングするために考え出された『MVC(エムブイシー)モデル』でも、

『データベース』とのやりとりが重要視されています。

M・・モデル データベースとのやりとり
V・・ビュー 見た目
C・・コントローラー データの処理

一生懸命何かしらのソフトを作ったとしても、

仮にデータの計算が間違ってたり、金額計算が間違ってたりするとえらいこっちゃです。

ゲームでも最初からレベル99になったら興ざめしちゃうし、

はぐれメタル倒しても経験値1ならなんでやねんってなっちゃうし、

ATMに1万円入金したはずが 2000円とかになっちゃったらえらいこっちゃです。

なので、

チェックする人
きちんと計算できてるよね?
チェックする人
間違ってないよね?

という確認の意味を込めて、

『ダミーデータ(テストデータ)』を登録しつつテストしてみるという手順が必要になります。

とはいえ『ダミーデータ(テストデータ)』を1つずつ手で入力していくと、

10件くらいなら頑張れるかもしれないけれど、
100件、1000件と数が増えるにつれ苦行にしかならないし、

データベースつくってる人
データベース構成ちょっと変えたからやりなおしー

なんてことになって、『テストデータ』をまたイチから手打ちで登録なんてやってると日が暮れちゃうし。

ということで、先人達が知恵を絞って、

先人達
ダミーデータ(テストデータ)をさくっとつくれるようにしよかー

と、『ダミーデータ(テストデータ)』をさくっとつくれる仕組みをつくってくれました。

PHPのフレームワーク『Laravel(ララベル)』でも、

『ダミーデータ(テストデータ)』をさくっと作れる仕組みが含まれています。

正直なところ、『laravel(ララベル)』を覚えた当初は、

アオキ
なにやらめんどい設定ばっかでとっつきにくいなぁ

と思っていたんですが、

実際にWebアプリをつくっていくうちに、

  • データベースの構成が変わって作り直し
  • その度にダミーデータを手打ちし直し

という事をやっていて、かなりムダな時間がかかっていたので、

ある程度『laravel(ララベル)』に慣れて、webアプリをつくろうという段階になったら、

ぜひダミーデータ作りに挑戦してもらえたらと思います。

アオキ
慣れれば慣れるほど手放せなくなってきまっせ。

laravel 5.5 で試しています。

Sponsored link

laravelでダミー(テスト)データを作る仕組み

『Laravel(ララベル)』で『ダミーデータ(テストデータ)』を作成する場合、
大きく3つのツールを使うことになります。

  1. seeder(シーダー)・・ダミーデータを登録できる
  2. faker(フェイカー)・・ダミーデータを生成できる
  3. factory(ファクトリー)・・ダミーデータの量産装置

イメージはこんな感じでしょうか。(雑ですみません)

画面右のモデルに対して、

『ダミーデータ(テストデータ)』を投入していきます。

『ダミーデータ(テストデータ)』を作る方法は大きく2つあると思っていて、

1.seeder(シーダー)に直接書く・・少しのデータならこれでOK

か、

2. faker(フェイカー)とfactory(ファクトリー)を使う・・大量のデータをつくるならこっち

になります。

まずは画面右の『モデル』をつくってみます。

laravelで『ダミー(テスト)データ』を作るその前に まずはモデルつくりから

まずは『laravel(ララベル)』のインストールから。

のコマンドで『laravel(ララベル)』をインストールします。

『laravel(ララベル)』インストールの参考記事

無事インストールできたらおもむろに『モデル』をつくります。

今回は『Dept(部署)』というモデルと、『Employee(従業員)』というモデルをつくる想定にしてます。

営業や総務という部署があって、その中に働く人が何人かいる、という想定になります。

下記のコマンドで『モデル』が生成されます。

php artisan make:model Dept -m

生成された『Dept』モデルをちょっといじって、

『Employee』モデルもつくって、

php artisan make:model Employee -m

『Employee』モデルもちょっといじって、2つの『モデル』を紐づけています。

(紐づけ関連はおいおい記事にする予定です。)

『モデル』を作る時に、 -m というオプションをつけていたので、

『マイグレーションファイル』も同時生成されます。

マイグレーションファイル・・データベースの中のテーブルの雛形。

こちらもちらっと追記して、

employee側のマイグレーションファイルもちらっと追記して。

ここまでで2つの『モデル』が作成できました。

今のところ、データベースの中に『Dept』と『Employee』2つの箱はつくったけど、

中身のデータが全然入ってない状態です。

ここに『ダミーデータ(テストデータ)』や初期データをいれるようにしてみます。

Sponsored link

laravelでダミー(テスト)データを作る手順その1 シーダーに直で書いて設定

さっそくダミーデータを書いていきます。

まずは『Dept(部署)』の方から。

おもむろにこんなコマンドをうつと、

php artisan make:seed DeptsTableSeeder

『DeptsTableSeeder.php』というファイルが生成されるので、ガリガリと書いていきます。

『Dept(部署)』の方は、部署の種類が今回はそこまで多くないので手入力でいいかなと思ったりします。

こんな感じですね。

『Seeder(シーダー)』は各モデルごとに生成する必要があって、それらを取りまとめる『DatabaseSeeder.php』というファイルに紐付けます。

この状態で下記コマンドをうつと、

php artisan db:seed

『データベース』の『Dept(部署)』の中に入力した部署が登録されます。

こんな感じになります。

また、下記のコマンドをうつと、

php artisan migrate:refresh –seed

データベースの中のテーブル構成をまるっと初期化しつつ、『Seeder(シーダー)』に書いたデータをまるっと再登録してくれます。

アオキ
慣れれば慣れるほどめっさ便利でっせ。
Sponsored link

laravelでダミー(テスト)データを作る手順その2 fakerとfactoryでダミーデータを大量生成

『Dept(部署)』側ができたので、続いて『Employee(従業員)』のダミーデータ。

人数が少なければ手打ちでもいいんですが、

せっかくなので 大量の人数を登録してみることにします。

下記コマンドで『factory』をつくります。

php artisan make:factory EmployeeFactory

すると、

laravel/database/factories/EmployeeFactory.php

という『factory(ファクトリー)』ファイルが生成されます。

『factory(ファクトリー)』ファイルの中で、『faker(フェイカー)』を使って『ダミーデータ』をつくります。

『faker(フェイカー)』には、

  • ダミー名前
  • ダミーメールアドレス
  • ダミーの数値
  • ダミーの郵便番号
  • ダミーの日付

などたくさんのオプションがあるので詳細はマニュアルを参照いただくことにしつつ、

今回はこんな内容にしました。

なんとなくわかるかもですが、

$faker->nameでダミーの名前をつくって、

$faker->numberBetween($min = 1, $max = 5) で1から5までランダムに登録して、

$faker->datetime($max = ‘now’, $timezone = date_default_timezone_get()) で最大値を現在時刻にしてます(ここは適当です)。

『factory(ファクトリー)』と『faker(フェイカー)』を設定した後で、

『Seeder(シーダー)』側で、実際にダミーデータを登録します。

このコマンドで『EmployeesTableSeeder.php』を生成して、

php artisan make:seed EmployeesTableSeeder

先ほど作った『factory』と、生成したいダミーデータの数を追記します。

『Seeder(シーダー)』の取りまとめ役の『DatabaseSeeder.php』にも追記して、

ここまでで、

php artisan migrate:refresh –seed

とやると、『ダミーデータ』が登録できてしまいます。

ただ一点注意点があって、『faker(フェイカー)』は初期設定だと英語でデータ生成しますので

もし日本語対応したい場合は『app.php』ファイルと『.env』ファイルに追記必要です。

■laravel/config/app.php

■laravel/.env

2つのファイルに追記した後に、

php artisan migrate:refresh –seed

のコマンドをうてば50件のダミーデータがものの10秒でできちゃいます。

アオキ
laravel半端ねー、そんなんできんやん普通ー

さいごに

最初から一発でWebアプリなりソフトウェアがバッチリ完成できればいいのですが、

人間たるもの、どうしてもちょっとした間違いはでてくるし、

実際に作りながら、

もの作りする人
やっぱりこうしたほうがいいんじゃないか

なんて思いもでてきます。

今回はたった2つの、しかもかなり簡単な構成でしたが、

実際のWebアプリとなればテーブルだけで数十に及びますし、

その繋がりも山ほどでてくるので、

その度に手打ちで『ダミーデータ』をうっているととてもじゃないけど仕事にならなくなっちゃいます。

先人達が編み出した、『ダミーデータ』をさくっとつくる仕組みをうまいこと活用して、

さくっと仕事してさくっと帰れるような効率的な働き方をしていきたいもんです。

『Laravel』ではこんな記事も読まれています。

1. 【Laravel(PHP)】でできる事をわかりやすく(ざっくりと)まとめてみた【用語集も兼ねて】【初心者向け】

2. 【PHP】【laravel】CSVエクスポートの方法〜5つのポイント〜

3. 【PHP】CSVインポートの方法〜大量データもバルクインサートでバッチリ!〜【laravel】

4. 【laravel】ダミー(テスト)データを作る方法 シーダー(seeder)とfactoryとfaker【初心者向け】

5. 【Laravel5.5】Webアプリケーションを作るためのゆるめの環境構築編【Node.js】【npm】【Vue.js】【初心者向け】

6. LaravelとVue.jsのサンプル動画を見ながらさらりと解説してみる

7. 【Laravel】マルチログイン(ユーザーと管理者など)機能を設定してみた【体験談】

8. 【Laravel】フォトギャラリーを作るための画像アップロード方法【php】

9. 【Laravel】多対多テーブルを複数つくる方法【ちょっとコツがいります】

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

CAPTCHA


Sponsored link

関連記事

  1. Laravel

    【Vue.js/Laravel】Webアプリ実践記 37歳おっさんが独学でVue.js+Larave…

    webアプリ実践記 0日目~10日目webアプリ実践記 11…

  2. Laravel

    【Vue.js/Laravel】Webアプリ実践記 37歳おっさんが独学でVue.js+Larave…

    webアプリ実践記 0日目~10日目webアプリ実践記 11…

  3. Laravel

    【PHP】CSVインポートの方法〜大量データもバルクインサートでバッチリ!〜【laravel】

    デスクワークの人なら誰もが知っていると思われる『CSVファイル』。…

  4. Laravel

    Laravel入門ならこの本一択! 今までの疑問点がどんどんスッキリしていった話

    PHPのフレームワークといえば、今ならなんといっても『Laravel(…

  5. Laravel

    物流の受注・発送管理システムのつくり方を考えてみる【Laravel】

    プログラミングを上達するための秘訣は「何かをつくる」ということだと思っ…

Sponsored link

最近の記事

Sponsored link
  1. Laravel

    【Django】【Laravel】【RubyOnRails】を比較してみた【初心…
  2. 検索システム

    【検索システム】をつくってみた【実際にログインしてさわれます】
  3. クリエイティブコーディング

    プログラミングで数学も身につく 一石四鳥なクリエイティブコーディング
  4. プログラミング

    『プログラミング教育』より大事な事を考えてみる~AI時代を見据えて~
  5. 物理学

    物理とプログラミングの関係〜力学のはじめのいっぽ
PAGE TOP