Windows操作ログをローカルLLMで解析し、自動で日報を作るツール「Miru-Log」を作った
はじめに
研究活動をしていると「今日何をしていたっけ?」「あのタスクに何時間費やしたっけ?」と疑問に思うことがよくあります。
いちいち記録するのは面倒だし、かといって全画面録画を見返すのも現実的ではありません。
そこで、Windowsの画面を一定間隔でキャプチャし、AIに「今何をしているか」を解析させ、Markdown形式の日報を自動生成するツール Miru-Log を自作しました。
Windows 10/11 で動作します。
このアイディアはけんすう様のスクショを1分ごとに撮る日報ツールを作ったらよかった話
を参考にしました。
開発の背景
セキュリティと利便性の両立
画面キャプチャをAIに解析させるアイデア自体は新しいものではありませんが、最大の懸念点は セキュリティ でした。
研究中のデータ、書きかけの論文、プライベートなメールなどが映ったスクリーンショットを、そのまま外部のクラウドAI(ChatGPTやGeminiなど)に送信するのは抵抗があります。
しかし最近、Qwen 2.5-VL や Gemma 3 といった、ローカル環境でも動作する高性能なマルチモーダルモデルを使えば「画像そのものを外部に出すことなく」内容をテキスト化できます。
そこで本ツールでは、以下のようなハイブリッドな構成を採用しました。
-
ローカル処理(画像解析): キャプチャ画像の内容(「VSCodeでPythonを書いている」「Xで検索している」等)は、ローカルPC内のGPUを使ってテキストデータに変換する。 -
クラウド処理(要約・整形): テキスト化されたログデータのみをクラウドAIに送り、綺麗な日報への整形やGoogleカレンダー連携を行う。
複数台のPCのログを集約
本ツールの特徴として 「記録と解析の分離」 が挙げられます。
observer.py は非常に軽量なため、ノートPCなどの非力なマシンでも問題なく動作します。保存先をDropboxやNASなどの共有フォルダに設定しておけば、複数台のPCのログを一箇所に集約し、帰宅後にGPUを搭載したメインPCでまとめて解析する、といった運用も可能です(下図)。
もちろん、解析の定期実行もできます。
システム構成
全体の処理フローは以下の通りです。ユーザーはWindows PCで observer.py を動かしておくだけで、あとはバックグラウンドで処理が進みます。
各機能の仕組み
1. 画面の記録 (observer.py)
pyautogui を使用して、設定した間隔(デフォルト60秒)でスクリーンショットを撮り続けます。
ディスク容量を圧迫しないよう、前後のフレームに変化がない場合や、PCがロックされている間は保存をスキップする仕組みを入れています。
2. ローカルでの画像解析 (analyzer.py)
保存された画像を、ローカルで立ち上げたLLMサーバー(OllamaやLM Studioなどを想定)にAPI経由で送信します。
プロンプトでは「現在のアクティブウィンドウ」や「操作内容」を簡潔に描写するよう指示しており、以下のようなログが蓄積されます。
Timestamp: 10:15
ActiveWindow: Visual Studio Code
Content: Pythonで画像処理のスクリプトを編集中。OpenCVのインポート部分を確認している。
この時点で画像は不要になるため、即座に削除するか、ローカルのアーカイブフォルダに移動させることで、万が一の流出リスクを最小限に抑えています。
3. 日報の生成とカレンダー連携 (summarizer.py)
1日の終わりに、蓄積されたテキストログ(数千行になることもあります)をGeminiなどのコンテキストウィンドウが広いモデルに投げます。
「この日の活動を時系列でまとめ、取り組んだタスクごとに要約して」と指示することで、人間が読みやすいMarkdownの日報が出来上がります。
また、オプションでGoogleカレンダーにも「作業ブロック」として自動登録するようにしました。これを見ると、自分が「いつ集中していたか」「いつ時間を浪費していたか」が一目瞭然になります。
まとめ
これまではプライバシーの問題で躊躇していた「スクショによるライフログ」ですが、ローカルLLMの性能向上により、実用的なラインに乗ってきたと感じます。
特に「画像は手元で、テキスト処理はクラウドで」という使い分けは、他の機密性の高いタスクでも応用が効きそうです。
リポジトリはこちらで公開しています。興味があれば試してみてください。
https://github.com/yutanakamurajp/miru-log