読者です 読者をやめる 読者になる 読者になる

とんちむ日記

RubyとJavaScriptと猫が好きです

モック用のJSONやCSVなどのデータを大量にかつ簡単に作成できるMockarooを試してみた

どうも、フロントエンジニアになりたい人です。

js側から叩くAPIがまだサーバーサイドで実装されてないけど、js側の処理も先にやっとかないといけないって状況ありますよね・・多分。僕は今のところ経験したことないけどきっとある。

あと、テスト用のデータ欲しいとか。簡単なjsのデモ作りたいけどそのためにAPIを実装するのも面倒だとか、そもそもサーバーサイド作れないとか。

そこでAPIの仕様さえ決まってれば1000件のデータまで無料でJSONCSVや TSVとかなんならSQLもいけるらしい)ファイルを作ってくれるサービスMockarooを見つけました。

こちらが初期状態です。 f:id:tonchix:20170509161216p:plain

Field NameはDBでいうカラム名ですね。Typeはどういうデータを入れたいかを指定します。ランダムでそれっぽいデータを作って入れてくれます。Fakerっぽいやつだと思って貰えば良いかと。

Optionにあるblankは空(DBでいうとNULL)が入る割合を指定できます。50%だったら1000件作れば500件ほどのデータは指定したフィールドに値がないものになります。

fxは生成されるデータを加工したい場合にここで指定できるようです。用意されている関数を使うこともできますし、Rubyが書けるならRubyを使って加工することもできます。例えばthis.upcaseとやれば全部大文字にするとか。

こんな感じで英語わかんなくてもぱっと見た感じ簡単に作れそうですよね。 でもちょっとだけ悩んだのが、こういうデータが欲しい時。

{
  "friends": [
    { "first_name": "foo", "last_name": "bar" },
    { "first_name": "hoge", "last_name": "huga" }
  ]
{

以下のようにすれば良いみたいです。

f:id:tonchix:20170509155905p:plain

↓こういうのが欲しい場合は 上の例からJSON Arrayのフィールドを無くせば良いです。

{
  "friends": {
    "first_name": "foo",
    "last_name": "bar"
  }
}

また、単純な配列が欲しいだけならば、フィールド名[2]とかやると[]の中で指定した大きさの配列になります。

あとはダウンロードして適当なところに置いてjsから呼び出せばOK!やったー。しかも無料の範囲なら登録不要みたいですよ、楽ですねー。

他にも公式のnpm packageもあってこちらはAPIkeyが必要なので登録する必要がありますが、無料プランだと1日200リクエストまで使えます。詳細はリンク先をみてもらえればなんとなく雰囲気掴めると思います。

実際に試してみました。下のようにclient.generateとすればPromiseを返してくれるようです。generateに渡すcountの値が1の場合はPromiseから取り出す値は配列ではないので注意してください。

const Mockaroo = require('mockaroo');

const client = new Mockaroo.Client({
  apiKey: '******' //自分のAPIKeyを入れてね
});

client.generate({
  count: 10,
  fields: [{
    name: 'id',
    type: 'Row Number'
  },{
    name: 'friends.first_name',
    type: 'First Name'
  },{
    name: 'friends.last_name',
    type: 'Last Name'
  }]
}).then(records => {
  for(let record of records){
    console.log(record.id, record.friends.first_name, record.friends.last_name);
  }
    console.log(records[0]);
});

結果は以下のようになります。(最後のはちょっと整形してます)

1 'Susy' 'Ingarfill'
2 'Jakob' 'Duligal'
3 'Lanie' 'Jamieson'
4 'Joanna' 'Betham'
5 'Magdalena' 'Castledine'
6 'Roxine' 'Cogdon'
7 'Bea' 'Trevaskis'
8 'Gertruda' 'Bannard'
9 'Dorelle' 'Moors'
10 'Bruno' 'Dorot'
{ 
  id: 1,
  friends: { 
    first_name: 'Ermin',
    last_name: 'Rosenfarb'
  }
}

簡単だし便利ですねー。

ただ日本語対応してないっぽいので日本語のデータ欲しいならばfxのとこで無理やり日本語データ作るか、これじゃなくてFakerとか使うかする必要がありますね。

サイトではSQLも作れるのでDBにテストデータを作るのにも便利だなーと思いました。僕はRailsを主に使うのでその辺の必要性はないですが、データを作るのが面倒な開発環境ならそこそこ使えるかも知れませんね。

もっといい方法あるよーって場合はぜひ教えてください。