X(Twitter)スノーフレークIDデコーダー
はじめに
X のすべての投稿には数値の ID が付いており、その数字はランダムではありません。2010年11月以来、X はツイート ID をスノーフレーク形式で構築しています — 投稿の正確な時刻、生成マシンの識別子、シーケンスカウンターを、ソート可能なひとつの数値に詰め込んだ 64 ビット整数です。Toollect の X(Twitter)スノーフレーク ID デコーダーはその数値をほどきます — ツイート ID 2089759704335482961 を貼り付けると、正確な投稿時刻である 2026年8月18日 17:01:54.028 UTC に加え、ワーカー番号・シーケンス・ID の完全なバイナリ構造が返ります。
代わりにステータスリンク全体を貼っても同じように動きます — デコーダーはまず URL から ID を抽出するので、https://x.com/jack/status/2089759704335482961 も裸の数字も同一の結果になります。どちらでも、入力すると8つの結果行が現れます — いつかを示す4行(ローカル時刻、UTC、ISO 8601、Unix ミリ秒、加えてコンパクトな相対経過時間)とビットが何を語るかを示す3行(ワーカー ID、シーケンス、完全な 64 ビットバイナリ)です。
デコードは純粋なビット演算であり、照会ではありません。X への送信は一切なく、API キーも不要で、レート制限も存在しません — 計算は入力しながらブラウザ内で走り、同じ ID は世界のどこでも、永遠に、同じ瞬間へデコードされます。
ユースケース
自分の誕生時刻を密かに刻んでいる数値は、思った以上に多くの仕事で役立ちます。
ジャーナリズムと検証
スクリーンショット・リポスト・引用は、投稿を本来のタイミングから引き剥がします。ID をデコードすればそれが復元されます — 作成された正確なミリ秒が数値の中に書かれており、周囲のページの主張とは無関係です。ファクトチェックでは、投稿が扱う出来事の前か後かを確定するのに使われます — ID は周囲のテキストと違い、後から編集できません。
データ分析とアーカイブ
ID を数値順に並べることは投稿を年代順に並べることです — タイムスタンプ列は不要です。API やデータセットからツイート ID をエクスポートするアナリストは、このデコーダーで ID を暦日に固定し、収集漏れを発見し、複数の URL 形状から到着しても常に同じ数値を持つ同一ツイートを重複排除します。
モデレーションと研究
活動の波を確認する際、相対行は読み上げなしに規模感を即座に伝えます — 数分前か数か月前か。削除パターンや再投稿行動を研究する研究者は ID の範囲をデコードして、もはや公には存在しないタイムラインを再構築します。
開発者と統合
ツイート ID を保存するコードは開発中に健全性チェックをしばしば必要とします — この定数は本当に妥当なツイート ID か、そしてどんな時刻を主張しているのか? ここに値を貼れば1キーで答えが得られ、ISO 出力をコピーすればログ・フィクスチャ・DB シードにそのまま落ちます。
仕組み
ツールは入力しながら動きます — ボタンはありません。すべてのキーストロークが同じ4ステップを通過します。
- 入力を分類 — テキストは2つの形と比較されます — 15〜19 桁の裸のスノーフレークか、それを運ぶ x.com/twitter.com のステータスリンクか。それ以外は無効入力のメッセージを表示します。
- ID を抽出 — URL からはステータスルートと番号以外をすべて無視します — サブドメイン、
/photo/1のような表示バリアント、クエリパラメータは計算に決して届きません。 - ビットをデコード — BigInt シフトで 64 ビット整数からタイムスタンプ・ワーカー・シーケンスを取り出し、Twitter エポックを加算して生オフセットを本物の日付に変換します — 演算の詳細はデコードの仕組みの章にあります。
- 窓を検証 — デコード結果が1分より先の未来に着地する ID は表示の代わりに拒否され、打ち間違いや捏造の数値は自信たっぷりのナンセンスな日付を出す代わりに大音量で失敗します。
すべては1ミリ秒の遙かに下でローカルに起きます。検証窓はフローの中で唯一の判断であり、拒否側に倒れています — 明日投稿されると主張する数値はツイートではありません。
対応する入力形式
2つの入力ファミリーがデコードされ、その他すべては明快なメッセージとともに拒否されます。契約は意図的に狭く — このツールはある一種の数値に対してひとつのことだけをします。
受け付ける形式
| 形式 | 例 | 判定 |
|---|---|---|
| 裸のスノーフレーク | 2089759704335482961 |
ツイート ID |
| ステータスリンク | x.com/jack/status/2089759704335482961 |
URL → ID |
| プロトコルとサブドメイン付き | https://www.twitter.com/jack/status/2089759704335482961/ |
URL → ID |
| モバイルサブドメイン | https://mobile.x.com/jack/status/2089759704335482961 |
URL → ID |
| 短いサブドメイン | m.twitter.com/jack/status/2089759704335482961 |
URL → ID |
| 表示バリアント | x.com/jack/status/2089759704335482961/photo/1 |
URL → ID |
| トラッキングパラメータ | x.com/jack/status/2089759704335482961?s=20&t=abc |
URL → ID |
両ドメイン — x.com と twitter.com — はあらゆるホスト形で同一に振る舞い、https:// 接頭辞は任意、末尾スラッシュ・写真や動画のバリアント・クエリ文字列は容認のうえ破棄されます。どんな姿で届いても、抽出される ID は同一であり、デコード出力は表の7行すべてでバイト単位で一致します。
拒否される形式
| 入力 | 拒否される理由 |
|---|---|
x.com/jack/ |
プロフィール — ステータスルートがなく ID もない |
x.com/i/web/status/2089759704335482961 |
ユーザー名のない Web アプリルート — {user}/status/{id} 形ではない |
x.com/search?q=snowflake |
検索ページ — ID ではなくクエリを運んでいる |
12345678901234(14桁) |
短すぎる — 形式以前か切り詰められたもの |
12345678901234567890(20桁) |
長すぎる — X が発行したことのない値 |
| Discord のスノーフレーク | エラーなくデコードされるが日付が誤り — このツールがしないことを参照 |
2つの拒否には説明が必要です。Web アプリルート x.com/i/web/status/… はシングルページクライアントが内部でアドレスを書き換えるときに現れますが、ユーザー名セグメントを欠くため上の文法に合致しません — 正準形を貼れば同じ ID が普通にデコードされます。そして最終行によく注意してください — Discord の ID は長さチェックを通過し、もっともらしく見える日付にデコードされます。デコーダーはそれを検出できず、この限界は化粧ではなく正直に文書化されています。
Snowflake ID の解剖
スノーフレークは4つのフィールドに切られた 64 ビット整数です。最上位ビットから読みます。
| ビット | 幅 | フィールド | 意味 |
|---|---|---|---|
| 63 | 1 | 符号 | 常に 0 — 符号付き言語で値を正に保つ |
| 62–22 | 41 | タイムスタンプ | Twitter エポック(2010-11-04 01:42:54.657 UTC)からのミリ秒 |
| 21–12 | 10 | ワーカー | どのマシンが ID を生成したか |
| 11–0 | 12 | シーケンス | マシンごとのカウンター — 同じミリ秒内の N 番目の ID |
エポック
タイムスタンプは 1970 年から数えません — 2010年11月4日 01:42:54.657 UTC、つまりスノーフレークサービスが連番 ID に取って代わった瞬間から数えます。新しいエポックを選ぶことでタイムスタンプフィールドは小さく保たれます — 41 ビットは約 2 兆 2000 億ミリ秒、およそ 69.7 年の余裕を格納します。形式が枯渇するのはしたがって 2080 年7月 — 十分に遠く、既存の全クライアントを壊さずにフィールドを広げられない理由のひとつでもあります。
計算例
このサイトの X ツール群全体で使われている ID — 2089759704335482961 — を見てみましょう。フィールド境界で切断すると、デコーダーが印字するすべての値が一目で読み取れます。
| フィールド | ビット範囲 | バイナリ | デコード結果 |
|---|---|---|---|
| タイムスタンプ | 63–22 | 000111010000000001010001011000010000101011 |
2026-08-18T17:01:54.028Z |
| ワーカー | 21–12 | 0101111000 |
376 |
| シーケンス | 11–0 | 000001010001 |
81 |
タイムスタンプ行の先頭のゼロは、常にゼロである符号ビットです。すべての出力行はこの一度の切断から導かれます — タイムスタンプビットが投稿の瞬間となり、ワーカーフィールドが 376 番マシンを指名し、シーケンスはそのマシンがそのミリ秒に発行した 81 番目の ID だったことを示します。
何個の ID が入るか
12 ビットのシーケンスはマシン1台あたりミリ秒ごとに最大 4,096 個の ID を許し、10 ビットのワーカーフィールドは最大 1,024 台のマシンを指名できます。実務ではシーケンスが天井近くまで登ることは稀です — 存在理由は総数ではなく、バーストが決して衝突しないためです。同じマシンの同じミリ秒の2つの ID は、この下位 12 ビットしか違いません。
桁数の年表
タイムスタンプが上位ビットを占めるため、合計値は着実に育ちます — 小数点の桁数は、おおよそ ID がいつ鋳造されたかを語ります。
| 桁数 | 初出 | 時代 |
|---|---|---|
| 15桁 | 2010年11月4日 — 開始当日 | 最古のスノーフレーク群 |
| 16桁 | 2010年11月6日 | 出来高が数日のうちに桁を倍増させた |
| 17桁 | 2010年12月1日 | 1か月経過 |
| 18桁 | 2011年8月7日 | 成長の年 |
| 19桁 | 2018年5月25日 | 現在の帯域 — 今日の ID は 2 から始まる |
だからこそデコーダーは 15〜19 桁だけを受け付けます — 15 桁はスノーフレーク時代の最古参の投稿を、19 桁は 2018 年以降に鋳造されたすべてをカバーし、正当なツイート ID がこの帯域の外に出たことは一度もありません。
デコードの仕組み
数学は3つの操作 — シフトと2つのマスクと1つの加算です。
const TWEET_EPOCH = 1288834974657n; // 2010-11-04T01:42:54.657Z を Unix ms で
timestampMs = Number((id >> 22n) + TWEET_EPOCH);
workerId = Number((id >> 12n) & 1023n); // 中間フィールドの下位 10 ビット
sequence = Number(id & 4095n); // 下位 12 ビット
22 ビット右にシフトするとワーカーとシーケンスのフィールドが捨てられ、独自エポックからのタイムスタンプ オフセットが残ります。エポックを加算すれば通常の Unix ミリ秒になります。マスクは続いて2つの低いフィールドを分離します — & 1023 は 10 ビットを、& 4095 は 12 ビットを保持します。例を改めて計算すると、2089759704335482961 をシフトすると 498237539371 ミリ秒のオフセットが得られ、エポックを足すと 1787072514028、すなわち 2026-08-18T17:01:54.028Z となります。マスクされたワーカーは 376、シーケンスは 81 です。
精度に関する2つの詳細が重要です。第一に、ツールはすべての演算を BigInt で行います — 19 桁の ID は JavaScript の安全な整数範囲(9,007,199,254,740,991)を超え、通常の数値では下位ビットが黙って丸められ、ツールが報告するまさにそのワーカーとシーケンスの値が壊れてしまうからです。第二に、変換後のタイムスタンプは安全な範囲に余裕で収まるため、Date 用に通常の数値として示しても損失はありません。
もうひとつ知っておく価値のあること — 他のプラットフォームは同じ下位 22 ビットを異なる切り方をし、汎用デコーダーはしばしば別システムのフィールド名でラベル付けします。
| プラットフォーム | 下位 22 ビット | 公開仕様 |
|---|---|---|
| X / Twitter | 10 ビットワーカー + 12 ビットシーケンス | ブログ時代の定義。以後文書化されず |
| Discord | 5 ビットワーカー + 5 ビットプロセス + 12 ビットインクリメント | 公式ドキュメント |
| X と同じ切り方、別エポックと base-64 エンコード | コミュニティのリバースエンジニアリング |
ツイート ID を workerOrShard と processId に分けて見せるツールがあれば、それは Discord のラベルを X のビットに被せているのです — 数値は計算できますが、ツイートにプロセスフィールドはなく、下位 12 ビットはプロセス識別子ではなくシーケンスカウンターです。このデコーダーは X が実際に定義しているフィールドに留まります。
使い方
4ステップ、ボタンなし。
- 入力を貼り付け — 裸のツイート ID、または上記の形状の x.com/twitter.com ステータスリンク。
- 時刻グループを読む — ローカル時刻、UTC、ISO 8601、Unix ミリ秒が即座に埋まり、相対行が一目で経過時間を伝えます。
- 解剖グループを読む — ワーカー ID、シーケンス、グループ化されたバイナリが数値の構築方法を示します。
- 必要なものをコピー — 各行に専用のコピーボタンがあります。ISO 行はスプレッドシートとログにきれいに落ちます。
無効な入力は行を空にして単一のエラー行を表示します。入力を直せばエラーは同じく自動的に消えます。
チュートリアル
デコードを端から端まで歩きます。
ステップ 1 — 裸の ID をデコード。 2089759704335482961 を入力に貼り付けます。時刻グループが即座に埋まる — ISO 行 2026-08-18T17:01:54.028Z、Unix 行 1787072514028 — 解剖グループはワーカー 376、シーケンス 81、42/10/12 のグループに分かれたバイナリを報告します。
ステップ 2 — 完全なリンクからデコード。 入力を空にして https://x.com/jack/status/2089759704335482961?s=20&t=abc を貼ります。トラッキングパラメータは何も変えません — 抽出を生き延びるのはステータスルートと ID だけなので、各行はステップ 1 と同一に読めます。
ステップ 3 — ドメイン非依存を確認。 https://www.twitter.com/someone/status/2089759704335482961/ — ユーザー名付きの旧ドメインに末尾スラッシュ — を貼ります。同じ ID、同じタイムスタンプ。リンクがどんな経路で届こうと、中の数値が唯一の真実の源です。
ステップ 4 — 不可能な ID が失敗するのを見る。 20 — スノーフレーク以前の時代、史上初めて投稿されたツイートの ID — を貼ります。デコーダーは拒否します。2桁ではエンコードされたタイムスタンプを運べません。その ID は形式が存在するより何年も前に発行されたからです。拒否は正しく、バグではありません。
ステップ 5 — 出力を役に立つ場所へ。 ISO 行のコピーボタンを押してスプレッドシートのセルに貼ります — 2026-08-18T17:01:54.028Z はテキストとして時系列ソートされ、CSV 往復を生き延び、読むのにタイムゾーンの文脈を必要としません。
プロのヒント
- ID でソートすることは時間でソートすることです。 ツイート ID が列に住むどこでも — エクスポート、データベース、ログ — ID 順は年代順です。デコーダーはその順序に実在の日付をラベル付けする助けになります。
- 保存には ISO 行を優先。 ローカル時刻は読む人の端末設定に依存します。
Z接尾辞付き ISO 8601 はどこでも曖昧さがなく、プレーンテキストとして正しくソートされます。 - タイムゾーンを跨ぐチームには UTC。 アーカイブが大陸にまたがるときは UTC 行で合意すれば、投稿が真夜中を越えたかどうかで誰も争いません。
- トリアージには相対行を使う。 ID の山を見回すとき、コンパクトな経過時間 —
3h、2d、5mo— は完全な日付を読むより速く新鮮と古びを分けます。 - バイナリ行は教材です。 どのビットが正確にタイムスタンプかを見せることは、どんな図よりも速くフォーマット全体を理解させます。
- URL パーサーとペアに。 パーサーはリンクを掃除して正準化し、デコーダーは日付を与えます。同じステータスリンクを両方に通せば、整った URL と検証済みのタイムスタンプを持ち帰れます。
代替手段
ほかにどんな方法でツイート ID は日付になれるでしょうか。
| 方法 | 正しい X フィールド | API/キーが必要 | データをアップロード |
|---|---|---|---|
| 手動のビットシフト | 可能だがミスしやすい | いいえ | いいえ |
| ブラウザコンソールのスニペット | 正しく書ければ | いいえ | いいえ |
| 汎用スノーフレークデコーダー | しばしば Discord ラベル | 場合による | はい、大抵 |
| 自分で計算をスクリプト化 | はい、慎重なら | いいえ | いいえ |
| このツール | はい — ワーカー+シーケンス | いいえ | いいえ |
手動デコードは 2 の累乗と長いバイナリ列 — 一度はできるが永久に面倒で、1 ビット滑れば日付が台無しです。汎用オンラインデコーダーはしばしば Discord を第一に狙い、X のフィールドを誤ラベルし、時にエポックを間違え、そして大抵 ID をサーバーへ送ります。このツールは正確な演算をローカルで実行し、X が定義するとおりにフィールドをラベル付けし、不可能な入力を、自信満々の誤った年を表示する代わりに拒否します。
公式APIとの比較
作成時刻を読むことは、公式経路が厳密に劣る珍しいタスクです。
| 能力 | X API v2 | oEmbed | このツール |
|---|---|---|---|
| 正確な投稿タイムスタンプ | はい(created_at) |
機械可読でない | はい、正確 |
| コスト | 従量課金、無料枠なし | 無料 | 無料 |
| 認証 | 必須 | なし | なし |
| ワーカーとシーケンスの内訳 | いいえ | いいえ | はい |
| レート制限 | あり | 未文書化、実質的に限定的 | なし — ゼロリクエスト |
2026年2月以来、X の API は無料枠のない従量課金です — たった1件のツイートの created_at を取るのにも金がかかり、登録済みの資格情報が要ります。oEmbed は埋め込み用のレンダリング済み HTML を返すだけで、信頼して解析できる構造化タイムスタンプフィールドを持ちません。スノーフレーク演算は同じミリ秒を無料で、オフラインで、永久に届けます — 代償は、数値そのもの以外を何も明かさないことです。まさに下で文書化される限界です。
デコーダー vs. URL パーサー
Toollect には、どちらもステータスリンクを読み、どちらもスノーフレーク ID を知る X ツールが2つあります。両者は異なる質問に答えます。
| 質問 | X URL パーサー | このデコーダー |
|---|---|---|
| これは何種類のリンクか | 全タイプ — ツイート、プロフィール、スペース、リスト、ハッシュタグ、検索 | のみ — ステータス ID を運ぶか |
| URL の清掃と正準化 | はい、削除パラメータ一覧付き | 不要 — 再構築は何もしない |
| ツイート ID の抽出 | はい | はい |
| タイムスタンプのデコード | いいえ — 形式のみ検証 | はい — 仕事の全部 |
| ワーカーとシーケンスの内訳 | いいえ | はい |
| その他のルート(プロフィール、スペース、リスト) | 種類と詳細付きで解析 | 無効として拒否 |
パーサーはリンクのジェネラリスト、デコーダーは数値のスペシャリストです。完全な URL を受け入れるのは便宜にすぎません — リンクに清掃・入力・説明が要った途端、それはパーサーの領土であり、2つのツールは ID のところできれいにバトンタッチします。
このツールがしないこと
デコーダーが過度に信用されないよう、限界に名前を付ける価値があります。
- 何も取得しません。 ゼロリクエスト — ツイートがまだ存在するか、誰が書いたか、何と言っているかは見えません。ID から出てくるのは誕生時に焼き込まれたものだけです。
- 変換を逆にはできません。 日付を ID に戻すと、どのツイートも受け取ったことのない数値が捏造されます —
x.com/i/status/{捏造}を開けば X はページが存在しないと答えます。合成 ID が機能したのは旧無料 API のページネーション閾値としてだけです。今日のウェブでは日付検索演算子がその仕事を直接こなします。 - プラットフォームを区別できません。 Discord のスノーフレークは構造を共有し、ここではエラーなくデコードされます — Discord が 2015 年から数えるため、約4年早い日付にです。入力が他プラットフォームから来たのなら、出力は構成上誤りとして扱ってください。
- 2010 年より前の ID はデコードしません。 スノーフレークサービスより古いツイートは埋め込まれた時計のない小さな連番を持っています — 文字通り、デコードすべきものがありません。
- 推測しません。 受け付けた形のどれにも合致しない入力は、部分的な結果の代わりにエラーメッセージを表示します。
トラブルシューティング
| 問題 | 原因 | 解決策 |
|---|---|---|
| 長い数値でエラーが出る | 15〜19 桁でないか、数字以外の文字を含む | ID 全体をコピー — スプレッドシートのセルは先頭の桁を切り落としたり区切り文字を加えたりすることがあります |
| リンクでエラーが出る | URL に {user}/status/{id} 形がない |
Web アプリ形式 x.com/i/web/status/… ではないか確認 — 代わりにプロフィール名付きの正準リンクを貼ってください |
| Discord のメッセージ ID が問題なくデコードされる | 同じビット分割、別エポック — ツールはプラットフォームを区別できない | 結果を不正と扱ってください。このデコーダーは設計上 X 専用です |
| タイムスタンプが何年もずれているように見える | 上のケースの可能性大 — 他プラットフォームのスノーフレーク | 日付を信用する前に ID の出自を確認してください |
| 相対行が巨大な差を示す | ごく新しい ID か、わずかに異なるシステムクロック | 相対値はあなたの端末の時計と比べます。記録には絶対行を信頼してください |
| ID はデコードされるがツイートが消えている | 削除はオフライン演算には見えない | タイムスタンプは有効な歴史のままです — 存在の確認は X で行う必要があります |
プライバシーとデータの取り扱い
このデコーダーはサイトで最も厳格なプライバシーモデルで動きます — ネットワークリクエストを一切行いません。
- 何もアップロードされません。 デコードはブラウザ内のビット演算です。貼り付けた ID やリンクがサーバーに届くことは決してありません。
- アカウントなし、解析なし、サードパーティスクリプトなし。 ページは自身のコードだけを実行します。
- 何も保存されません。 Cookie なし、訪問間の状態なし — タブを閉じればセッションは消えます。
私的アーカイブ、研究データセット、モデレーション待ち行列の ID を扱うワークフローでも、デコードは完全にお使いのデバイス上で起こります。
技術仕様
詳細:
- 形式 — 64 ビットスノーフレーク — 符号(1 ビット)+ タイムスタンプ(41 ビット、
2010-11-04T01:42:54.657Zからの ms)+ ワーカー(10 ビット)+ シーケンス(12 ビット) - 精度 — 隅々まで BigInt 演算。JavaScript の安全な整数範囲を超えるすべての 19 桁 ID に対して正確
- 検証窓 — デコード結果は現在時刻を 60 秒超えて先行できません。エポック以前の値は 15 桁以上では到達不能
- 入力形式 — 裸の
\d{15,19}、または任意のプロトコル・www./mobile./m.サブドメイン・表示バリアント・クエリ文字列付きの x.com/twitter.com ステータス URL - 出力 — ローカル時刻、UTC 文字列、ISO 8601、Unix ミリ秒、相対経過、ワーカー ID、シーケンス、グループ化 64 ビットバイナリ — 各行が個別にコピー可能
- 処理 — 100% クライアントサイド JavaScript、ゼロネットワークリクエスト、API キーなし、サーバーコンポーネントなし
- ブラウザ対応 — すべてのモダンブラウザ(BigInt と Clipboard API)
機能
- X または Twitter のスノーフレーク ID をミリ秒単位の正確な投稿時刻にデコード
- 裸のツイート ID と x.com / twitter.com のステータスリンク両方に対応 — ID は自動抽出
- デコードした時刻を4つの形式で表示 — ローカル時刻、UTC、ISO 8601、Unix ミリ秒
- ID を構成要素に分解 — ワーカー ID、シーケンスカウンター、完全な 64 ビットバイナリ
- 不可能な値を拒否 — 未来の日付になる ID は推測ではなくエラーを表示
- ブラウザ内で完結し通信ゼロ — API キーもアカウントも不要
- 各結果行をワンクリックでコピー