パフォーマンステスト等の用途でダミーデータを大量に作成しないといけない局面があり、今までシェルスクリプトで作ったりRubyスクリプト叩いたりしてたんですが、
- シェルスクリプトは他のコマンドを組み合わせるとコストが高くなりがち。
- 他のコマンドを組み合わせて利用できる柔軟性はあるものの、コマンド実行は別のシェル、プロセスを立ち上げることになるのでコストが高い
- LLだと気軽かつそれなりの速度でデータを生成できるが、いちいちスニペットを作成する必要があるため面倒。
- ダミーデータを作成するWebサービスはたくさんあるのですが、CLIツールはあまり無く、手元で作れたほうが効率的な場面がある
使い方
Linux/macOSユーザは以下でインストール可能です。$ curl -sL http://install.freedom-man.com/dmy.sh | sh
goユーザはgo getでインストールできます。
$ go get github.com/tzmfreedom/dmy
上記でインストールできない場合はリリースページでダウンロードしてdmyを/usr/local/binあたりに置けばOK。
インストールしたら、こんな感じでダミーデータをTSV形式で出力できます。
$ dmy -N 10 "hoge" "{{.Index}}" "{{date .Index}}"
–number(-N)
オプションでダミーデータのレコード数を設定し、オプション以外の引数が実際のデータになります。上記の場合はhogeという文字列、0から始まるレコードのINDEX、現在の日時からINDEXの秒数分を加算した数が出力されます。
基本的にはgolang標準ライブラリのtext/templateを使っているので、そこで利用できる関数は全て利用できます(たぶん)。dmyではさらに以下の関数を用意しています。
add | 加算処理を行う |
sub | 減算処理を行う |
mul | 乗算処理を行う |
div | 除算処理を行う |
mod | 剰余計算を行う |
date | 現在の日付にN秒加算した日付を表示する |
date_m | 現在の日付にN分加算した日付を表示する |
date_h | 現在の日付にN時間加算した日付を表示する |
date_add | 現在の日付に年、月、日を指定数分加算した日付を表示する |
choice | 指定した文字列の中からランダムで1つ選択して表示する |
fake | 引数のタイプに応じたダミーデータを表示する |
日付関数の基準日はデフォルトでコマンドライン実行日時が基準となっていますが、–starttime
オプションで基準日を変更することができます。また、–dateformat
オプションで日付のフォーマットを変更することも可能です。
デフォルトの出力形式はTSVですが、デリミタやエンクロージャ、改行文字を変更することが出来るのでCSVの出力も可能です。–header
オプションでヘッダを付与することもできます。
install.shによるインストールについて
Homebrewを用意しても良かったのですが、今回のツールはLinuxでも手軽に使えるようにしたかったのでcurl hogehoge | sh
の方法でインストールできるようにしました。githubにinstall.shを上げて、githubに直接アクセスする方法でも良いのですが、URLが長くなってしまいイケてない感じなので、リダイレクタを噛ませてユーザがアクセスするURLは短くするようにしました。全体としては以下のフローになります↓
- install.freedom-man.com/dmy.shにアクセス
- raw.githubusercontent.com/tzmfreedom/dmy/master/install.shにリダイレクト
- install.shをダウンロード+シェル実行
方法は簡単で以下の手順を踏むだけ。
- S3にバケットを登録し、リダイレクタの設定をする(バケット名は独自ドメイン名)
- CNAMEを登録
<RoutingRules>
<RoutingRule>
<Condition>
<KeyPrefixEquals>dmy.sh</KeyPrefixEquals>
</Condition>
<Redirect>
<HostName>raw.githubusercontent.com</HostName>
<ReplaceKeyPrefixWith>tzmfreedom/dmy/master/install.sh</ReplaceKeyPrefixWith>
</Redirect>
</RoutingRule>
</RoutingRules>
DNSの設定はこんな感じで(Route 53の例)