← ハシトシステム トップ English ツール ブログ
Snowflake ID を解析する
日時から ID の範囲を求める(逆引き)

上の「サービス(エポック)」と「シフト幅」の設定をそのまま使います。指定した時刻の1ミリ秒に発行されうるIDの最小値と最大値が出ます。「この日時より後に作られたIDだけを抽出する」といった検索条件を書くときに使えます。

Snowflake ID の構造と使いどころ

64ビットの内訳

Snowflake ID は64ビットの整数です。よく使われるレイアウトでは、上位42ビットが「エポックからの経過ミリ秒」、続く5ビットがワーカーID、次の5ビットがプロセスID、下位12ビットが同一ミリ秒内の連番(シーケンス)になります。つまり id >> 22 で経過ミリ秒が取り出せ、そこにエポックを足すと Unix ミリ秒になります。同じミリ秒に最大4096個まで採番できる計算です。

エポックはサービスごとに違う

エポックは「そのサービスが0ミリ秒とする時刻」です。Discord は 2015-01-01 00:00:00 UTC(Unixミリ秒で 1420070400000)、X(旧Twitter)は 1288834974657 を使います。エポックを取り違えると、復元される日時が数年単位でずれます。うまくいかないときは、まずここを疑ってください。

下位ビットの内訳を出す条件

ワーカーID・プロセスID・シーケンスの内訳は、シフト幅が22ビットのときだけ表示します。シフト幅を変えると下位ビットの割り当てもサービスごとに変わるため、推測で分解しません。22以外を指定した場合は、下位ビットの値をまとめて表示します。

よくある質問(FAQ)

Snowflake IDとは何ですか?

64ビットの整数で作られた一意な識別子です。上位ビットに「そのサービスが定めた基準時刻からの経過ミリ秒」が入っているため、IDそのものから作成日時を復元できます。Discord・X(旧Twitter)などが採用しています。

エポックとは何ですか?

そのサービスが「0ミリ秒」とする基準時刻です。Discordは2015-01-01 00:00:00 UTC(1420070400000)、X(旧Twitter)は1288834974657を使います。エポックを間違えると復元される日時がまるごとずれます。

入力したIDはどこかへ送られますか?

送られません。計算はすべてブラウザ内のJavaScript(BigInt)で行われ、IDがサーバーへ送信されることはありません。