← LOG

PYTHON2026.02.22

Geminiの会話をObsidianに自動保存するツールをPythonで作った話(失敗だらけの開発経緯)

#python#playwright#rpa#obsidian#gemini#pyautogui

はじめに

Gemini(GoogleのAI)の会話を手動でMarkdown保存し、Obsidianのバックアップ用フォルダに溜めていく作業が面倒だったので、「取得件数だけ指定したらあとは自動でエクスポートしてくれるツール」をPythonで作りました。

やっていることは**「RPAならすぐできるレベル」**なのに、ブラウザの起動の仕方・画像クリック・2画面・ダウンロード先・UIのトグルなどで何度もつまずきました。

この記事では、開発の経緯と失敗、どう直したかをまとめます。同じような自動化(ブラウザ+画像クリック+ファイル移動)を試す方の参考になれば幸いです。


なぜ Obsidian に、なぜ Gemini の会話を?

わたしは日々のメモ・調べもの・読んだことを Obsidian に集約しており、リンクや検索で後から参照できる「ナレッジベース」として使っています。ローカルの Markdown なので長期保存やバックアップも安心です。

vault は Google ドライブで同期しており、PC で編集した内容がスマホの Obsidian にも反映されるようにしているので、スマホ・PC の両方で同じノートを確認できます。この運用方法はかなり使えるので、いずれ記事にまとめる予定です。

その Obsidian の vault を Cursor のワークスペースに含めておくことで、コードを書くときにノートを参照したり、逆にノートからコードへ飛んだりしやすくしています。

そこで Gemini の会話も Obsidian に入れておきたい、というのが動機です。

Gemini ではアイデア出し・コードの下書き・調査メモが混ざった会話が溜まりますが、サービス側にだけ置いておくと履歴が流れていくし、過去の議論を「あのときのあの話」として参照しづらい。

エクスポートした Markdown を Obsidian に置いておけば、他のメモや 02_Literature のようなフォルダと一緒に検索・リンクでき、Cursor で作業するときにも過去の会話をすぐ参照できます。

だから「手動で保存して Obsidian に溜める」を続けていたのですが、それが面倒になって自動化ツールを作った、という流れです。


やりたかったこと


失敗①: ブラウザをツールから起動しようとしてハマった

やったこと

最初は「一切手動で触りたくない」と考え、PlaywrightでChromeを起動し、GeminiのURLまで開く方式にしました。

気づき

「起動済みのChromeは操作できない」わけではない。
pyautogui は「今フォーカスがあるウィンドウ」にキー送信・画像クリックできる。つまり ユーザーが普段どおりChromeでGeminiを開いておき、ツールは「接続」と「キー・クリック」だけやればよい という設計にすればよかった。

やった修正


失敗②: CDP接続がずっと「接続できませんでした」

やったこと

原因

やった修正


失敗③: 画像クリックで「pygetwindow がインストールされていません」「pyautogui がインストールされていません」

やったこと

原因

やった修正


失敗④: 「Gemini」でウィンドウを探したらバッチ窓が前面に出た

やったこと

原因

やった修正


失敗⑤: 2画面だと画像クリックできなかった

やったこと

原因

やった修正


失敗⑥: 画像クリック後、マウスがボタンの上にあると次回検出できない

やったこと

原因

やった修正


失敗⑦: Pythonで開いたChromeだとダウンロードが「変な場所」「変な名前」になる

やったこと

原因

やった修正


失敗⑧: 会話一覧が既に開いているのにハンバーガーメニューを押して隠してしまう

やったこと

やった修正


失敗⑨: ダウンロードを検出したのに「ファイルが見つかりません」で移動できない

やったこと

原因

やった修正


現在の運用フロー(まとめ)

  1. chrome_debug.bat を実行 → Chromeがデバッグポート9222で起動(既存Chromeは終了)
  2. そのChromeで Gemini のトップページ を開く(ログイン済み)
  3. gemini-exporter.bat を実行 → 取得件数・スキップ数(前回値がデフォルト)を入力
  4. ダイアログ「Chromeをデバッグモードで…」でOK → ツールがCDP接続し、会話を順に開いてショートカット送信・Markdownボタン画像クリック・ダウンロード待ち・指定フォルダへ移動を繰り返す
  5. 監視モードに入り、以後 _ で始まる .md がDownloadsに出現すれば同フォルダへ自動移動

使っている技術

用途技術
ブラウザ操作(会話一覧の取得・クリック)Playwright(CDP接続)
ウィンドウの前面化pygetwindow
ショートカット送信・画像クリックpyautogui
2画面での画像検索mss(全モニターキャプチャ)+ pyautogui.locate
画像マッチの精度OpenCV(confidence)、Pillow
ファイル監視・移動watchdog
設定・前回値config.json / state.json

まとめ

現在は安定稼働しており、手動で会話を保存して Obsidian に溜める面倒な作業が一つ消えた。

失敗だらけでしたが、その分だけ「なぜ動かないか」を切り分ける経験が積めたので、記事として残しておきます。

Zennでも読む ← LOGに戻る