はじめに
今回は、UUIDを任意の数発行する必要が出てきた際に作ったツールを共有します。
(すみません、めちゃめちゃ簡易なツールです。)
既存のwebサービスでは100件固定とかで作成できるものがあったのですが、数件〜最大2000件のUUIDを発行する必要があったので、サクッと作っちゃいました。
※UUIDについてのざっくり説明は、下の方に記載してます。
それでは、さっそく今回のコード全体から共有します。
今日のコード
package main
import (
"flag"
"fmt"
uuid "github.com/satori/go.uuid"
)
var countOpt = flag.Int("i", 5, "only \"i\" option")
func main() {
flag.Parse()
for i := 0; i < *countOpt; i++ {
fmt.Printf("%v\n", uuid.NewV4().String())
}
}
実行方法
説明がいらないぐらい簡単ですが、一応実行方法は以下の通りです。
- 上記のコードを、任意のディレクトリに「main.go」等で作ったファイルにコピペする。
- ターミナルでmain.goのあるディレクトリに移動して、おなじみ
$ go run main.go
コマンド。 - ターミナル上にUUIDが5つ生成される。
という流れです。
なお、2.のところで$ go run main.go -i 20
とかにすると、20件のUUIDが生成できます。
解説
ざっくりですが解説します。
今回使用したパッケージ
UUIDの発行の際、今回はGitHubでパッケージを公開されている、satori/go.uuidを使わせて頂きました。
公式はこちらをご参照下さい。
UUIDについて
そもそもUUIDって何?という話ですが、細かく話し出すとかなり長くなってしまうので、ここではシンプルに、一言で説明します。
UUIDとは、(ほぼ100%)他と重複することのないIDです。
まあ、厳密に言うと重複しちゃう可能性は0%ではないのですが…
…まずありえない、といっても良いぐらいの可能性です。
とある考察によると、
1 兆個 UUID を生成した場合、生成した UUID が重複する確率より、隕石が頭に降ってくる確率のほうが高い
…だそうです。
UUIDは重複や偶然の一致が起こりえないと確信して用いることができる。
と書いてあるような状況です。
…いや、もうそれ重複せんやろ!
重複させたくないIDを発行したい場合などで、おすすめの方法です。
コマンドでのオプション渡しには、flagパッケージが便利
コマンドでプログラムを実行する際、オプションの渡し方として、Go言語標準のflagパッケージが便利です。
上記の通り、コマンドの後ろに値を渡すだけで、毎回プログラムを書き換えることなく、UUIDの作成件数を変更させて実行することができます。
使い方についてはとてもシンプルなので、今日のコードをご参照下さい。
さいごに
拙い説明と弱々しいツールですが、誰かの役に立てば幸いです。
以上、最後まで読んで頂きありがとうございました。
参考
satori/uuidの公式GitHub
UUID(v4) がぶつかる可能性を考えなくていい理由
UUID の重複する可能性