2017-04-10

ダミーデータを大量に作成するCLIツールdmyを作ってみた

パフォーマンステスト等の用途でダミーデータを大量に作成しないといけない局面があり、今までシェルスクリプトで作ったりRubyスクリプト叩いたりしてたんですが、

ということで、手軽にダミーデータを作成するCLIツールの”dmy”をgolangで作ってみました。

使い方

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 引数のタイプに応じたダミーデータを表示する
fake関数はダミーデータを表示する関数で、github.com/icrowley/fakeのライブラリを利用しています。英語とロシア語しか対応していない状況なので、ゆくゆくは日本語対応もしようかなーと思ってます。

日付関数の基準日はデフォルトでコマンドライン実行日時が基準となっていますが、–starttimeオプションで基準日を変更することができます。また、–dateformatオプションで日付のフォーマットを変更することも可能です。

デフォルトの出力形式はTSVですが、デリミタやエンクロージャ、改行文字を変更することが出来るのでCSVの出力も可能です。–headerオプションでヘッダを付与することもできます。

install.shによるインストールについて

Homebrewを用意しても良かったのですが、今回のツールはLinuxでも手軽に使えるようにしたかったのでcurl hogehoge | shの方法でインストールできるようにしました。githubにinstall.shを上げて、githubに直接アクセスする方法でも良いのですが、URLが長くなってしまいイケてない感じなので、リダイレクタを噛ませてユーザがアクセスするURLは短くするようにしました。全体としては以下のフローになります↓
  1. install.freedom-man.com/dmy.shにアクセス
  2. raw.githubusercontent.com/tzmfreedom/dmy/master/install.shにリダイレクト
  3. install.shをダウンロード+シェル実行
独自ドメインでリダイレクタを設定できるサービスは色々あるんですが、今回はS3のWebホスティングの機能でやってみました。

方法は簡単で以下の手順を踏むだけ。

  1. S3にバケットを登録し、リダイレクタの設定をする(バケット名は独自ドメイン名)
  2. CNAMEを登録
1ではWebサイトのホスティング設定をして、Redirection Rulesを設定します。

<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の例)

このエントリーをはてなブックマークに追加