AIで『自分の取扱説明書』を作る|Gemini CLI×Obsidianで過去ツイートを分析してみた
1. 過去ツイート、どれくらい覚えていますか?
過去に自分が書いたツイート、どれくらい覚えていますか?
5年前、3年前の自分が、どんなことに怒って、どんなことに笑っていたのか。
流れていくタイムラインの中では、言葉はすぐに埋もれてしまいます。
でもあの一つひとつの短い文章には、当時の自分の価値観や癖が、そのまま閉じ込められています。
最近話題のAIエージェントの事を調べているうちに、ふと「自分のツイート、全部集めて俯瞰して見られれば、過去の自分に会えるんじゃないか?」と思ったんです。
しかも、ただ読み返すんじゃなくて、AIに任せて整理してみたらどうなるんだろう、と。
自力で全てのツイートを読み返すのは現実的じゃないし、あまり面白くもなさそう……でも、何かしらで分類・整理できたら面白そうだな。
そして実際にやってみたら――
膨大なツイートの中から、忘れていた自分の“地図”が浮かび上がってきました。
それは、こんな感じの景色でした。

2. Gemini CLIとObsidianに出会うまで
きっかけは、とても単純なものでした。
自己分析の本やノート術を試しても、どうも続かない。
言語化しようとすると、頭が真っ白になってしまう。
でも、過去のツイートには、考えるより先に出てしまった“素の自分”が、そのまま残っている気がしたんです。
「これを整理できたら、今まで見えなかった自分が見えるんじゃないか?」
そう思ったとき、ふと目にしたのがGemini CLIでした。
自分のPCのローカル環境で起動でき、フォルダやファイルも操作可能なAIツール。バイブコーディングでPhytonのスクリプトが記述して実行させれば、膨大な文章データを一気にラベル分けしてくれるという話に、妙なわくわく感を覚えました。
さらに、その分類結果をどうやって眺めようか考えていたときに、頭に浮かんだのがObsidianです。
AI関連の記事を読み漁っていると、たびたび目にしたこのツールを使えば、自分の過去を「視ることが出来る」と思いました。
テキストをリンクさせるだけで、点と点がつながり、地図のように広がっていく語られていたあの感覚。
「これだ!」と思いました。
Gemini CLIで分解して、Obsidianで地図にする。
この二つを組み合わせたら、もしかして自分の無意識まで可視化できるんじゃないか——そんな直感から、すべてが始まりました。
3. 実践プロセス
やることはシンプルです。
ツイートを全部集めてAIで分類し、それをObsidianに読み込ませる。
そうすれば、少しずつ地図が出来上がります。
初めてでも大丈夫! 私も最初はチンプンカンプンでした。
一緒に順を追ってやっていきましょう💪
1. Gemini CLIの導入
まずはGemini CLIのセットアップから。
ターミナルで各種操作を行います。
(1) 「Node.js v18」以降をインストール。
(2) 「Gemini CLI」をインストール。
npm install -g @google/gemini-cli
(3) プロジェクトフォルダの作成。
または、既存のプロジェクトフォルダに移動します。
mkdir new-project
cd new-project(4) 「Gemini CLI」を起動。
プロジェクトのルートで「gemini」を実行します。
gemini(5) カラーテーマを選択。
(6) プロンプトが表示されたら、個人のGoogleアカウントでサインイン。
(7) プロンプトを確認。
これにより、「Gemini 2.5 Pro」を使用して、1分あたり最大60件、1日あたり最大1,000件のモデルリクエストが可能になります。

▶️GeminiCLIの導入に関しては、こちらの動画が分かりやすかったです。
👇参考用の外部動画です。
2. Twitterのアーカイブ取得
ツイート全件は、Twitter(X)の[ アカウント設定 ]から「データのアーカイブをダウンロード」機能を使って取得しました。

数日後にメールで届くzipを解凍すると、tweet.js や tweets.csv などのファイルがあります。今回はtweet.jsファイル(ZIPファイル>>dataフォルダの中にあります)を使います。
3. ツイート全件の分類方法
まず、jsファイルをメモ帳で開いてみると

"created at" : の後がツイートした日時
"full text" : のあとが本文のようなので
以下のようなプロンプトでGemini CLIにjsファイルの中身を整えさせました。
「moto-tweets.txt」というテキストファイルから、
以下の条件に従って必要な情報のみを抽出して、
新しいファイル「tweets.txt」として出力してください。
日本語の本文が含まれているため、
エンコーディングの文字化けが起きないように注意してください
(たとえばUTF-8で処理するなど)。
条件は次のとおりです:
1. moto-tweets.txt 内の "created_at" に続く日時情報
2. moto-tweets.txt 内の "full_text" に続く本文
3. 日時情報と本文の情報だけを整理し、
全件を順に記述した新しいテキストファイル「tweets.txt」に保存してください。
Pythonスクリプトを作成してこの処理を行い、スクリプトを実行してください。Gemini CLIにファイルを読ませやすくするために、jsファイルを「moto-tweets.txt」ファイルとして保存してから作業しました。
Pythonの動作環境がない場合は 公式HP からダウンロードしてみてください。
▶️Python(パイソン:プログラミング言語)なんてPCに入れてないよー。という方には、こちらの動画が短くて分かりやすいかもです。
👇参考用の外部動画です。
閑話休題。
次に、投稿日時と本文を抽出した「tweets.txt」のデータを投稿日時ごとにmdファイルとして分解する作業をGemini CLIにやってもらいます。
プロンプトのイメージはこんな感じです。
tweets.txt というファイルを読み込み、以下の処理を行う Python スクリプトを
作成して実行してください。
【前提】
- tweets.txt には複数のツイート情報が含まれています。
- 各ツイートは "created_at: ..." および "full_text: ..."
という行で構成されます。
- 日本語が含まれるため、文字コードは UTF-8 を前提とし、
文字化けを防ぐようにしてください。
【処理内容】
1. 「created_at:」から次の「created_at:」までを1ツイートのまとまりとする。
2. 「created_at」から日付(yyyy-mm-dd)を抽出。
3. 「full_text:」以下の内容をツイート本文とする。
4. 「full_text:」の内容に「RT @」が含まれている場合は、
そのツイート全体を無視(除外)。
5. 本文中にある「https:」で始まるURLを削除。
6. 本文中にある「#」の記号も削除。
7. yyyy-mm-ddごとに、以下のように1つのマークダウンファイルに追記形式で記述:
- 各行には本文を1つずつ記載
- ファイルパスは `tweet/yyyy/mm/tw-yyyy-mm-dd.md` とする(例:`tweet/2025/07/2025-07-08.md`)
【出力形式】
ツイート本文
改行
ツイート本文処理内容の4でRT@を除いているのは、リツイートには自分の感情は反映されていないと考えたためです。
処理内容の6でハッシュタグ(#)を除いているのは、この後のObsidianでの読み込み時に #が残っているとObsidian上でもタグとして機能してしまった為です。
そして次が今回の取り組みの肝になるツイートの分類です。
ツイートの頻出語句、感情語をピックアップするPythonスクリプトをGemini CLIに書かせて分類してみました。
プロンプトのイメージはこんな感じです。
ここから先は
¥ 500
よければ応援していただけると嬉しいです。 いただいたチップは、私の物語のページを少しずつ彩る力に変えさせていただきます。
