Xのベスト投稿時間を実データから出すツールを作った(前編:時刻が消えたCSV)

# こんにちは、麗です。

SNSをしていると、いろいろ気になることがありませんか。

「自分は、いつ投稿するのが一番いいんだろう?」って。

ネットには「ゴールデンタイムは夜21時」みたいな一般論があふれてるけど、それってあくまで一般論。

フォロワーの生活リズムも投稿の中身も人によって違うんだから、できれば自分のアカウントのデータから答えを出せたらいいな!

そう思って、CSVを放り込むだけで「曜日×時間帯のヒートマップ」が出るツールを作りました!

この記事は前後編に分けてお届けいたします!

前編は「データの壁」、後編は「集計の壁」のお話です。

▼完成したツールはこちらで公開中!

X投稿タイムヒートマップ — urara.dev

「公式アーカイブ申請」をやめて、CSV一枚にした

実はこれ、ゼロからの新作ではありません。 以前「X-analyzer」というツールを作っていて、その改善版にあたります。

dev.urara.dev

前作には、引っかかる点がありました。 データを取るのに「公式アーカイブ」という手の込んだファイルを、自分で申請しないといけなかったんです。 届くまで時間もかかるし、正直、人に勧めづらい。

さらに、昨日は盛り盛りのてんこ盛り。 それはもう不器用な大食いのサラダバーのようなツールになっています(笑)

今回はそこを変えました。 Xプレミアムのアナリティクスから落とせるCSVファイル一枚だけで完結するシンプルなツールにしました。

申請も待ち時間もいりません。

落として、放り込む。

それで終わり。

プレミアムユーザーのみになってしまいますが、入り口を下げることにしました。

今回のいちばん大きな設計判断は、これでした。

ちなみに今回は、相談から実装まで「Fable5」というAIモデルに一貫して伴走してもらいました。

意図を瞬時に汲んでくれて、こちらが言葉にしきれていないところまでアイデアを出してくれるんです。

一人で抱えていた工程が、サクッと進み完成に至りました。

壁その1:CSVに「時刻」が載っていない

作り始めて、最初の壁にぶつかりました。

「時間帯のヒートマップ」を作りたいのに、肝心のCSVに時刻の列がないんです(笑)

日付は「Thu, Jun 11, 2026」のような形で入っているのですが、何時に投稿したのかはどこにも書かれていない。

これでは時間帯の分析ができません。

そこで、Fableが指摘してくれたのが、ポストIDの存在でした。

Xのポストにはそれぞれ固有のIDが振られていて、この数字の中には投稿された時刻の情報がそのまま埋め込まれているそうなんです(Snowflake IDと呼ばれる仕組みです)。

つまり、時刻の列はなくても、IDから逆算して復元できる、というわけですね。

計算式自体はシンプルで、IDをずらして、基準となる日時を足すだけ。

実際に自分の137件のデータで試したら、復元した日付が元の日付列と137件すべて一致したそうです。 (AIにやってもらったので、「そうらしい」としか言えず💦)

なくなったと思っていた時刻が、IDの中から丸ごと戻ってきた瞬間でした。

ただ、ひとつ落とし穴があって、このIDはとても大きな数字なので、うっかり「数値」として読み込むと精度が落ちて壊れてしまいます。

最後まで「文字列」として扱うのが鉄則なんだそう。

地味ですが、致命的なポイントでした。

データの壁は、これで越えられました。

けれど本当の山場は、実データを入れた次の瞬間に待っていました。

その話は後編で!

(後編へ続きます)

▼X投稿ヒートマップ urara.dev