LoginSignup
2
0

More than 1 year has passed since last update.

UUIDってなんだぁ...?

Posted at

UUIDってなんだよ

Universally Unique Identifier の略。
世界中で絶対に被らないユニークなIDのこと。オンリーワンです。

UIDとどう違うんだ

基本的にUIDっていうとただのユニークなIDのこと、もしくはユーザー識別のIDを指すとおもいます。
しかし、それはDBの中で固有というだけでべつに世界中に同じIDがあっても大丈夫なのですが、UUIDは絶対に世界中どこをさがしても重複していないIDです。

フォーマットも決まっています
XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
16進数で8桁-4桁-4桁-4桁-12桁の文字列、IDです。これは絶対。128bitで39桁です。

バージョンって?

UUIDにはバージョンが4種類ある。基本バージョン4を使うことがおおい。

バージョン 説明
1 MACアドレスと日付時刻から生成するUUID
2 MACアドレスと日付時刻に加え、ローカルのPOSIXユーザIDから生成するUUID
3 URL、完全修飾ドメイン名、オブジェクト識別子及び識別名から生成するUUID(MD5を使っているため非推奨)
4 擬似乱数から生成するUUID
5 バージョン3のハッシュ関数をMD5からSHA-1にしたもの

どうやって作るんだ?

基本的にライブラリで簡単に作れる模様です。
私はPHPエンジニアなのでPHPの話ですが、Laravel5.6以降だとライブラリすら必要なく、以下でバージョン4を作成できるみたいですね。

use Illuminate\Support\Str;
 
return (string) Str::uuid();

JAVAとかもライブラリなしで簡単に作成できるみたいです。

その他、ramsey/uuidというライブラリをつかえば素のPHPでもCodeigniterとかでも使えます。

インストール

composer require ramsey/uuid
require_once 'vendor/autoload.php';       
use Ramsey\Uuid\Uuid; 

$uuid_var1 = Uuid::uuid1();
$uuid_var4 = Uuid::uuid4();

このようにバージョン指定してUUIDを作成できます。

おわりに

決済とか大規模サービスとかミスが許されない大事なところで使うとよさそうですね。
厳密には絶対に被らないことはないらしいですが、明日私の家にロバートダウニーJrがやってくるくらいありえないので、もしかぶってバグがおこった場合、宝くじでも買いに行きましょう。

API仕様書とかでUUIDキボンヌって書いてるのにただのユニークIDをリクエストに求められたり、逆にUIDキボンヌって書いてあるのにUUIDを作って送らないといけないことを経験したので、自分が利用するときはしっかり明記したい所存。

あと、マイクロソフト様がつくったGUIDとかいうのもあるらしいですが、UUIDと同じものらしいです。明確な違いがあればおしえてください。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0