@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/2026/03/24/001-uuid-collision-bad-implementation-patterns/#article>
    schema:about <https://comcomponent.com/knowledge/uuid/>, <https://comcomponent.com/knowledge/rfc9562/> ;
    schema:mentions <https://comcomponent.com/knowledge/uuidv4/>, <https://comcomponent.com/knowledge/uuidv7/>, <https://comcomponent.com/knowledge/name-based-uuid/>, <https://comcomponent.com/knowledge/uuidv8/>, <https://comcomponent.com/knowledge/uuidv1-v6/>, <https://comcomponent.com/knowledge/csprng/>, <https://comcomponent.com/knowledge/weak-prng-uuid/>, <https://comcomponent.com/knowledge/generator-state/>, <https://comcomponent.com/knowledge/fork-reseed/>, <https://comcomponent.com/knowledge/namespace-uuid/>, <https://comcomponent.com/knowledge/canonicalization/>, <https://comcomponent.com/knowledge/monotonicity/>, <https://comcomponent.com/knowledge/counter-rollover/>, <https://comcomponent.com/knowledge/clock-rollback/>, <https://comcomponent.com/knowledge/uuid-truncation/>, <https://comcomponent.com/knowledge/db-unique-constraint/>, <https://comcomponent.com/knowledge/uuid-collision/>, <https://comcomponent.com/knowledge/new-record-id-issuance/> .

<https://comcomponent.com/knowledge/uuid/> a skos:Concept ;
    skos:prefLabel "UUID"@ja ;
    skos:definition "128ビットの識別子で、実装上十分な一意性を提供する一方、真のglobal uniquenessを絶対保証はしない識別子形式のこと。"@ja ;
    skos:altLabel "Universally Unique Identifier" ;
    ks:verifiedBy <https://comcomponent.com/knowledge/rfc9562/> .

<https://comcomponent.com/knowledge/rfc9562/> a skos:Concept ;
    skos:prefLabel "RFC 9562"@ja ;
    skos:definition "UUIDの形式、各version、生成のベストプラクティスを定めるIETFの標準文書のこと。"@ja ;
    skos:altLabel "Universally Unique IDentifiers (UUIDs)" .

<https://comcomponent.com/knowledge/csprng/> a skos:Concept ;
    skos:prefLabel "CSPRNG"@ja ;
    skos:definition "次の値を予測しにくいことを設計目標に含む、暗号学的に安全な疑似乱数生成器のこと。"@ja ;
    skos:altLabel "cryptographically secure PRNG" ;
    skos:altLabel "暗号学的に安全な疑似乱数生成器"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/uuidv4/> ;
    ks:prevents <https://comcomponent.com/knowledge/weak-prng-uuid/> .

<https://comcomponent.com/knowledge/uuidv4/> a skos:Concept ;
    skos:prefLabel "UUIDv4"@ja ;
    skos:definition "version/variantを除く122ビットを乱数で埋める、ランダムベースのUUIDのこと。"@ja ;
    skos:altLabel "UUID Version 4" ;
    ks:verifiedBy <https://comcomponent.com/knowledge/rfc9562/> .

<https://comcomponent.com/knowledge/weak-prng-uuid/> a skos:Concept ;
    skos:prefLabel "弱いPRNGによるUUID自作"@ja ;
    skos:definition "一般用途のPRNGを固定seedなどで回し、UUID形式の文字列を自前で組み立てる実装のこと。"@ja ;
    skos:altLabel "自前実装のUUID"@ja ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/new-record-id-issuance/> .

<https://comcomponent.com/knowledge/new-record-id-issuance/> a skos:Concept ;
    skos:prefLabel "新規採番"@ja ;
    skos:definition "新しいレコードに一意な識別子を新規に割り当てる採番という用途・状況のこと。"@ja ;
    skos:altLabel "新規レコードのID発行"@ja .

<https://comcomponent.com/knowledge/name-based-uuid/> a skos:Concept ;
    skos:prefLabel "UUIDv3/v5"@ja ;
    skos:definition "同じnamespaceと同じcanonical nameから同じUUIDを再生成する、決定論的なUUIDv3/UUIDv5の総称のこと。"@ja ;
    skos:altLabel "name-based UUID" ;
    skos:altLabel "決定論的UUID"@ja ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/new-record-id-issuance/> ;
    ks:uses <https://comcomponent.com/knowledge/namespace-uuid/> ;
    ks:requires <https://comcomponent.com/knowledge/canonicalization/> ;
    ks:verifiedBy <https://comcomponent.com/knowledge/rfc9562/> .

<https://comcomponent.com/knowledge/uuidv8/> a skos:Concept ;
    skos:prefLabel "UUIDv8"@ja ;
    skos:definition "一意性が実装依存であり前提にしてはいけないと定められた、実験用・ベンダー独自用のUUIDのこと。"@ja ;
    skos:altLabel "UUID Version 8" ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/new-record-id-issuance/> ;
    ks:verifiedBy <https://comcomponent.com/knowledge/rfc9562/> .

<https://comcomponent.com/knowledge/uuid-collision/> a skos:Concept ;
    skos:prefLabel "UUIDの衝突"@ja ;
    skos:definition "本来別々であるべき2つ以上の対象に、同じUUID値が発生・付与されてしまうことのこと。"@ja ;
    skos:altLabel "UUIDの重複"@ja ;
    skos:altLabel "duplicate key" .

<https://comcomponent.com/knowledge/generator-state/> a skos:Concept ;
    skos:prefLabel "生成器の状態"@ja ;
    skos:definition "乱数の内部状態、clock sequence、カウンタなど、次のUUIDを決める生成器の状態のこと。"@ja ;
    skos:altLabel "generator state" .

<https://comcomponent.com/knowledge/counter-rollover/> a skos:Concept ;
    skos:prefLabel "カウンタの桁あふれ"@ja ;
    skos:definition "カウンタが最大値を超えて0へ戻ることのこと。"@ja ;
    skos:altLabel "counter rollover" .

<https://comcomponent.com/knowledge/clock-rollback/> a skos:Concept ;
    skos:prefLabel "時刻の巻き戻り"@ja ;
    skos:definition "NTP補正や手動変更で、システム時刻が前の値へ戻ることのこと。"@ja ;
    skos:altLabel "clock rollback" .

<https://comcomponent.com/knowledge/uuid-truncation/> a skos:Concept ;
    skos:prefLabel "UUIDの切り詰め"@ja ;
    skos:definition "先頭数文字だけの利用や64ビット整数への圧縮など、128ビットの一意性の材料そのものを削る変換のこと。"@ja ;
    skos:altLabel "切り詰め"@ja ;
    skos:altLabel "prefix比較"@ja ;
    ks:mayCause <https://comcomponent.com/knowledge/uuid-collision/> .

<https://comcomponent.com/knowledge/db-unique-constraint/> a skos:Concept ;
    skos:prefLabel "DB側の一意制約"@ja ;
    skos:definition "列や列集合の値がテーブル全体で一意であることを保証する、DB側のUNIQUE/PRIMARY KEY制約のこと。"@ja ;
    skos:altLabel "UNIQUE制約"@ja ;
    skos:altLabel "PRIMARY KEY制約"@ja ;
    ks:mitigates <https://comcomponent.com/knowledge/uuid-collision/> .

<https://comcomponent.com/knowledge/fork-reseed/> a skos:Concept ;
    skos:prefLabel "fork後の再seed"@ja ;
    skos:definition "process forkのような状態変化のたびに、CSPRNGの状態を再seedすることのこと。"@ja ;
    skos:altLabel "再初期化"@ja ;
    ks:mitigates <https://comcomponent.com/knowledge/uuid-collision/> .

<https://comcomponent.com/knowledge/uuidv7/> a skos:Concept ;
    skos:prefLabel "UUIDv7"@ja ;
    skos:definition "48ビットのUnixミリ秒タイムスタンプに、乱数やcarefully seeded counterによる74ビットを組み合わせる、時系列ソート可能なUUIDのこと。"@ja ;
    skos:altLabel "UUID Version 7" ;
    ks:verifiedBy <https://comcomponent.com/knowledge/rfc9562/> .

<https://comcomponent.com/knowledge/monotonicity/> a skos:Concept ;
    skos:prefLabel "単調性"@ja ;
    skos:definition "あとから作ったUUIDのほうが必ず大きい値になる性質のこと。"@ja ;
    skos:altLabel "monotonicity" .

<https://comcomponent.com/knowledge/namespace-uuid/> a skos:Concept ;
    skos:prefLabel "namespace"@ja ;
    skos:definition "UUIDv3/v5で名前を解釈する文脈を決める、name-based UUID生成に使うほうのUUIDのこと。"@ja ;
    skos:altLabel "名前空間"@ja .

<https://comcomponent.com/knowledge/canonicalization/> a skos:Concept ;
    skos:prefLabel "正規化"@ja ;
    skos:definition "大文字小文字や末尾のスラッシュまで含め、同じ対象を指す文字列を1つの形にそろえる処理のこと。"@ja ;
    skos:altLabel "canonicalization" .

<https://comcomponent.com/knowledge/uuidv1-v6/> a skos:Concept ;
    skos:prefLabel "UUIDv1/v6"@ja ;
    skos:definition "MACアドレス由来のnodeとclock sequenceを使う時刻系のUUIDのこと。UUIDv6はDB localityの改善のためUUIDv1を並べ替えたもの。"@ja ;
    skos:altLabel "時刻系UUID"@ja ;
    skos:altLabel "node/clock sequence based UUID" ;
    ks:verifiedBy <https://comcomponent.com/knowledge/rfc9562/> .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/csprng/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/uuidv4/> ;
    schema:description "UUIDv4はversion/variantを除く122ビットの乱数領域を持ち、RFC 9562はその生成にCSPRNGを使うべきとしている(Section 6.9のSHOULD要件であり、用途によっては例外設計もあり得るとされる)"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc9562#section-6.9>, <https://www.rfc-editor.org/rfc/rfc9562#section-5.4> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/weak-prng-uuid/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/new-record-id-issuance/> ;
    schema:description "一般用途PRNGをseed固定などで回してUUID形式の文字列を自作することは、新規採番用途に用いる実装として推奨されない"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc9562#section-6.9> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/name-based-uuid/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/new-record-id-issuance/> ;
    schema:description "UUIDv3/v5は同じnamespaceと同じnameから同じUUIDを再生成する決定論的IDであり、新規採番用途に用いることは推奨されない"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc9562#section-6.5> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/uuidv8/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/new-record-id-issuance/> ;
    schema:description "UUIDv8の一意性は実装依存であり前提にしてはいけないため、一意性が必要な新規採番用途に用いることは推奨されない"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc9562#section-5.8> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/weak-prng-uuid/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/uuid-collision/> ;
    schema:description "同じseedの一般用途PRNGは別プロセスや別ノードでも同じ系列を再現するため、重複を招くことがある"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc9562#section-6.9>, <https://docs.python.org/3/library/uuid.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/generator-state/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/uuid-collision/> ;
    schema:description "stable storageを持たない実装でVM snapshotやコンテナ複製後に生成器の状態が巻き戻ると、重複が出ることがある"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc9562#section-6.3> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/name-based-uuid/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/uuid-collision/> ;
    schema:description "UUIDv3/v5を毎回新規採番として使うと、同じnamespaceと同じnameから同じUUIDが再生成され重複することがある"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc9562#section-6.5> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/counter-rollover/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/uuid-collision/> ;
    schema:description "UUIDv7で同一ミリ秒内の連番カウンタが桁あふれすると、重複したUUIDが出ることがある"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc9562#section-6.2> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/clock-rollback/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/uuid-collision/> ;
    schema:description "時刻が戻ったときに何もせず生成を続けると、UUIDv7などの時刻系UUIDで重複が出ることがある"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc9562#section-6.2> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/uuid-truncation/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/uuid-collision/> ;
    schema:description "128ビットのうち一意性の材料そのものを削る変換(先頭数文字だけの利用、64ビット整数への圧縮など)は重複を招く"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc9562#section-6.7> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/db-unique-constraint/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/uuid-collision/> ;
    schema:description "UNIQUE/PRIMARY KEY制約は、列や列集合の値がテーブル全体で一意であることを保証し、重複した値の挿入そのものを防ぐ。ただし採番側で重複したUUIDが生成された事実は残るため、衝突そのものを防ぐわけではなく影響を止める仕組みである"@ja ;
    ks:evidence <https://www.postgresql.org/docs/current/ddl-constraints.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/fork-reseed/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/uuid-collision/> ;
    schema:description "process forkのような状態変化のたびにCSPRNGの状態を再seedすることで、状態の巻き戻りによる重複を軽減する"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc9562#section-6.9> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/csprng/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/weak-prng-uuid/> ;
    schema:description "OS/ランタイム標準のCSPRNGベースのUUID API(uuid4()など)をそのまま使うことは、一般用途PRNGでのUUID自作を避ける対策になる"@ja ;
    ks:evidence <https://docs.python.org/3/library/uuid.html> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/uuidv7/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/monotonicity/> ;
    schema:description "単調性を保つよう正しく設計・実装されたUUIDv7は、rand_aを専用カウンタにする、またはrand_bをランダム初期化カウンタとして使うなどの設計を利用する。counter rolloverやclock rollbackを考慮しない自作実装ではこの保証は成り立たない"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc9562#section-6.2> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/counter-rollover/> ;
    rdf:predicate ks:incompatibleWith ;
    rdf:object <https://comcomponent.com/knowledge/monotonicity/> ;
    schema:description "桁あふれ時にタイムスタンプを繰り上げるなどの対策をしていない場合、カウンタが0へ戻るとあとから作ったUUIDのほうが必ず大きくなるという単調性が崩れる"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc9562#section-6.2> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/clock-rollback/> ;
    rdf:predicate ks:incompatibleWith ;
    rdf:object <https://comcomponent.com/knowledge/monotonicity/> ;
    schema:description "時刻が前の値へ戻ったときに何も対策しない場合、あとから作ったUUIDのほうが必ず大きくなるという単調性が崩れる"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc9562#section-6.2> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/name-based-uuid/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/namespace-uuid/> ;
    schema:description "UUIDv3/v5はnamespaceと呼ばれる文脈用UUIDと、canonical nameの組み合わせから決定論的にUUIDを生成する"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc9562#section-6.5> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/name-based-uuid/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/canonicalization/> ;
    schema:description "同じcanonical formatのsame nameをsame namespaceで生成したUUIDが常に等しくなるためには、nameのcanonicalizationを仕様として固定することを前提とする"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc9562#section-6.5> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/uuidv4/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/rfc9562/> ;
    schema:description "UUIDv4の122ビット乱数領域の仕様はRFC 9562のSection 5.4で確認できる"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc9562#section-5.4> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/uuidv7/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/rfc9562/> ;
    schema:description "UUIDv7のtimestampとrandom bits、counterの構成はRFC 9562のSection 5.7で確認できる"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc9562#section-5.7> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/name-based-uuid/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/rfc9562/> ;
    schema:description "UUIDv3/v5のnamespace + canonical nameによる生成規則はRFC 9562のSection 6.5で確認できる"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc9562#section-6.5> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/uuidv8/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/rfc9562/> ;
    schema:description "UUIDv8の一意性が実装依存であることはRFC 9562のSection 5.8で確認できる"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc9562#section-5.8> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/uuidv1-v6/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/rfc9562/> ;
    schema:description "UUIDv6のnode/clock sequenceやDB locality改善の設計はRFC 9562のSection 5.6で確認できる"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc9562#section-5.6> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/uuidv1-v6/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/uuid-collision/> ;
    schema:description "仮想マシンやコンテナの登場でMACアドレスの一意性はもはや保証されず、node IDの複製やclock sequenceの固定値化は重複を招くことがある"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc9562#section-6.4> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/uuid/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/rfc9562/> ;
    schema:description "UUIDの形式全体の仕様はRFC 9562で確認できる"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc9562> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .
