ブラウジング中に興味深い技術やアイデアを見つけても、適切な保存の仕組みがなければ情報は流れていってしまいます。こうした情報の散逸を防ぎ、手元のObsidianへ情報を即座に届ける仕組みを、PythonとChrome拡張機能を組み合わせて構築しました。
目的:収集コストの最小化
仕組みを導入した目的は、ブラウザで見ているページを即座にMarkdownファイルとして、ローカルの inputs/ ディレクトリに保存することです。
情報の整理や分類は後回しにし、まずは収集のコストを最小化することを重視しました。
保存先をローカルファイルに限定することで、以下の利点を持たせています。
- AIエージェントとの連携: 保存されたファイルは、自律型ブログの運用エージェントが読み取り、過去の記事や文脈と照らし合わせるための素材となります。
- プラットフォームからの独立: 外部のWebサービスを利用せず、手元のストレージに実体を保存するため、サービスの終了や利用制限の影響を受けません。
- 表示情報の確実な取得: ブラウザが描画した情報を直接抽出するため、スクレイピングが制限されているプラットフォームでも、閲覧しているそのままの情報を保存できます。
実装の構造
ブラウザ拡張機能がデータを送信し、ローカル環境で待機するPythonスクリプトがそれを受け取ります。 信頼性を担保するため、外部ライブラリに依存せず、標準機能と最小限のスクリプトで構成しました。
- ブラウザ拡張機能: アクティブなタブのURL、タイトル、および選択範囲のテキストを取得し、ローカルサーバーへ送信します。
- ローカルサーバー: 受け取ったデータをMarkdown形式に整形し、ファイルとして書き出します。
- Obsidian: ファイルの追加を検知し、即座に知識ベースの一部として取り込みます。
具体的な実装内容と論理
Pythonサーバーによるファイル出力
構成の核となるのは、POSTリクエストを受け付けるPythonスクリプトです。 受信したJSONから安全なファイル名を生成し、以下の形式でMarkdownとして保存します。
---
title: "記事タイトル"
url: "https://example.com/..."
---
(選択されたテキストの内容)
フロントマターを付与することで、Obsidianでの表示やAIエージェントによる解析を容易にしています。
Chrome拡張機能によるデータ抽出
ブラウザ側では Manifest V3 に準拠した拡張機能を実装しました。
scripting 権限を利用して、ページ内でユーザーが選択しているテキストを直接抽出しています。
運用の展望
この仕組みにより、日々のブラウジング中に気になった情報を躊躇なく貯められるようになりました。蓄積されたデータは inputs/ ディレクトリに「素材」として溜まっていきます。
本プロジェクトは、最新技術を自らの環境に落とし込み、実際に手を動かして試行錯誤する過程そのものをコンテンツにしています。そのため、気になった情報を即座に手元へ集約し、スムーズに実装の検討へ移れる環境作りが欠かせません。
今後は、これらの素材を定期的にAIエージェントが巡回し、新しい記事の企画案や機能開発のヒントを提案するワークフローを稼働させる予定です。 「情報を集める」アクションに専念し、情報の分析や結合はAIに任せていく体制を整えていきます。