RFC9562 (正式には RFC4122) UUID の作成用
uuid
コマンドラインユーティリティが含まれています注記
w> uuid@11
が利用可能になりました。詳細については、CHANGELOG を参照してください。 TL;DR:
@types/uuid
を削除します)。v1()
、 v6()
、およびv7()
に対するoptions
arg の解釈方法が微妙に変更されました。詳細を見るUint8Array
になりました。 ( parse()
、 stringify()
、またはv1()
~ v7()
にoption#buf
引数を渡す呼び出し元に影響を与える可能性があります。) 1.インストール
npm install uuid
2.UUIDの作成
ESM 構文 (名前付きエクスポートを使用する必要があります):
import { v4 as uuidv4 } from 'uuid' ;
uuidv4 ( ) ; // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'
...CommonJS:
const { v4 : uuidv4 } = require ( 'uuid' ) ;
uuidv4 ( ) ; // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed'
タイムスタンプ UUID、ネームスペース UUID、およびその他のオプションについては、以下をお読みください。
uuid.NIL | nil UUID 文字列 (すべてゼロ) | [email protected] の新機能 |
uuid.MAX | 最大 UUID 文字列 (すべて 1) | [email protected] の新機能 |
uuid.parse() | UUID文字列をバイト配列に変換する | [email protected] の新機能 |
uuid.stringify() | バイト配列を UUID 文字列に変換します | [email protected] の新機能 |
uuid.v1() | バージョン 1 (タイムスタンプ) UUID を作成します | |
uuid.v1ToV6() | バージョン 1 の UUID からバージョン 6 の UUID を作成する | uuid@10 の新機能 |
uuid.v3() | バージョン 3 (MD5 を使用した名前空間) UUID を作成する | |
uuid.v4() | バージョン 4 (ランダム) UUID を作成する | |
uuid.v5() | バージョン 5 (SHA-1 を使用した名前空間) UUID を作成する | |
uuid.v6() | バージョン 6 (タイムスタンプ、並べ替え) UUID を作成する | uuid@10 の新機能 |
uuid.v6ToV1() | バージョン 6 UUID からバージョン 1 UUID を作成する | uuid@10 の新機能 |
uuid.v7() | バージョン 7 (Unix エポック時間ベース) UUID を作成する | uuid@10 の新機能 |
uuid.v8() | 「意図的に空白のままにした」 | |
uuid.validate() | 文字列をテストして、それが有効な UUID であるかどうかを確認します | [email protected] の新機能 |
uuid.version() | UUIDのRFCバージョンを検出する | [email protected] の新機能 |
nil UUID 文字列 (すべてゼロ)。
例:
import { NIL as NIL_UUID } from 'uuid' ;
NIL_UUID ; // ⇨ '00000000-0000-0000-0000-000000000000'
最大 UUID 文字列 (すべて 1)。
例:
import { MAX as MAX_UUID } from 'uuid' ;
MAX_UUID ; // ⇨ 'ffffffff-ffff-ffff-ffff-ffffffffffff'
UUID文字列をバイト配列に変換する
str | 有効な UUID String |
返品 | Uint8Array[16] |
投げる | str 有効な UUID でない場合はTypeError |
注記
parse()
およびstringify()
で使用されるバイト配列内の値の順序は、UUID 文字列内の 16 進ペアの左 ↠ 右の順序に従います。以下の例に示すように。
例:
import { parse as uuidParse } from 'uuid' ;
// Parse a UUID
uuidParse ( '6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b' ) ; // ⇨
// Uint8Array(16) [
// 110, 192, 189, 127, 17,
// 192, 67, 218, 151, 94,
// 42, 138, 217, 235, 174,
// 11
// ]
バイト配列を UUID 文字列に変換します
arr | 0 ~ 255 の 16 個の値 ( offset から始まる) のArray のようなコレクション。 |
[ offset = 0] | Number 配列内の開始インデックス |
返品 | String |
投げる | 有効な UUID 文字列を生成できない場合はTypeError |
注記
parse()
およびstringify()
で使用されるバイト配列内の値の順序は、UUID 文字列内の 16 進ペアの左 ↠ 右の順序に従います。以下の例に示すように。
例:
import { stringify as uuidStringify } from 'uuid' ;
const uuidBytes = Uint8Array . of (
0x6e ,
0xc0 ,
0xbd ,
0x7f ,
0x11 ,
0xc0 ,
0x43 ,
0xda ,
0x97 ,
0x5e ,
0x2a ,
0x8a ,
0xd9 ,
0xeb ,
0xae ,
0x0b
) ;
uuidStringify ( uuidBytes ) ; // ⇨ '6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b'
RFC バージョン 1 (タイムスタンプ) UUID を作成する
【 options 】 | 次の 1 つ以上のプロパティを持つObject : |
[ options.node = (random) ] | バイト値のArray[6] としての RFC "node" フィールド (4.1.6 による) |
[ options.clockseq = (random) ] | 0 ~ 0x3fff のNumber としての RFC「クロック シーケンス」 |
[ options.msecs = (current time) ] | RFC「タイムスタンプ」フィールド (ミリ秒Number 、UNIX エポック) |
[ options.nsecs = 0 ] | RFC「タイムスタンプ」フィールド ( msecs に加算するナノ秒Number 、0 ~ 10,000 である必要があります) |
[ options.random = (random) ] | 上記の他のフィールドの生成に使用される 16 個のランダム バイト (0 ~ 255) のArray |
[ options.rng ] | options.random の代替、16 のランダムなバイト (0 ~ 255) のArray を返すFunction |
[ buffer ] | Array | Buffer 指定すると、uuid がoffset から始まるバイト形式でここに書き込まれます。 |
[ offset = 0] | Number buffer 内の UUID バイトの書き込みを開始するインデックス |
返品 | buffer が指定されていない場合は UUID String 、それ以外の場合はbuffer を返す |
投げる | 10M UUID/秒を超える数が要求された場合にError |
注記
デフォルトのノード ID (UUID の最後の 12 桁) は、プロセスの起動時にランダムに 1 回生成され、その後はプロセスの間は変更されません。
注記
options.random
とoptions.rng
v1()
への最初の呼び出しでのみ意味があり、内部node
とclockseq
フィールドを初期化するために渡されることがあります。
例:
import { v1 as uuidv1 } from 'uuid' ;
uuidv1 ( ) ; // ⇨ '2c5ea4c0-4067-11e9-9bdd-2b0d7b3dcb6d'
options
を使用した例:
import { v1 as uuidv1 } from 'uuid' ;
const options = {
node : Uint8Array . of ( 0x01 , 0x23 , 0x45 , 0x67 , 0x89 , 0xab ) ,
clockseq : 0x1234 ,
msecs : new Date ( '2011-11-01' ) . getTime ( ) ,
nsecs : 5678 ,
} ;
uuidv1 ( options ) ; // ⇨ '710b962e-041c-11e1-9234-0123456789ab'
UUID をバージョン 1 からバージョン 6 に変換する
import { v1ToV6 } from 'uuid' ;
v1ToV6 ( '92f62d9e-22c4-11ef-97e9-325096b39f47' ) ; // ⇨ '1ef22c49-2f62-6d9e-97e9-325096b39f47'
RFC バージョン 3 (MD5 を使用した名前空間) UUID を作成する
API はv5()
と同じですが、代わりに「v3」を使用します。
重要
RFC によれば、「下位互換性が問題にならない場合は、SHA-1 [バージョン 5] が推奨されます。」
RFC バージョン 4 (ランダム) UUID を作成する
【 options 】 | 次の 1 つ以上のプロパティを持つObject : |
[ options.random ] | 16 個のランダムなバイトのArray (0 ~ 255) |
[ options.rng ] | options.random の代替、16 のランダムなバイト (0 ~ 255) のArray を返すFunction |
[ buffer ] | Array | Buffer 指定すると、uuid がoffset から始まるバイト形式でここに書き込まれます。 |
[ offset = 0] | Number buffer 内の UUID バイトの書き込みを開始するインデックス |
返品 | buffer が指定されていない場合は UUID String 、それ以外の場合はbuffer を返す |
例:
import { v4 as uuidv4 } from 'uuid' ;
uuidv4 ( ) ; // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'
事前定義されたrandom
値を使用した例:
import { v4 as uuidv4 } from 'uuid' ;
const v4options = {
random : Uint8Array . of (
0x10 ,
0x91 ,
0x56 ,
0xbe ,
0xc4 ,
0xfb ,
0xc1 ,
0xea ,
0x71 ,
0xb4 ,
0xef ,
0xe1 ,
0x67 ,
0x1c ,
0x58 ,
0x36
) ,
} ;
uuidv4 ( v4options ) ; // ⇨ '109156be-c4fb-41ea-b1b4-efe1671c5836'
RFC バージョン 5 (SHA-1 を使用した名前空間) UUID を作成する
name | String | Array |
namespace | String | Array[16] 名前空間 UUID |
[ buffer ] | Array | Buffer 指定すると、uuid がoffset から始まるバイト形式でここに書き込まれます。 |
[ offset = 0] | Number buffer 内の UUID バイトの書き込みを開始するインデックス |
返品 | buffer が指定されていない場合は UUID String 、それ以外の場合はbuffer を返す |
注記
RFC DNS
およびURL
名前空間はv5.DNS
およびv5.URL
として使用できます。
カスタム名前空間の例:
import { v5 as uuidv5 } from 'uuid' ;
// Define a custom namespace. Readers, create your own using something like
// https://www.uuidgenerator.net/
const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341' ;
uuidv5 ( 'Hello, World!' , MY_NAMESPACE ) ; // ⇨ '630eb68f-e0fa-5ecc-887a-7c7a62614681'
RFC URL
名前空間の例:
import { v5 as uuidv5 } from 'uuid' ;
uuidv5 ( 'https://www.w3.org/' , uuidv5 . URL ) ; // ⇨ 'c106a26a-21bb-5538-8bf2-57095d1976c1'
RFC バージョン 6 (タイムスタンプ、並べ替え) UUID を作成する
このメソッドは、uuid.v1() と同じ引数を受け取ります。
import { v6 as uuidv6 } from 'uuid' ;
uuidv6 ( ) ; // ⇨ '1e940672-c5ea-64c0-9b5d-ab8dfbbd4bed'
options
を使用した例:
import { v6 as uuidv6 } from 'uuid' ;
const options = {
node : [ 0x01 , 0x23 , 0x45 , 0x67 , 0x89 , 0xab ] ,
clockseq : 0x1234 ,
msecs : new Date ( '2011-11-01' ) . getTime ( ) ,
nsecs : 5678 ,
} ;
uuidv6 ( options ) ; // ⇨ '1e1041c7-10b9-662e-9234-0123456789ab'
UUID をバージョン 6 からバージョン 1 に変換する
import { v6ToV1 } from 'uuid' ;
v6ToV1 ( '1ef22c49-2f62-6d9e-97e9-325096b39f47' ) ; // ⇨ '92f62d9e-22c4-11ef-97e9-325096b39f47'
RFC バージョン 7 (ランダム) UUID を作成する
【 options 】 | 次の 1 つ以上のプロパティを持つObject : |
[ options.msecs = (current time) ] | RFC「タイムスタンプ」フィールド (ミリ秒Number 、UNIX エポック) |
[ options.random = (random) ] | 上記の他のフィールドの生成に使用される 16 個のランダム バイト (0 ~ 255) のArray |
[ options.rng ] | options.random の代替、16 のランダムなバイト (0 ~ 255) のArray を返すFunction |
[ options.seq = (random) ] | 0 ~ 0xffffffff の 32 ビット シーケンスNumber 。これは、同じミリ秒の時間間隔内で生成される UUID の一意性を保証するために提供される場合があります。デフォルト = ランダムな値。 |
[ buffer ] | Array | Buffer 指定すると、uuid がoffset から始まるバイト形式でここに書き込まれます。 |
[ offset = 0] | Number buffer 内の UUID バイトの書き込みを開始するインデックス |
返品 | buffer が指定されていない場合は UUID String 、それ以外の場合はbuffer を返す |
例:
import { v7 as uuidv7 } from 'uuid' ;
uuidv7 ( ) ; // ⇨ '01695553-c90c-705a-b56d-778dfbbd4bed'
「意図的に空白のままにした」
注記
バージョン 8 (実験的) UUID は、「実験的またはベンダー固有の使用例用」です。 RFC はそれらの作成アルゴリズムを定義していないため、このパッケージはv8()
メソッドを提供しません。ただし、 validate()
とversion()
メソッドはそのような UUID でも機能します。
文字列をテストして、それが有効な UUID であるかどうかを確認します
str | 検証するString |
返品 | 文字列が有効な UUID の場合はtrue 、それ以外の場合はfalse |
例:
import { validate as uuidValidate } from 'uuid' ;
uuidValidate ( 'not a UUID' ) ; // ⇨ false
uuidValidate ( '6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b' ) ; // ⇨ true
validate
とversion
一緒に使用すると、バージョンごとの検証、たとえば v4 UUId のみの検証を行うことができます。
import { version as uuidVersion } from 'uuid' ;
import { validate as uuidValidate } from 'uuid' ;
function uuidValidateV4 ( uuid ) {
return uuidValidate ( uuid ) && uuidVersion ( uuid ) === 4 ;
}
const v1Uuid = 'd9428888-122b-11e1-b85c-61cd3cbb3210' ;
const v4Uuid = '109156be-c4fb-41ea-b1b4-efe1671c5836' ;
uuidValidateV4 ( v4Uuid ) ; // ⇨ true
uuidValidateV4 ( v1Uuid ) ; // ⇨ false
UUIDのRFCバージョンを検出する
str | 有効な UUID String |
返品 | Number UUID の RFC バージョン |
投げる | str 有効な UUID でない場合はTypeError |
例:
import { version as uuidVersion } from 'uuid' ;
uuidVersion ( '45637ec4-c85f-11ea-87d0-0242ac130003' ) ; // ⇨ 1
uuidVersion ( '6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b' ) ; // ⇨ 4
注記
このメソッドは、 NIL
UUID の場合は0
を返し、 MAX
UUID の場合は15
返します。
UUID は、 uuid
使用してコマンド ラインから生成できます。
$ npx uuid
ddeb27fb-d9a0-4624-be4d-4615062daed4
デフォルトではバージョン 4 の UUIDS が生成されますが、他のバージョンもサポートされています。詳細については、 uuid --help
と入力してください。
$ npx uuid --help
Usage:
uuid
uuid v1
uuid v3 < name > < namespace uuid >
uuid v4
uuid v5 < name > < namespace uuid >
uuid v7
uuid --help
Note: < namespace uuid > may be " URL " or " DNS " to use the corresponding UUIDs
defined by RFC9562
options
タイムスタンプ UUID の処理uuid@11
より前は、 options
状態が、タイムスタンプ ベースの UUID ( v1()
、 v6()
、およびv7()
メソッド) の一意性を保証するために使用される内部状態に干渉する可能性がありました。 uuid@11
以降、この問題は、可能な 2 つの動作から選択するためのフラグとしてoptions
引数の存在を使用することで解決されました。
options
なし: 内部状態を利用して UUID の一意性を向上させます。options
あり: 内部状態は使用されず、代わりに必要に応じて適切なデフォルトが適用されます。 ブラウザ: uuid
ビルドは、デスクトップ Chrome、Safari、Firefox、Edge の最新バージョンに対してテストされます。これらの同じブラウザのモバイル バージョンも動作すると予想されますが、現在はテストされていません。
ノード: uuid
ビルドは、ノード (LTS リリース) に加えて 1 つ前のノードに対してテストされます。たとえば、 node@18
保守モードであり、 node@22
は現在の LTS リリースです。したがって、 uuid
、 node@16
node@22
をサポートします。
Typescript : 過去 2 年以内にリリースされた TS バージョンがサポートされています。ソース
react-native-get-random-values
をインストールするuuid
の前にインポートします。 uuid
他のインポートの推移的な依存関係としても表示される可能性があるため、エントリ ポイントの最初の部分として、 react-native-get-random-values
インポートするのが最も安全です。 import 'react-native-get-random-values' ;
import { v4 as uuidv4 } from 'uuid' ;
README_js.md から生成されたマークダウン