Skip to content

feat: edge mode(エントロピーモード)を追加 (#6)#7

Merged
mast1ff merged 3 commits into
mainfrom
feat/edge-mode
Jun 2, 2026
Merged

feat: edge mode(エントロピーモード)を追加 (#6)#7
mast1ff merged 3 commits into
mainfrom
feat/edge-mode

Conversation

@mast1ff
Copy link
Copy Markdown
Member

@mast1ff mast1ff commented Jun 2, 2026

概要

issue #6 を実装。serverless / edge 環境(Cloudflare Workers 等)向けに、worker-id の割り当てが不要な edge mode(エントロピーモード) を追加する。

timestamp 以外の 22bit(datacenter 5 + worker 5 + sequence 12)を 暗号学的乱数 crypto.getRandomValues で埋めることで、「timestamp + 22bit のランダム性」により確率的に一意性を確保する。

Closes #6

変更点

src/index.ts

  • SnowflakeMode = "default" | "edge" 型と SnowflakeConfig.mode を追加
  • mode: 'edge':ステートレスにエントロピーで ID を生成(datacenterId / workerId は無視・バリデーションもスキップ)
  • parseSnowflakeId(id, epoch, mode)
    • edge → datacenterId/workerId/sequencenullentropy: number を返す
    • default → 従来どおり + entropy: null
  • getSnowflakeTimestamp / snowflakeToDate / generateSnowflakeId は変更なしで自動対応
  • 既存のデフォルトモードは 完全に不変(後方互換)

src/index.test.ts

  • edge mode のテストを追加(63bit 正整数 / worker-id 無視 / 同一 ms でのエントロピー分散 / 時刻進行での全件ユニーク&昇順 / parse の null・entropy 検証 など)

README.md

  • Quick Start の Edge Mode、API(mode / parse 戻り値)、ID Format のビット図、「DB UNIQUE 制約 + 衝突リトライ推奨」 の注記、Cloudflare Workers 例を edge ベースに更新

pnpm-workspace.yaml

  • pnpm v11 のビルドスクリプト承認設定(@biomejs/biome / esbuild)を追加

ビット割り当て(edge mode)

 1 bit  |  41 bits  |        22 bits
unused  | timestamp |  random entropy (crypto)
  0     |  ms-epoch |  getRandomValues

一意性の前提

22bit = 4,194,304/ms。同一 ms 内で k 個生成時の衝突確率は約 k² / (2·2²²)(例: 100 IDs/ms で約 0.12%)。確率的モードのため、利用側は DB の UNIQUE 制約 + 衝突時リトライ をバックストップとして併用することを推奨(README に明記)。

テスト計画

  • pnpm test(85 件 pass)
  • pnpm test:coverage(全ファイル lines/branches/functions/statements 100%
  • pnpm typecheck
  • pnpm lint
  • pnpm build

🤖 Generated with Claude Code

mast1ff and others added 3 commits June 2, 2026 23:29
タイムスタンプ以外の 22bit を crypto.getRandomValues で埋める mode: 'edge' を追加。worker-id の割り当てが不要で、確率的に一意性を確保する。既存のデフォルトモードは不変(後方互換)。parseSnowflakeId は edge ID を entropy + worker 系 null で返す。テストと README も更新。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@biomejs/biome と esbuild のビルドスクリプトを承認し、pnpm install を警告・プロンプトなしで通せるようにする。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
parseSnowflakeId のシグネチャを lineWidth(100) に合わせて複数行に整形。CI の format チェックを通すための修正。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@mast1ff mast1ff merged commit 6c1cab7 into main Jun 2, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: entropy mode for edge runtime (Snowflake generation without worker-id)

1 participant