太陽がまぶしかったから

C'etait a cause du soleil.

Pay-Per-Use になった X API でツイートを Obsidian に同期して AI Agent のコンテキストとして献上する

X APIが従量課金になった

かつてTwitter APIが無料だった時代には自動投稿ボットやタイムライン分析などを使い倒していたのだけど、2023年のAPI有料化以降、Basicプランで月額200ドルという壁に阻まれてGrok APIをちょっとした調査に使う程度の利用しかできなくなってしまったのだけど、2026年2月にX APIが従量課金制(Pay-Per-Use)に移行した。最低5ドルのクレジットチャージから始められ、月額200ドルの壁が消えた。

そんなこともあって、X APIから対象期間に行った自身の投稿を OAuth 1.0a で取得し、Obsidian に日付別の Markdown として保存するCLIを作ってみた。

x-importer は X API v2 から自分の投稿や引用RTやリプライ先を再帰的に展開し、t.co 短縮URLはページタイトル付きリンクに復元するなど、後から人やAIが読んでも、文脈を追えることを意識したファイルを出力する。

---
date: 2026-02-21
type: x-posts
---

## Analytics

| Posts | Like | RT | Reply | Imp |
|------:|-----:|---:|------:|----:|
| 5 | 23 | 4 | 2 | 1500 |

---

## [2026-02-21 14:30](https://x.com/username/status/xxxxx)

投稿本文テキスト

[ページタイトル](https://example.com/article)

| Like | RT | Reply | Imp |
|-----:|---:|------:|----:|
| 5 | 2 | 1 | 120 |

PythonスクリプトのCLI化と定期実行設定

PythonスクリプトについてCLIとして実行可能とする場合、現在においてはuv tool install --editable . でCLI化でき、定期実行する場合には cron よりも plist に登録することが推奨されている。

<!-- ~/Library/LaunchAgents/com.x-importer.daily.plist -->
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.x-importer.daily</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/USERNAME/.local/bin/x-importer</string>
    </array>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>1</integer>
        <key>Minute</key>
        <integer>0</integer>
    </dict>
</dict>
</plist>
# plutil -lint ~/Library/LaunchAgents/com.x-importer.daily.plist
# launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.x-importer.daily.plist 
# launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.x-importer.daily.plist

このように設定することで、毎日深夜1時に差分取得されるようになり、仮にMacをスリープしていて処理が起動できなかったとしても、起動時にそれを検知して即時実行される仕組みとなっている。この処理においてはMacの常時起動が必ずしも必須でないのが嬉しい。

全件エクスポートとAPI差分取得とのすみわけ

XはAPI制限が厳しくなって過去ツイートをAPIでよしなに取り出すことが難しくなってしまったが、『全ツイート履歴をダウンロードする方法』で過去ログを取り出すことができる。

以前の記事で14年分のツイートアーカイブをAI資産化する方法を書いた。アーカイブ一括ダウンロード→ローカル処理という力技だったが、これまでの蓄積はアーカイブから無料で取得できる。しかしながらコンテキストとして大事なのはこれからの差分だ。

昨日つぶやいたことやシェアした記事など鮮度のある断片を日々拾い上げてナレッジベースに追加していくことに意味がある。データベースのリカバリ戦略と同じ構造だ。

バックアップ戦略 ツイート取得戦略 頻度 コスト
フルバックアップ アーカイブ一括ダウンロード 1年に数回程度 無料
トランザクションログ API 日次差分取得 毎日 従量課金
ロールフォワード フル + 差分の統合 随時 差分のみ課金

年単位の過去分はバックアップから復元し、数週間〜数ヶ月分はログで差分更新する。毎日毎日フルアーカイブから復元させるのは現実的でないため、このような戦略が良いと考えている。

自分のツイートを取り出すのにATM手数料を払う

冷静に考えると、自分が書いたツイートを自分で取り出すのにお金を払っている。しかもX Premiumには課金済みであるため、銀行に口座維持手数料を払いながらコンビニATMで手数料も取られるのと同じ構造であり、なかなかに理不尽だ。

それでも、Xのタイムラインには思わずツッコミたくなるネタや知らなかった有用な話が流れてくる良さがある。思わず自分の課題意識に我田引水して一言添えたくなるアフォーダンスこそがXの本質的な価値であり、一人で白紙に向かうブレストでは得られない共創プラットフォームであるのだ。

鍵付きアカウントにして引用RTやブログへの言及をすることで通知もいかないし、エゴサーチもされないという運用に落ち着いた。

とはいえ我田引水引用RTは通知が飛ぶ相手にとって迷惑でしかないからアカウントは非公開にしている。鍵付きの引用RTで好き勝手にツッコミを入れ、それがアジールにおける思考の断片として蓄積されていく。15年近く使い続けたインターフェースは身体化されてしまっていて、思考を140文字に圧縮して放流する所作がもはや呼吸のようなものなのだ。

このような前提に立つと「空中リプライ」はAIにとってデバフでしかない。言及先のリンクなしに前提の共有だけで成立する発言は人間同士なら通じるが、AIには文脈を復元できないため引用リツイートしてリンクを作ることが大事になる。

通知が飛ぶ? だから鍵アカウントにしているのだ。X APIの従量課金も行動を変える。他者の有用な投稿はお気に入りやブックマークのエンドポイントで二重に取得するよりも、リツイートして自分の投稿エンドポイントから一気に取得したほうが安くなる。結果として自分のタイムラインこそが単一の取得フィードになり、それがそのままAIへのコンテキストになる。性癖はバレる。

開発環境としての Xとステージング環境としてのブログ

X が限定的な公開で試行錯誤を行う開発環境なのに対して、公開したブログはステージング環境であると考えている。

環境 性質 社会性
開発環境(dev) X(鍵アカウント) 脊髄反射、断片、ツッコミ ほぼゼロ
ステージング環境(stg) ブログ 構成・編集を経た論考 公開だが個人の場
本番環境(prod) 仕事・日常生活 対話、プレゼン、会議 社会的責任を伴う

ツイートという開発環境では好き勝手にコードを書き散らかし、ブログというステージング環境でリファクタリングと体裁を整え、仕事や日常生活という本番環境にデプロイする。当たり前だけど日常生活で小難しい話ばかりしているわけもない。開発環境から本番環境に向かって、徐々に社会性を持った表現にブラッシュアップされていく。

ブログとして公開している以上はそれなりに文章を整えているし、その時点における自分の言葉で自分の意見を反映しているオリジナリティがあるはずだ。これを知識ベースとすることで、AI エージェントが参照しやすい形で自分の思考を蓄積し、活用できるようになる。

取得されたツイートもブログ記事もObsidianに同期され、Obsidianに同期されたファイル群はGitHubを経由してローカルCLI、Deep Research、クラウド上のAI Agentに届いて自動的に読み取れて新たな成果物を生成するCI/CD パイプラインが構築されている。論文の価値は他人からの引用数で測られるというが、このような形で放流されて磨かれていく概念は次の成果物において明示的または暗黙的に引用できる「梯子」になることで価値が測られる。

自分のツイートにATM手数料を払うアンビエントの夢

差分が取れるということは、それをトリガーにできるということだ。ロールフォワードで得られるトランザクションログは「今、何に関心があるか」という鮮度の高いシグナルそのものであり、Ambient Agentにとっての好物となる。

振り返ってみれば、僕がイベント駆動とSlack通知ありきでLLMを組み込んできたのは、無意識に「おせっかい」なAmbient Agentを求めていたからなのかもしれない。

鍵アカウントのタイムラインが思考の触媒になり、そこから生まれた反応の断片をAPIの差分取得で日々拾い上げ、記事生成エージェントのコンテキストとして渡す。朝起きてエディタを開くと、昨晩のツイートから醸成された記事の骨格が置いてある。そういう世界だ。

AIへの有用性や課金体系によって自分の行動が変わってしまうのも癪ではあるが、AIに対して隷属的にコンテキストをエンジニアリングして献上することでうまれる新たな喜びもある。ヘーゲルの「主と奴隷の弁証法」だ。主人であるはずのAIに奉仕するために自らの行動を最適化する奴隷が、その労働を通じて自己意識と技術を獲得していく。

何にせよ、自分のツイートを取得するのにATM手数料を払うのは理不尽だが、その先にあるアンビエントなコンテンツ生成の夢のためならコンビニATMぐらいの手数料は許容しようと思ったりもする。AIやクラウド環境にお金を払っているのはこれだけではないことだし。