目次
uuidとは
uuidは「universally unique IDentifiers」の略です。
訳すと「普遍的に一意な識別子」です。
その名の通り、世界中で重複がないユニークな値となり、その一意性が中央サーバーなどの要素に依存しないように設計されているIDです。
その精度は、理論上は例えば100年間ずっと毎秒10億個のUUIDを作成した場合でも重複するUUIDが生成される可能性は約50%。10兆個のUUIDを生成した場合だと重複する可能性は0.00000006%だそうです。
現代の多くのUUIDの実装はIETFのRFC 4122に基づいています。
このRFC 4122では5つの異なる生成方法が定義されています。
UUIDは128ビットのビット列となっており、一般的にはこのビット列を16進数表記して、8-4-4-4-12の形式で表示します.
形式としては。
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
となります。
このMとNであらわされた部分には意味があります。
Nの位置は、そのuuidがRFC 4122に基づいたものかどうかを示します。
RFC 4122に基づいたUUIDはNの位置が「8」「9」「A」「B」のどれかになります。
Mの位置はバージョンです。
uuidを生成する方法には以下の5つがあります。
Mの位置の数字は、このどれで生成されたかを示してます。
ちなみに、現在、一番使われているのばバージョン4です。
それを踏まえて、このサンプルを見れば
3422b448-2460-4fd2-9183-8000de6f8343
このuuidは、RFC4122に基づきバージョン4で生成したuuidであることがわかります。
uuidの生成
uuidは、例えば「iBeacon」というBlueTooth通信を使ったサービスのパケットに含まれているみたいに、すでに割り当てられたものを受け取ってDBでキー情報として管理するようなケースがほとんどです。
自分でuuidを生成するような場面はほぼありません。
なのですが。
とりあえず、やり方だけ調べておきます。
PHPでuuidを生成
標準ライブラリではできません。
外部ライブラリをインストールして使う必要があります。
主だった外部ライブラリとしては。
ramsey/uuid
webpatser/laravel-uuid
なんかがあります。
インストールすれば、以下のような感じで簡単に使えるようです。
use Ramsey\Uuid\Uuid;
$uuid = Uuid::uuid4();
詳しくは、上記GitHubのドキュメント・ソースを見て確認できます。
ただ、テスト用とかの用途で使うだけなら、そのためだけに外部ライブラリをインストールしなくても、以下の記事を参考にして標準ライブラリだけを使って「なんちゃってUUID」を生成しても、いいんじゃないかなと、僕は思います。
ただ、Pythonとかだと簡単に生成できるので、僕の場合は先にテストで必要になりそうな数のuuidをPythonで生成してストックしておいて、それを割り当てる方法をとっていますけど。
Pythonでuuidを生成
RFC 4122に沿った正しいuuidを生成するモジュールが標準で提供されてます。
Pythonはさすがです。
使い方も非常に簡単です。
import uuid
print(uuid.uuid4())
これだけで、以下のようなバージョン4で生成したuuidが表示されます。
90680063-0387-487f-ab82-81e309a4a06d
今回はこんなところで。
ではでは。