メールアドレスとかユーザ名などのテストデータってある程度の量をまとめて作るのってめんどくさくないですか?
そんな、悩みを一発で解消してくれるphony
というツールを紹介します。
phony
https://github.com/yields/phony
phonyとは?
偽のデータをランダムにジェネレートしてくれるシンプルなコマンドラインツールです。
goで実装されています。
早速インストールしてみましょう。goが入っていれば簡単です。
$ go get github.com/yields/phony
goが入っていない場合は、以下リンクを参照にgoをインストールしていただければと思います。OSXならbrew経由でgoをインストールするのもいいですね。
https://golang.org/doc/install
この記事を書いた時のバージョンは、0.0.1になります。
$ phony --version
0.0.1
使い方
使い方はとてもシンプルです。標準入力からテンプレートを渡してあげれば、ランダムな偽のデータを作ってくれます。
やってみましょう。
基本形
まずは、3件のidを作成する例です。
$ echo '{{id}}' | phony --max 3
Ddyb9TepDG
lSHThIutNv
OObnmmV6qZ
テンプレートは{{string}}
の形で標準入力に渡してやります。また、指定した件数を作成するためには、max
オプションで指定できます。max
オプションの初期値は-1
なので、指定しないとひたすら作成しつづけてしまうので注意が必要です。
ジェネレートする間隔を指定する
データを作成する際の間隔は、tick
オプションで指定することができます。初期値は10ms
です。
以下は、メールアドレスを1秒間隔で作成する例になります。
$ echo '{{email}}' | phony --tick 1s --max 3
ehsandiary@test.me
roybarberuk@test.name
bublienko@test.com
テンプレートを複数記述する
テンプレートは複数記述して渡すことができます。
アバターとHTTPメソッドの組み合わせてデータを作成する例になります。ちなみに、このアバターの画像はs3から取得することができました。画像を用意しなくていいのは助かりますね。
$ echo '{{avatar}} {{http.method}}' | phony --max 3
https://s3.amazonaws.com/uifaces/faces/twitter/exentrich/128.jpg OPTION
https://s3.amazonaws.com/uifaces/faces/twitter/hugomano/128.jpg PUT
https://s3.amazonaws.com/uifaces/faces/twitter/ManikRathee/128.jpg GET
同じテンプレートを複数回していしても、ちゃんとランダムに作成されます。
$ echo '"{{ipv4}}" "{{ipv4}}"' | phony --max 3
"113.125.155.19" "172.64.46.97"
"215.210.112.143" "24.25.239.233"
"16.23.233.217" "212.118.191.44"
作成したデータを、データストアに突っ込む
READMEのExamplesが一番わかりやすいので、そのまま転載します。
MongoDBや、Redisにcli経由でデータをインサートする例になります。ストレージに負荷がかけられない場合は、tick
オプションを合わせて使うといいと思います。
# add users to MongoDB.
echo "'db.users.insert({ name: \"{{name}}\" })'" \
| phony \
| xargs -L1 -n1 mongo --eval
# add users to Redis.
echo "set {{username}} {{avatar}}" \
| phony \
| xargs -L1 -n3 redis-cli
ジェネレートされるデータについて
どんなデータが作れるの?
ジェネレートできるテンプレートの一覧は list
オプションで確認できます。
email、name、username辺りは利用頻度が高そう。
$ phony --list
avatar
color
country
country.code
domain
domain.name
domain.tld
double
email
event.action
http.method
id
ipv4
ipv6
latitude
longitude
mac.address
name
name.first
name.last
product.category
product.name
state
state.code
timezone
unixtime
username
ジェネレートするデータって変更できる?
ジェネレートするデータの元は、gens.go
およびdict.go
に記述されています。
なのでここらへんをゴニョゴニョしてbuildしなおせば容易に変更できると思います。
詳しくは実装を確認していただくのが、手っ取り早いと思います。
https://github.com/yields/phony/blob/master/pkg/phony/gens.go
https://github.com/yields/phony/blob/master/pkg/phony/dict.go
まとめ
すごいシンプルなのに、応用が抜群にきくツールだと思いました。
テストデータって仕込みが以外にめんどくさかったりするので、こういうツールでサクっと作れるとかっこいいと思います