[Go] UUIDを任意の数だけ生成するツールを作ってみた (解説付)

はじめに

今回は、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())
    }

}

GitHubはこちら

実行方法

説明がいらないぐらい簡単ですが、一応実行方法は以下の通りです。

  1. 上記のコードを、任意のディレクトリに「main.go」等で作ったファイルにコピペする。
  2. ターミナルでmain.goのあるディレクトリに移動して、おなじみ$ go run main.goコマンド。
  3. ターミナル上にUUIDが5つ生成される。
    スクリーンショット 2020-04-11 11.52.27.png

という流れです。
なお、2.のところで$ go run main.go -i 20とかにすると、20件のUUIDが生成できます。
スクリーンショット 2020-04-11 11.52.51.png

解説

ざっくりですが解説します。

今回使用したパッケージ

UUIDの発行の際、今回はGitHubでパッケージを公開されている、satori/go.uuidを使わせて頂きました。
公式はこちらをご参照下さい。

UUIDについて

そもそもUUIDって何?という話ですが、細かく話し出すとかなり長くなってしまうので、ここではシンプルに、一言で説明します。
UUIDとは、(ほぼ100%)他と重複することのないIDです。

まあ、厳密に言うと重複しちゃう可能性は0%ではないのですが…
まずありえない、といっても良いぐらいの可能性です。

とある考察によると、

1 兆個 UUID を生成した場合、生成した UUID が重複する確率より、隕石が頭に降ってくる確率のほうが高い

…だそうです。


Wikipediaにも

UUIDは重複や偶然の一致が起こりえないと確信して用いることができる。

と書いてあるような状況です。

…いや、もうそれ重複せんやろ!

重複させたくないIDを発行したい場合などで、おすすめの方法です。

コマンドでのオプション渡しには、flagパッケージが便利

コマンドでプログラムを実行する際、オプションの渡し方として、Go言語標準のflagパッケージが便利です。
上記の通り、コマンドの後ろに値を渡すだけで、毎回プログラムを書き換えることなく、UUIDの作成件数を変更させて実行することができます。
使い方についてはとてもシンプルなので、今日のコードをご参照下さい。

さいごに

拙い説明と弱々しいツールですが、誰かの役に立てば幸いです。
以上、最後まで読んで頂きありがとうございました。

参考

satori/uuidの公式GitHub
UUID(v4) がぶつかる可能性を考えなくていい理由
UUID の重複する可能性

PON

PON

30代で、完全未経験から独学でWeb系エンジニアになった人。 前職では、超絶ブラック企業にはまり込んでしまい、年間1200時間の残業をしていたが、娘が生まれたことで我に返って転職を決意。 現在は、大阪にあるベンチャー企業の自社開発プロジェクトで、リードエンジニアとして奮闘中。 主戦場はバックエンドで、Pythonでのデータ分析が武器。 とは言いつつ、SPAのフロントエンドを実装したり、インフラ設計したり、スクラム開発でプロジェクト運営したりするなんでも屋。 いつも、ググってきては誰かが書いてくれた記事を見て開発していたが、もらってばかりでなく世の中に返すこともしたいと思い、技術ブログをはじめる。 妻と1歳になる娘の3人暮らし。 最近は一日一食。 何かご用件がある方は、TwitterのDMからどうぞ。