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 やタイムスタンプがアップロードされることはありません。

機能

Snowflake ID ジェネレーター の使い方

  1. Discord・Twitter・カスタムのエポックを選びます
  2. Generate で、タイムスタンプと worker・process・sequence の値を設定します
  3. 結果の 64 ビット Snowflake ID をコピーします
  4. Decode に切り替えて Snowflake を貼り付け、そのタイムスタンプとフィールドを読み戻します

入力

175928847299117063  (Discord epoch)

出力

timestamp: 2016-04-30T11:18:25.796Z
worker: 1  process: 0  sequence: 7

Discord の Snowflake をデコードすると、いつ作成されたかとそのフィールドビットが復元されます。

よくあるエラーとトラブルシューティング

よくある質問

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 ツール