Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Go 1.27 の標準パッケージに uuid が入った!のでいろいろ喋る / go_127_s...
Search
convto
August 18, 2026
Technology
940
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Go 1.27 の標準パッケージに uuid が入った!のでいろいろ喋る / go_127_std_go_uuid
go 1.27 release party で発表した内容です
https://gocon.connpass.com/event/401603/
convto
August 18, 2026
More Decks by convto
See All by convto
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
11k
monorepo の Go テストをはやくした〜い!~最小の依存解決への道のり~ / faster-testing-of-monorepos
convto
3
750
詳解!defer panic recover のしくみ / Understanding defer, panic, and recover
convto
0
480
MCPと認可まわりの話 / mcp_and_authorization
convto
2
1.8k
バクラクの認証基盤の成長と現在地 / bakuraku-authn-platform
convto
4
2.5k
gob バイナリが Go バージョンによって 出力が変わることについて調べてみた / Investigating How gob Binary Output Changes Across Go Versions
convto
0
190
Go 関連の個人的おもしろCVE 5選 / my favorite go cve
convto
3
680
バイナリを眺めてわかる gob encoding の仕様と性質、適切な使い方 / understanding gob encoding
convto
6
3.6k
みんなでたのしむ math/big / i love math big
convto
0
380
Other Decks in Technology
See All in Technology
AI コーディングと人間の認知スループット / CTO Night & Day 2026 Morning Session / AI Coding and Human Cognitive Throughput
prog893
4
1.2k
Post AI時代のリファクタリング実践記 / Refactoring in the post AI era
kaminashi
1
260
Metadata - Section 1: HTML Basics
mohab1
0
120
宣言型部分更新は何を解決しどこへ向かうのか
shuta13
1
460
DWH の限界突破! AI エージェント向け爆速リアルタイムデータ基盤 ClickHouse
jozono
1
480
コンテナ運用におけるネットワーク・コンテナコストの削減方法/How to Reduce Network and Container Costs in Container Operations
masakiokuda
1
240
Running Kotlin + Quarkus with Lambda
nealle
1
3.8k
PagerDuty Tech Hub-鳴らすけれど、人は動かない
ezaki
0
180
QA4AI 2026-Oct 生成AI時代の品質保証
tokuty
1
870
AI × アーキテクト 第1・2章|生成AIの課題とアーキテクトの素養
daidaidai
0
170
1つのリクエストを追って理解する - llm-dのP/D分離
akhino
1
160
遠藤な_めぐろLT #38 「社内のAI活用推進」@麻布台_20261009
endonanana
0
130
Featured
See All Featured
Amusing Abliteration
ianozsvald
1
350
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.2k
Accessibility Awareness
sabderemane
1
250
GitHub's CSS Performance
jonrohan
1033
470k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
Utilizing Notion as your number one productivity tool
mfonobong
4
620
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
320
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
330
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
270
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
59k
Transcript
Go 1.27 の標準パッケージに uuid が入った!のでいろいろ喋る 新しい uuid パッケージの API ざっと紹介と、UUID
v7 実装の詳細 2026-08-18 Go Release Party @convto
whoami @convto (よみは「こんぶと」です) LayerX所属 (2023-03 -) バクラク事業部 アカウント基盤開発部 IDチーム 2023-09
くらいから ID 基盤の開発に関わっています ID チームなので各種 SNS の ID には一貫性があり、uuid も好きです。 名は体を表す © LayerX Inc.
はじめに Go 1.27 から標準ライブラリで uuid が使える proposal #62026 にて議論されデザイン整理されました パッケージデザイン面の議論めちゃめちゃ面白かったんですが、今回は重要なところだ
け紹介します 今日はせっかくなので深掘りして Go の UUID v7 実装の紹介をできればと思います!か なりいい実装だと思うため © LayerX Inc. 3
はじめに そもそも、なんで今さら標準ライブラリに? uuid 実装は実際にかなり利用されている google/uuid は golang.org/x/crypto や google.golang.org/grpc より
import が多い ref: https://blog.thibaut-rousseau.com/blog/the-most-popular-go-dependency-is/ エコシステムでの長い実運用実績があり、そこから妥当な設計を導ける段階になった © LayerX Inc. 4
はじめに サポート範囲について: v4 と v7 だけサポート google/uuid の利用統計を分析してサポート範囲を決定 version v4
v1 v7 その他 利用率 94.17% 4.39% 1.22% 0.22% 判断 サポート ✘ RFC 9562 が新規利用に非推奨 サポート(v1 の後継として推奨) ✘ 利用傾向などを分析した上で、十分利用されるものに絞ってサポート エコシステムで十分な実験がなされたおかげでこのような議論ができた! © LayerX Inc. 5
はじめに 最終的な API の着地をざっと見る 生成・パースがメインの小さな API version / timestamp などの抽出
API は無い。RFC で推奨される「UUID は不透明な値と して扱う」に従う 6 © LayerX Inc.
UUID v7 の話
UUID v7 の話 UUID v7 のビットレイアウト(RFC 9562) unix_ts_ms 48 bits
ver 4 rand_a 12 bits var 2 rand_b 62 bits 先頭 48 bits が UNIX タイムスタンプ(ミリ秒)→ 時系列ソート可能な ID 時刻順に並ぶので、局所性がほしい用途に向いてる 基本レイアウトはこれで、おおよそのケースに対応できる © LayerX Inc. 8
UUID v7 の話 v7 の基本レイアウトの課題:同一 tick 内の単調性 タイムスタンプはミリ秒精度 同一ミリ秒内に複数採番すると残りはランダムなので、順序が保証されない RFC
9562 はこの対策を実装者が選ぶオプションとして提示している つまり v7 を実装するさいは、単調性に対するスタンスを決めて、 いずれかのオプションを選択しなければいけない © LayerX Inc. 9
UUID v7 の話 オプション実装の概観(RFC 9562 より) unix_ts_ms 48 bits ver
4 rand_a 12 bits ↑ var 2 rand_b 62 bits ↑ 単調性のための利用も可能 ① (OPTIONAL) timestamp の直後の空間をつかってタイムスタンプ精度を上げてもいい (rand の空間を削る) ② (OPTIONAL) さらに、単調増加カウンタを仕込んでもよい(rand の空間を削る) ③ 余った部分は rand で埋める © LayerX Inc. 10
UUID v7 の話 タイムスタンプ精度向上(RFC の Method 3) rand_a の空間を「サブミリ秒タイムスタンプ」に転用する unix_ts_ms
48 bits ver 4 sub-ms ts var 12 bits 2 rand_b 62 bits タイムスタンプが最大 12 bits ぶん高精度化 → 同一 tick に複数採番される確率自体を下げる 実装が単純。時刻の解像度を上げればtick衝突確率がかなり減る ただし衝突確率は下がるだけでゼロにはならない(同一サブミリ秒はあり得る) © LayerX Inc. 11
UUID v7 の話 固定長カウンタ(RFC の Method 1) rand_a の空間を「カウンタ」に転用する unix_ts_ms
48 bits ver 4 counter 12 bits var 2 rand_b 62 bits tick が変わったらランダム値で初期化、同一 tick 内は +1(幅が足りなければ rand_b 側へ拡張も可) ランダム空間を削ってカウンタに充てる 厳密にやるにはカウンタへの競合制御などが必要 カウンタが溢れたときの扱いも考慮する必要がある © LayerX Inc. 12
UUID v7 の話 Monotonic Random(RFC の Method 2) レイアウトは変えず、ランダム空間の「振る舞い」を変える unix_ts_ms
48 bits ver 4 rand_a 12 bits var 2 初回だけ乱数、同一 tick 内は +増分 62 bits カウンタに使う範囲は基本 rand_b. 増分は毎回ランダムな正整数がデフォルト(+1 は採番数が推測できてしまうため、推測困難性重視なら SHOULD NOT) ビット空間はそのまま rand 空間として扱いつつ、tick競合したら rand 振り直さずに同 じ空間に加算して単調増加をケア 前回値の保持・加算をするので、競合管理が必要なのはカウンタと同様 嬉しいのはランダム空間の広さを保ったまま単調にできること © LayerX Inc. 13
UUID v7 の話 組み合わせは自由 = レイアウトは実装者が設計する 例:Method 3 + 1
— rand_a の 12 bits を、タイムスタンプ精度の拡張とカウンタで分け合う unix_ts_ms 48 bits ver sub-ms ts counter var 4 6 6 2 rand_b 62 bits 精度向上で同一 tick の発生自体を減らしつつ、それでも重なったらカウンタで順序を守る 「単調性をどこまで保証したいか」「ロックなどの複雑性をどの程度受け入れられるか」 など求める性質合わせて柔軟に決められる どの性質を取り、何を捨てるかの意思決定が必要 © LayerX Inc. 14
UUID v7 の話 Go UUID v7 実装:プロセス内での単調増加保証 Method 3 をベースに、単調性は
timestamp 側で頑張る unix_ts_ms 48 bits ver 4 sub-ms ts var 12 bits 2 rand_b(毎回ランダム) 62 bits ms 48 + sub-ms 12 をひとつの 60 bit タイムスタンプとして扱う。rand_b はカウンタに使わない 前回採番したタイムスタンプをプロセス内に保持し、前回以下なら前回値 +1 を採用 前回値の参照・更新(加算)は sync.Mutex のロックで保護されている 競合だけでなくクロック逆行なども現実世界のシステムにはありうる 秒単位の大きなクロック逆行時は補正しない(そこまでは保証しない割り切り) © LayerX Inc. 15
UUID v7 の話 個人的にはかなりちょうどいいと思っています サブミリ秒精度で実用上のtick衝突確率はかなり減る その上でロックをとって同一ランタイム内では順序を保証 マシンを跨いだら保証されない この場合でも timestamp 精度は十分高いので、おおよそ順序づけて並べることは可能
tick衝突はかなり発生しづらい © LayerX Inc. 16
まとめ
まとめ まとめ Go 1.27 から std で uuid が使える。v4 /
v7 のみサポート。 UUID v7 の単調性をどう保証するかは、実装者が求める性質からオプションを選ぶ必要 がある カウンタ / monotonic random / timestamp 精度向上、組み合わせもできる Go は「timestamp 精度向上」+「timestamp でベストエフォート単調増加」をやって いる © LayerX Inc. 18
宣伝
None
Bet AI Day 2026 昨年に続き、今年も Bet AI Day を開催します! ©
LayerX Inc.
ご清聴ありがとうございました