Snowflake ID ジェネレーター&デコーダー
Twitter や Discord のエポックで 64 ビットの Snowflake ID を生成・デコードします — すべてブラウザ内で。入力したものが端末から離れることはありません。
Snowflake ID ジェネレーターはすべてブラウザ内で動作します。入力またはデコードする ID・タイムスタンプ・フィールド値は端末から離れず、ArrayKit には何もアップロードされません。
ULID ジェネレーターを開く
Snowflake ID ジェネレーター について
Snowflake ID ジェネレーターは、Twitter や Discord と同じ方法で 64 ビットの Snowflake ID を構築します: ミリ秒タイムスタンプ・worker id・process id・ミリ秒ごとの sequence を 1 つの BigInt に詰め込みます。Discord や Twitter のエポックプリセットを選ぶか、独自のエポックを Unix ミリ秒で入力し、タイムスタンプとフィールド値を設定して ID を発行します。Decode に切り替えて任意の Snowflake を貼り付けると、選んだエポックのもとで、正確なミリ秒タイムスタンプ・その ISO 時刻・worker・process・sequence のビットが見えます。Discord メッセージがいつ投稿されたかをリバースエンジニアリングする、テストフィクスチャで ID を再現する、分散 id スキームを健全性チェックするのに便利です。すべてのビットシフトは端末上で行われ、入力した ID やタイムスタンプがアップロードされることはありません。
機能
- タイムスタンプ・worker・process・sequence から 64 ビット Snowflake を生成
- ワンクリックの Discord(1420070400000)と Twitter(1288834974657)エポックプリセット
- 他の Snowflake スキームのための Unix ミリ秒のカスタムエポックフィールド
- Decode モードは任意の Snowflake をタイムスタンプ・ISO 時刻・フィールドビットに変換
- 「Now」ボタンで時計から現在時刻の ID 用にタイムスタンプを設定
- BigInt 演算で 64 ビットすべてを正確に保つ — 大きな ID でも精度の損失なし
- worker・process・sequence がビットをオーバーフローするときの明確な範囲エラー
- すべてブラウザ内で動作し、ID はどのサーバーにも送られない
Snowflake ID ジェネレーター の使い方
- Discord・Twitter・カスタムのエポックを選びます
- Generate で、タイムスタンプと worker・process・sequence の値を設定します
- 結果の 64 ビット Snowflake ID をコピーします
- Decode に切り替えて Snowflake を貼り付け、そのタイムスタンプとフィールドを読み戻します
例
入力
175928847299117063 (Discord epoch)
出力
timestamp: 2016-04-30T11:18:25.796Z
worker: 1 process: 0 sequence: 7
Discord の Snowflake をデコードすると、いつ作成されたかとそのフィールドビットが復元されます。
よくあるエラーとトラブルシューティング
- デコードされたタイムスタンプが数十年ずれている(例: 1970 年や 2100 年)。 — 間違ったエポックでデコードしています。プリセットをソースに合わせて切り替えるか — Discord と Twitter のエポックは数年異なります — 正確なカスタムエポックを設定してください。
- Generate が 'Sequence must be between 0 and 4095.' と報告する。 — sequence フィールドは 12 ビットしかありません。worker と process を 0~31 に、sequence を 0~4095 に保ち、各値がスロットに収まるようにしてください。
- 'Timestamp is before the chosen epoch.' と表示される。 — Snowflake はエポックからのミリ秒を保存するため、タイムスタンプはエポック以降でなければなりません。より後の時刻か、より小さいエポックを選んでください。
- 貼り付けた ID が丸められて見える、または末尾の桁を失う。 — Snowflake は JavaScript の安全整数範囲を超えるため、文字列として扱ってください。このツールは BigInt を使いますが、他のツールが既に浮動小数点として解析した ID を貼り付けるのは避けてください。
よくある質問
- Snowflake ID とは何ですか?
- Snowflake は Twitter と Discord が使う 64 ビットの id で、ミリ秒タイムスタンプ・worker(マシン)id・process id・ミリ秒ごとの sequence を 1 つのソート可能な数値に詰め込みます。これにより、中央のカウンターなしで id が一意かつおおむね時刻順になります。
- Discord メッセージがいつ送られたかを ID からどう見つけますか?
- Discord エポックを選んだ状態で、メッセージ id やユーザー id を Decode に貼り付けます。ツールは 42 ビットのタイムスタンプビットをシフトして取り出し、Discord エポック(1420070400000 ms)を加え、正確な作成時刻を ISO と Unix ミリ秒で表示します。
- Twitter と Discord のエポックの違いは何ですか?
- どちらのレイアウトも同じビット幅ですが、異なる起点からミリ秒を数えます: Twitter は 1288834974657(2010 年 11 月)、Discord は 1420070400000(2015 年 1 月)を使います。間違ったほうでデコードすると、すべてのタイムスタンプがその差だけずれます。
- worker と process が 31 に、sequence が 4095 に制限されるのはなぜですか?
- レイアウトは worker と process にそれぞれ 5 ビット(2^5 − 1 = 31)、sequence に 12 ビット(2^12 − 1 = 4095)を与えます。それらの上限を超える値は次のフィールドにオーバーフローするため、ジェネレーターはそれらを拒否します。
- 自分のサービス用にカスタムエポックを使えますか?
- はい。Custom プリセットを選び、エポックを Unix ミリ秒で入力します。Generate と Decode がその値を使うため、42/5/5/12 のビットレイアウトを保つ任意の Snowflake 形式のスキームで作業できます。
- 生成またはデコードする ID はどこかに送られますか?
- いいえ。すべてのビットシフトは BigInt を使ってブラウザ内で動作します。入力または貼り付けたタイムスタンプ・id・フィールド値は端末から離れず、ArrayKit にアップロードされません。
関連ツール
すべての ArrayKit ツール