UUID基礎
UUIDとはUniversally Unique Identifierの略称であり、コンピュータシステム上で対象を一意に識別するためのIDのことです。
IDをいつどこで生成しても、過去/未来のどのIDとも重複しないことが約束されているため、
ソフトウェア上でのオブジェクトを一つに特定したい時に付与するIDとして汎用的に使われます。
IDは128ビットであり、
1a2b3c4d-5ad4-4142-c7a5-1234abcd5678 のような16進数の数値+ハイフンで表されます。
その規格はIETFにRFC4122として定められています。
UUIDはIDの厳密な生成方法の違いによって、バージョン分けされています。
今現在、ウェブアプリケーションなどソフトウェアで幅広く使われているのはバージョン4という印象です。
ちなみに、バージョン4は乱数を用いてIDを生成するのが特徴です。
(他のバージョンでは時刻を使ったりMACアドレスを使ったりと、さまざまなパターンがあります。
ここのあたりのアルゴリズム関連は小難しい話になってしまうのでwikipedia先生に頼ることをお勧めします→https://ja.wikipedia.org/wiki/UUID)
バージョンは判別可能
どのバージョンで生成されたIDなのかは、ID文字列から判別することができます。
UUIDは「{8桁}-{4桁}-{4桁}-{4桁}-{12桁}」の構造になっているのですが、
ハイフンで区切った先頭から3つ目のかたまり(4桁)の冒頭一文字が、そのままバージョンの数値になっています。
例えば、「1a2b3c4d-5ad4-4142-c7a5-1234abcd5678」となっていたら、このIDはバージョン4ということですね。
プログラミング言語ごとのライブラリ
プログラミングをしているとき、一意に判別可能なIDを使いたいという時は多いと思います。
そんな時は自前でIDを生成するアルゴリズムを考えて作ったりはせず、用意されているライブラリを使うことを強くお勧めします。
言語によっては標準のライブラリに備え付けられているものもあります。
Python
Pythonではバージョン2.5以降で、uuidが標準ライブラリとして備わっています。
そのためPythonを使える環境であれば、明示的に外部からライブラリをインポートすることなく使用できます。
Java
java.utilパッケージにuuidのためのライブラリが組み込まれています。
Ruby
標準ライブラリであるSecureRandomで提供されています。
PHP
ユニークなIDを生成するuniqidという関数はあるのですが、時刻に基づいてIDを生成するのでバージョン4の要件は満たせてなさそうです。
さらに言えば、この関数は戻り値が一意であることを保証していないため、重複が許されないパターンでは使わない方が良さそうです。↓
乱数を使用したバージョン4のUUIDを生成するには、自前で関数を実装する必要がありそうです。
Go言語
標準ライブラリには含まれていませんが、外部パッケージでサポートされています。
google/uuidパッケージはpborman/uuidパッケージを元にして作られたもので、両者の違いとしてはIDを配列として保存するか、スライスとして保存するかといったものがあります。
Javascript
バージョン4のuuidを生成するメソッドがあります。一通りの主要ブラウザでも実装済みです。
コメント