LoginSignup
21
19

More than 5 years have passed since last update.

phonyでテスト用データを超絶簡単に作る

Posted at

メールアドレスとかユーザ名などのテストデータってある程度の量をまとめて作るのってめんどくさくないですか?

そんな、悩みを一発で解消してくれるphonyというツールを紹介します。

:octocat: 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

まとめ

すごいシンプルなのに、応用が抜群にきくツールだと思いました。

テストデータって仕込みが以外にめんどくさかったりするので、こういうツールでサクっと作れるとかっこいいと思います :laughing:

21
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
19