crypto.randomUUID();
22796279-ca5c-4dde-b420-1b505c00af43
UUID v4(乱数によるUUID)であり36文字からなっている。(そのうち、ハイフンが4文字分)
UUID(v1~v8など全て)は文字に[0-9][a-f]の16種を使用する。[-]ハイフンは区切り文字として使われる。
ヘッダー定義
import * as uuid from "jsr:@std/uuid";
UUID v1
時間とMACアドレスからなるUUID
uuid.v1.generate();
75b39c00-6f74-11f0-8723-a7f22c080b60
UUID v3
MD5によるUUID
const NAMESPACE_UUID = "67a7713b-ac92-4954-98d3-008a7c01fa55";
const DATA = new TextEncoder().encode("uuid-sample.deno.dev")
uuid.v3.generate(NAMESPACE_UUID, DATA);
7d3d516c-e175-39b7-9e67-8eaadcfd15ab
UUID v4
Denoライブラリにはv4生成機能がなく検査機能(v4.validate)のみある。
上記の標準Web API(crypto.randomUUID)を使用する。
UUID v5
SHA-1によるUUID
const NAMESPACE_UUID = "67a7713b-ac92-4954-98d3-008a7c01fa55";
const DATA = new TextEncoder().encode("uuid-sample.deno.dev")
uuid.v5.generate(NAMESPACE_UUID, DATA);
dc617682-f0df-587e-ae1a-aacda281d2e4
UUID v6
RFC9562にて標準化されたものの非推奨。UUID v1のタイムスタンプの点での改良だがv7の方が良いのでv7推奨となっている
import * as uuid from "jsr:@std/uuid/unstable-v6";
uuid.generate();
UUID v7
タイムスタンプ(Unix Time)によるUUID。UUID v7は2024年5月 RFC9562にて標準化された。
v1 v6よりもこちらの使用が推奨されている。
まだ不安定(unstable)な扱いなためヘッダーが分かれている。いずれは"@std/uuid"に含まれるのだろう。
import * as uuid from "jsr:@std/uuid/unstable-v7";
019869bc-e1bf-75e1-b83d-be3fb1c5433a
検証もあるし、生成時間(タイムスタンプ)も取得できる。
assert(uuid.validate(uuid7));
assertEquals(uuid.extractTimestamp(uuid7));
new Date(uuid.extractTimestamp(uuid7)),
true
1754120643007
Sat Aug 02 2025 07:44:03 GMT+0000 (Coordinated Universal Time)
ui7 によるUUID v7
ヘッダー定義
import * as ui7 from "https://deno.land/x/ui7@v0.2.3/mod.ts";
UUID v7
タイムスタンプ(Unix Time)によるUUID。UUID v7は2024年5月 RFC9562にて標準化された。そのため今後はDeno標準ライブラリのほうが主流になり…そう?
ui7.v7();
019869bc-e1c0-7b01-8cb6-9c9297cf431b
UUID v7はUUIDから生成時間(タイムスタンプ)を取得することができる。
new Date(ui7.timestamp(ui7.v7()))
Sat Aug 02 2025 07:44:03 GMT+0000 (Coordinated Universal Time)
UUIDのハイフンをなくし、大文字にすることもできる。
そしてこの状態からでもタイムスタンプを取得できる。
ui7.v7({ dashes: false, upper: true });
019869BCE1C07407AC2375B9788340A6
ヘッダー定義
import ShortUniqueId from 'https://esm.sh/short-unique-id';
IDに適したランダム文字列を返すライブラリ。UUIDとは異なる。
指定した文字数のランダム文字列を返す。デフォルトでは以下の文字を使う。[0-9][a-z][A-Z]。
const shortUid = new ShortUniqueId();
shortUid.rnd(16);
RQFQMUKQrdPH4UiX
辞書を変えると男女ができる。
const mfUid = new ShortUniqueId({ dictionary: ['男', '女'],});
mfUid.rnd(20);
男女女男女女男女女女男男男女男女女男男男
Nano IDによる21文字に圧縮したUUID v4
ヘッダー定義
import { nanoid } from 'jsr:@sitnik/nanoid'
UUID v4は36文字だが、使用する文字種を増やすことで21文字に圧縮表現したUUID
文字として[0-9][a-z][A-Z][_-]の64種使用する。(つまり変則のBASE64を使用する。)
nanoid();
qQRv5JCggRtC320xXSLd7
uuid58による22文字に圧縮したUUID v4
ヘッダー定義
import * as uuid from "jsr:@nakanoaas/uuid58";
UUID v4は36文字だが、使用する文字種を増やすことで22文字に圧縮表現したUUID
文字として[0-9][a-z][A-Z]の62文字から、見間違えやすい4文字(0,O,l,I)を除いた58種使用する。(BASE58、Bitcoin Addressで使用される)
uuid58();
WVnuaVqeVPfQa5iFBDwCh9
ULIDによる26文字のユニークID
ヘッダー定義
import * as ulid from "jsr:@std/ulid";
UUIDと互換性はないが、同じビット数(128bit)を26文字に圧縮表現したユニークID
文字として[0-9][A-Z(ただしI,L,O,Uを除く)]の32種使用する。(変則のBASE32)
タイムスタンプと乱数からなっているため、生成順による並べ替えが可能です。
Deno標準ライブラリが対応しています。
ulid();
01K1MVSRE14KECBGVWBCDSPF69
cuidによるユニークID
ヘッダー定義
import { cuid } from 'https://deno.land/x/cuid@v1.0.0/index.js';
タイムスタンプ・カウンタ・ホスト名・乱数からなるユニークID
時間順の並べ替え・同一マシンによる連続作成への耐性・複数マシンでの同時作成耐性という機能が含まれている。
より高い衝突耐性をもつ
cuid2に移行されており非推奨となっているが、一般使用程度ではcuidでも問題にならないようだ。
cuid();
cmdty52gx000002s62g8nmtff
このcuidのDeno実装ではなく、cuidの元の実装「https://esm.sh/cuid」を使う選択肢もある。
ヘッダー定義
import * as cuid2 from 'https://esm.sh/@paralleldrive/cuid2@2.2.2';
cuidの後継。cuidでの無駄な点や問題点を解消し同じ文字数でもセキュリティを強化した。
同一マシンによる連続作成への耐性・複数マシンでの同時作成耐性という機能が含まれている。
cuid2.createId();
gohocomhbvntxb1chw23oihj
文字数を減らしたりすることができます。
const cuid2_10 = cuid2.init({ length: 10 });
const cuid2_40 = cuid2.init({ length: 40 });
xrdpysukiw
ywit0s7tic3enx65do2qf7h0tts93vurx6jcc8s7