crypto.randomUUID();
dc2a72c1-aa39-4ab8-b26e-9f3b4892c74d
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();
15579190-a188-11f0-a74c-1f825f8689ea
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";
0199b1eb-9129-74d1-bb25-e1a1b2f8d7f0
検証もあるし、生成時間(タイムスタンプ)も取得できる。
assert(uuid.validate(uuid7));
assertEquals(uuid.extractTimestamp(uuid7));
new Date(uuid.extractTimestamp(uuid7)),
true
1759626629417
Sun Oct 05 2025 01:10:29 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();
0199b1eb-9129-70dc-84fb-66d345b882fd
UUID v7はUUIDから生成時間(タイムスタンプ)を取得することができる。
new Date(ui7.timestamp(ui7.v7()))
Sun Oct 05 2025 01:10:29 GMT+0000 (Coordinated Universal Time)
UUIDのハイフンをなくし、大文字にすることもできる。
そしてこの状態からでもタイムスタンプを取得できる。
ui7.v7({ dashes: false, upper: true });
0199B1EB91297031A2B14849D43EC4D0
ヘッダー定義
import ShortUniqueId from 'https://esm.sh/short-unique-id';
IDに適したランダム文字列を返すライブラリ。UUIDとは異なる。
指定した文字数のランダム文字列を返す。デフォルトでは以下の文字を使う。[0-9][a-z][A-Z]。
const shortUid = new ShortUniqueId();
shortUid.rnd(16);
pg7vNnrXdAoxgK82
辞書を変えると男女ができる。
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();
DVMNqSWbCQISU9WUmMU-H
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();
2ZNEa3WLBKtKUJtYtLD8ib
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();
01K6RYQ49ASH4294ZFJVT1MSJ4
cuidによるユニークID
ヘッダー定義
import { cuid } from 'https://deno.land/x/cuid@v1.0.0/index.js';
タイムスタンプ・カウンタ・ホスト名・乱数からなるユニークID
時間順の並べ替え・同一マシンによる連続作成への耐性・複数マシンでの同時作成耐性という機能が含まれている。
より高い衝突耐性をもつ
cuid2に移行されており非推奨となっているが、一般使用程度ではcuidでも問題にならないようだ。
cuid();
cmgd09gru000002s6eve2cqvl
このcuidのDeno実装ではなく、cuidの元の実装「https://esm.sh/cuid」を使う選択肢もある。
ヘッダー定義
import * as cuid2 from 'https://esm.sh/@paralleldrive/cuid2@2.2.2';
cuidの後継。cuidでの無駄な点や問題点を解消し同じ文字数でもセキュリティを強化した。
同一マシンによる連続作成への耐性・複数マシンでの同時作成耐性という機能が含まれている。
cuid2.createId();
med3lcxlxmxuc2o47mnl1dd4
文字数を減らしたりすることができます。
const cuid2_10 = cuid2.init({ length: 10 });
const cuid2_40 = cuid2.init({ length: 40 });
r00s499444
vyxbhmcp0p1p794f5kb59zbyicda4cl8udh1nhs0