UUIDとは?主キーに使われる理由と連番との違いをわかりやすく解説

UUIDとは?主キーに使われる理由と連番との違いをわかりやすく解説 知識
UUIDとは?主キーに使われる理由と連番との違いをわかりやすく解説
この記事は約3分で読めます。

未経験でも気軽に!サブスク型プログラミングスクール【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
v2OSのユーザー情報などを追加(特殊)特別なシステムでのみ使用(一般では使わない)普段は使わなくてOK
v3入力した文字列から毎回同じIDを作る(古い方式)「同じ名前」に対して「毎回同じID」を作りたいとき名前にひもづくID
v4完全にランダムな文字列一意なIDがほしいとき全般サイコロで作るID(これが定番)
v5v3と同じだが、より安全に作られる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と連番どっちを使えばいいの?

シーンおすすめの主キー
ローカルでしか使わないIDAUTO_INCREMENT でOK
公開URLで扱うIDUUIDの方が安全
データを他サービスと連携する可能性ありUUID推奨
すべてが単一DBで完結している連番でもOK(だが将来拡張に備えるならUUIDも可)
てんハロ運営者
てんハロ運営者

おつかれさまでした!

更新をF5連打で待つの、そろそろやめませんか?
( ブログ更新をメールでそっとお知らせします🙇‍♂️ )

スパムはしません!詳細については、プライバシーポリシーをご覧ください。

コメント