dummy-jsonというnodeのライブラリを使ってみたのでメモ
dummy-json
BigQueryなどサンプルのJSONを作ってロードしたいときや、カラムの情報をある程度コントロールしてサンプル作りたいとき
または、モック用にAPIレスポンスを適当に生成したいとき
Rubyでいうfaker的なものをJSON出力で行ってくれるライブラリ
webroo/dummy-json: Generates random dummy JSON data in Node.js
install
$ npm install -g dummy-json
テンプレート
テンプレートはhandlebars(.hbs)というテンプレートエンジンを使っている
dummy-jsonにはdate,firstNameなどヘルパーがいくつか存在するのでその中から選んでテンプレートを書いていく
結構量があるのでとりあえず使うだけなら最初からあるヘルパーでこと足りる
カスタマイズしたい場合はコードを書けばヘルパーを追加することもできる
適当な値を生成するテンプレートを書いてみた
- hoge.hbs
[
{{#repeat min=10 max=100}}
{
"id": {{add @index 1}},
"site_id": {{int 1 1000}},
"date": "{{date '2010' '2020' 'YYYY-MM-DD'}}",
"name": "{{firstName}}",
"image": "{{add (step 10) 0}}.png",
"classification": "{{random 'foge' 'fuga' 'piyo' 'foo' 'bar' 'baz'}}",
"color": "{{color}}",
"guid": "{{guid}}",
"ip": "{{ipv4}}",
"value": {{int 0 10000}}
}
{{/repeat}}
]
コマンドにテンプレートファイルを渡して実行するだけだとそれっぽい値が入っているJSONが出力される
$ dummyjson hoge.hbs
[
{
"id": 1,
"site_id": 5,
"date": "2017-07-28",
"name": "Selma",
"image": "0.png"
"classification": "fuga",
"color": "darkkhaki",
"guid": "6cf5c255-8b17-493a-8ec9-d25df546f1fe",
"ip": "87.117.199.90",
"value": 543
},
{
"id": 2,
"site_id": 800,
"date": "2010-05-22",
"name": "Raylene",
"image": "10.png"
"classification": "foge",
"color": "blueviolet",
"guid": "159cdea1-9988-4f2e-b682-53e13d6633a3",
"ip": "99.90.12.168",
"value": 5345
},
.....
.....
.....
例では単純な形式のJSONだが入れ子の構造など複雑なJSONもテンプレート次第で書ける
ファイル生成
$ dummyjson hoge.hbs | jq '.[]' -cr > fuga.json
普通に出力するとprettyなJSONになるので件数を出すためjqで少し加工した
例ではBigQueryのロードでも必要なndjson形式にしている
$ wc -l fuga.json 84 fuga.json
モックサーバとして使う
適当なレスポンスを返すだけのためのサーバを用意
- app.js
const fs = require('fs'); const express = require('express'); const dummyjson = require('dummy-json'); const template = fs.readFileSync('template.hbs', { encoding: 'utf8' }); const app = express(); app.get('/api/people', function(req, res) { res.set('Content-Type', 'application/json'); res.status(200).send(dummyjson.parse(template)); }); app.listen(3000);
- template.hbs
{
"users": [
{{#repeat 2}}
{
"id": {{@index}},
"name": "{{firstName}} {{lastName}}",
"work": "{{company}}",
"email": "{{email}}",
"dob": "{{date '1900' '2000' 'YYYY'}}",
"address": "{{int 1 100}} {{street}}",
"city": "{{city}}",
"optedin": {{boolean}}
}
{{/repeat}}
],
"images": [
{{#repeat 3}}
"img{{@index}}.png"
{{/repeat}}
],
"coordinates": {
"x": {{float -50 50 '0.00'}},
"y": {{float -25 25 '0.00'}}
},
"price": "${{int 0 99999 '0,0'}}"
}
$ npm install express dummy-json $ node app.js
3000番ポートにアクセスすると生成されたJSONが表示される
簡単!開発中の要件に合わせてとりあえず適当な値を返すようにするだけであれば十分
所感
- 簡単に適当なデータを持ったデータを生成できた
- コマンドが用意されているので気軽に使いやすい
- 独自のヘルパーも書けるようなので機会があれば書いてみたい
- handlebarsというキーワードを初めて聞いた