未経験でも気軽に!サブスク型プログラミングスクール【Freeks】
困ってた自分に届けたい話
「UUIDってなに?ただの英数字の羅列でしょ?主キーなら 1, 2, 3, ...
の連番でいいじゃん。これ間違いのコードだな」と思って、自信満々に連番に直したら……

上司
それ、意図的にUUID使ってるやつだから!
コードレビューで盛大に恥をかいたのは、まぎれもない私です。

てんハロ運営者
この記事は、同じように困っていた方への備忘録兼シェアとして書いています。
UUIDとは?世界で一意なIDを自動で発行する仕組み
UUID(Universally Unique Identifier:ユニバーサルユニークアイデンティファイア)とは、重複しないIDを自動生成するための仕組みです。
たとえば以下のような形式です
550e8400-e29b-41d4-a716-446655440000
Pythonでは uuid4()
を使えば、ランダムなUUID(バージョン4)を簡単に作成できます。
from uuid import uuid4
print(str(uuid4()))
// 出力例: 9b9f8c2b-3b33-4d89-9a5b-b5bfb17906f2
UUIDのバージョン一覧
Ver | どうやって作られる? | どんなときに使う? | イメージ |
---|---|---|---|
v1 | 作成した時間+パソコンの情報 | データを時間順に並べたいとき | タイムスタンプ付きのID |
v2 | OSのユーザー情報などを追加(特殊) | 特別なシステムでのみ使用(一般では使わない) | 普段は使わなくてOK |
v3 | 入力した文字列から毎回同じIDを作る(古い方式) | 「同じ名前」に対して「毎回同じID」を作りたいとき | 名前にひもづくID |
v4 | 完全にランダムな文字列 | 一意なIDがほしいとき全般 | サイコロで作るID(これが定番) |
v5 | v3と同じだが、より安全に作られる | v3と同様。URLやドメイン名に対応した固定IDを作りたいとき | v3の強化版 |
なぜ連番ではダメなの?UUIDが選ばれる理由
理由1: セキュリティが高い
/users/3
のあとに /users/4
が見れてしまうようなアプリ、実際にあります。
連番だと「次のID」が簡単に予測されてしまい、
個人情報の漏洩やなりすましの原因にもなりかねません。UUIDならこのような推測が非常に困難になります。
理由2:分散システムでも安心
複数のサーバー・アプリで同時にデータを保存するとき、連番ではIDがぶつかるリスクがあります。UUIDはそれぞれのシステムが独立して発行しても衝突しないので、分散構成との相性が抜群です。
理由3: 一意性が保証されている
UUIDは世界中で唯一のIDになるように設計されています。
ユーザーID、ファイル名、セッションID、APIキー…「他とかぶってはいけないID」に最適です。
UUIDを使用した実装が知りたい!という方は記事はこちらです🤞
でもUUIDにもデメリットはある
- 読みにくい:長くて人間には読みにくい文字列
- やや遅い場合あり:連番よりもデータベースの処理が遅くなることがある
じゃあ結局、UUIDと連番どっちを使えばいいの?
シーン | おすすめの主キー |
---|---|
ローカルでしか使わないID | AUTO_INCREMENT でOK |
公開URLで扱うID | UUIDの方が安全 |
データを他サービスと連携する可能性あり | UUID推奨 |
すべてが単一DBで完結している | 連番でもOK(だが将来拡張に備えるならUUIDも可) |

てんハロ運営者
おつかれさまでした!
コメント