現在作っているアプリを顧客先で見せる機会があり、そのためダミーデータを入れる、という仕事がありました。
といっても画面からポチポチやったんでは時間もかかりますし、何より精神的にやられてしまいます。(汗)
今までもこのネタでは定期的に苦しんでおり、過去にも記事を書いておりますね。
参考リンク
そこで、何とかいろいろ効率よくできないかと考え試行錯誤しました。例によってこれがいい、悪いはなくてメリット・デメリットを考えていきます。
案1 webサービス
以前の記事でも書きましたが、webサービスを使う方法ですね。プログラムの知識はいらないのでデータがすぐに用意でき、非常に典型的なものであれば行けると思います。
メリット
- プログラムの知識がいらないためすぐにデータが用意できる
- 簡単で単純なデータであれば事足りる
デメリット
- 非典型のデータはキツイ
- CSVインポート機能がないとキツイ(DBに直に入れようとするとデータ間で不整合が起きる)
私の場合、システムにCSVインポートがなく、これをDBに直に入れようとすると様々なところで不整合を引き起こすため今回は選択肢から外しました。
案2 SQL
次に考えたのはSQLコマンドを使って、下記のようなデータを作ろうと思いました。
- 任意の日付のランダム
- 他のデータベースからの任意の選択肢のランダム
- 単純な数値のランダム
メリット
- SQLコマンドなのでデータ作成自体に再現性がある
- SQLコマンドを利用するので、比較的自由に任意データが作れる
デメリット
- DBに直で入れるので仕様的に不整合が起こる
- 任意の文字列などは作れない
そこそこ悪くないと思ったんですが、ある程度のシステムになりますと、任意の文字列を作れないのが意外と不便なのと、何よりDBでデータを直で入れると仕様的に不整合が起こりやすく、入れた後にエラーがボコボコ出るので却下しました。
案3 faker
ダミーデータを作るプログラムです。
https://github.com/fzaninotto/Faker
Laravelには直で入っており、汎用的なこともあり、かなり自由にデータを作れます。
メリット
- 自由度はほぼ無制限。
- プログラムを工夫すればほぼ画面から入れたのと同じ状態を作れる。
デメリット
- プログラムをある程度工夫しないとDB直入れになってしまい、仕様的に不整合が起こる。
- プログラムを書く手間とfakerを覚える手間が必要
結局はこれで落ち着きました。もちろん100%に近いナチュラルなデータを作ることはできませんでしたが、精度はよく、検証などをするときにもかなり使えます。
特にかなり便利だったのが下記のような点です。
- 名前、メールアドレスなどかなりナチュラルに近いデータが作れる
- 任意のプルダウン(特にDBから参照するタイプのデータ)
- 日付が任意に取れる(9/10〜9/30までなど)
注意点としては画面からナチュラルに近いデータを入れるには、プログラム自体を画面からデータを入力する(いわゆるコントローラー)部分とモデルにデータを入れるプロセスを引き離しておく必要があります。
後者がメソッドやクラスとして独立して入ればその部分だけを外部から呼び出して入力すればナチュラルデータに近いものが入れられます。逆にこれをしておかないと、それほどメリットは感じられません。
逆に上記のようにプログラムを作っておけば、かなり精度の高いデータを作れます。今後はほぼこれ一択で、もう少し早く覚えておけばよかったなあと今更ながら後悔しました。