テクノロジー

UUIDを短くするライブラリを作った

1: amd64x64 2025/05/10 21:30

単に128bitバイナリのASCIIエンコーディングと違うの。

2: eroyama 2025/05/10 22:25

絵文字にしたらかわいいと思う

3: lainof 2025/05/10 22:56

見た目の良し悪しは主観だけど、URLに使用することを考慮するだけならBase64URLにするかな。

4: swdrsker 2025/05/10 23:42

UUIDを視認して使う必要があるシーンってある?

5: cbkf 2025/05/11 00:43

Base58なんてあるのね。へぇ。自分も(視認性の高い)ランダムパスワード生成C#コードをLINQPadで組んで使ってるので文字種数えてみたら52文字だった。 234789ACEFHJKLMNPRSTUVWXYZacdefghkmnprstuvwxyz#%=@*+

6: psne 2025/05/11 02:29

初めからUUIDを使わずそのように振り出してしまえば良いのでは、と少し思ってしまったやつ。

7: hkdn 2025/05/11 03:23

なるほど、IT系だと妙なところで文字数制限に引っかかる場合もあるから役に立つ場面ありそう

8: higgsino 2025/05/11 04:43

ULIDじゃ駄目なん?ULIDは人間の目で見て紛らわしい文字を除外した特殊なBase32でエンコードされる

9: fusionstar 2025/05/11 06:28

36 文字が 22 文字になったところで「短くてスッキリ」なんて思わないな。

10: hogetax 2025/05/11 06:29

よほどのことが無い限り要件側を調整したいなぁ...採用する仕様としてカジュアルに規格を弄ぶことのリスクはデカい(使用するライブラリが限定されたり、不整合が起きないかチェックしなければならなかったり...)

11: otchy210 2025/05/11 08:01

世の中のほぼ全てのケースで UUID はオーバースペックなので、DB のキーはともかく、URL に表出するのは UUID のうち32bit分くらいで実用上十分では?git のハッシュだって省略表記で困った事ないでしょ?

12: jiro68 2025/05/11 08:05

生成された文字列をデコードする必要は滅多にないはず(あるとすればタイムスタンプを見たい場合位?)だし、他の言語でも簡単に実装可能なのでアリだと思う。有効性検査が必要なら1文字足してチェックサム付ければ

13: strawberryhunter 2025/05/11 08:24

DBにはバイナリで保存される。文字列にするとデフォルトでは16進数、つまりBase16。BaseXXを大きくすれば短くなる。この人は視認性の良いBase58を採用したという話。

14: yamadar 2025/05/11 08:28

RDBだともっと短い桁数で保存されてるよね。推測されにくいURL用ってことなのかな?

15: honeybe 2025/05/11 08:40

Base64だとURL Unsafeなので Base64 URL EncodeしてたがBase58でいいのか。覚えておこう。

16: iphone 2025/05/11 08:56

一瞬なに言いだしたのかと思ったが、情報量を減らすんじゃなく表現形式の無駄を削ったのね。36字固定→22字程度と。

17: toaruR 2025/05/11 10:00

『Base58』

18: gfx 2025/05/11 10:18

人がハンドコピーするとかでなければbase64urlのほうがよさそうな。

19: axljpn 2025/05/11 11:38

Base64URLというのがあるのかー

20: logic 2025/05/11 11:48

これをbase32でやったULIDがすでに定着してるのに

21: shiroemons 2025/05/11 12:03

DBではUUIDv4をidとして使っているけれど、URLにそのままUUIDv4を使いたくなかった。そのため今回のを作成した理解で良いのかな?

22: Kazumi007 2025/05/11 12:12

発想がいいなあ。

23: ockeghem 2025/05/11 12:24

UUIDの形式にこだわらないのであれば暗号論的疑似乱数を直接Base58あるいはBase64URLに変換すればよいのに

24: kmaebashi 2025/05/11 13:08

手打ちすることがないのなら、Base64URLで十分なような……/それに、入力はプログラムから渡すんだから、不正な文字が入ることもなくない?

25: yosiyosiy 2025/05/11 14:42

個人的にはnanoidの方が無難かな https://github.com/ai/nanoid

26: yarumato 2025/05/11 16:38

“WebサービスやAPIで使われるUUIDは、ハイフン込みで36文字と長くてURL埋め込むに不向き。Base64は/+=などURLで不向き。Base58(視認性の悪い文字を除外したアルファベット)でエンコードすると22文字程度、短く使いやすい”

27: kijtra 2025/05/11 20:46

ULIDじゃだめかな。ソートもできるし。

28: L4Ph 2025/05/11 21:06

NanoIDでよくない?の気持ちになった()

29: mayonesbeer 2025/05/12 21:00

👀

30: latena 2025/05/12 21:49
31: wktk_msum 2025/05/13 13:25

UUIDをBitcoinでも使われているBase58でエンコード

32: shingo-sasaki-0529 2025/05/15 00:16

Base58, Base64URLとどう違うんだろって思ったけど、視認性の低い紛らわしい文字を除外してるんだ。ユニークIDの視認性が低い問題って何だろ。既存データの調査するときに目が滑るとかかな。