『その仕事、AIに任せた後は? あなたの脳を整える、焙煎士の診断ガイド』
PR

【自律AI×第二の脳 第1部】毎朝のAI・テック速報を自動収集し、Slack通知&Obsidianへ直接同期する自律システムの作り方

社会人の勉強

「毎朝のAIやテック業界の最新動向を追いたいけれど、情報が多すぎて追いつかない」
「ニュース収集を自動化しても、データがあちこちに散乱して後から活用できない」

このような悩みを抱えていませんか?

本記事では、RSSによる最新テック記事の収集 ➔ Gemini 3.1 Flash-Lite による要点・発信ネタの自動抽出 ➔ 毎朝7時のSlack通知 ➔ Obsidian(第二の脳)への直接同期 までを一気通貫で完結させる自律自動化システムのアーキテクチャと実装手順を徹底解説します。

[!TIP]
【この記事の要約(TL;DR)】

  1. 全自動リサーチ: ITmedia AI+、Zenn等の一次フィードから最新記事を自動収集し、Gemini 3.1 Flash-Liteで「要約+自身への影響+発信ネタ」を即時生成。
  2. 完全自律配信: Macの常駐機能(launchd)により、PCを開かなくても毎朝7:00にスマホのSlackへ朝刊が届く。
  3. SSOT(第二の脳)設計: 中間JSONを完全に廃止し、Obsidian内のMarkdownファイル(00_Inbox)を唯一のマスターデータとして管理。
  4. 1年後も爆速なダッシュボード: サーバーが必要な分だけMarkdownをオンデマンドパースすることで、1年(365日分)溜まっても0.005秒で高速表示。

📌 【自律AI×第二の脳シリーズ(全3部作)】

1. なぜ「中間DB」を捨てて「Obsidian直結」にしたのか?

A. 自動化ツールが陥りがちな「データの散乱問題」

ニュース要約ツールを開発する際、多くの場合は「取得したデータをJSONやSQLiteに溜めてWeb画面で見る」という設計にしがちです。

しかし、この方法には2つの大きな欠点があります:

  • 1年後のパフォーマンス劣化: 毎日追記される単一JSONファイルは肥大化し、ブラウザの読み込みや検索がどんどん重くなる。
  • 知識の分断: 要約データがツールのデータベース内に閉じ込められ、普段メモや執筆を行っている「Obsidian」と連携できない。

B. Single Source of Truth(唯一の情報源)の確立

そこで採用したのが、「Obsidianノートを唯一のマスターデータ(正本)とするSSOT設計」 です。

  • 毎朝の速報は、直接 Obsidian_Notes/00_Inbox/Daily_Tech_Brief_YYYYMMDD.md に保存する。
  • Webダッシュボードは、そのフォルダ内の最新Markdownファイルを直接読み取って表示するだけにする。

これにより、二重管理の無駄が完全にゼロになり、Obsidianの強力な全文検索やリンク機能を100%活かせるようになります。


2. システムの全体像とコア技術

レイヤー採用技術役割と選定理由
情報収集Python urllib / xml.etree外部依存ライブラリを最小限に抑え、ITmediaやZennのRSSを高速取得
AI要約エンジンGemini 3.1 Flash-Lite高速・超低コストで文脈を理解し、構造化JSONでトピックを抽出
プッシュ通知Slack Incoming Webhook毎朝起きた瞬間にスマホで読めるよう最適化されたフォーマットで通知
ナレッジ保管庫Obsidian (Markdown)「第二の脳」としての永続保存・検索・記事ネタへの引用
定期実行macOS launchdサーバー起動不要。MacのOS機能で毎朝7:00に完全自律実行
UIビューアVanilla HTML / CSS (daily_brief.html)直近ログの展開とアコーディオン開閉、リアルタイム検索

3. 実装のキモ:Pythonスクリプトの設計

A. Gemini 3.1 Flash-Liteによる「実務直結」プロンプト

ただ記事を要約するだけでなく、「自分の開発や発信にどう役立つか」を出力させるプロンプト設計が最大のポイントです。

prompt = f"""あなたは専属のAIアシスタントです。
以下の最新テック・AI記事リストから、個人開発・AI活用・Obsidianを重視するクリエイターにとって価値の高い重要トピックを最大3件厳選し、ブリーフィングを作成してください。

【記事リスト】
{article_text}

【出力フォーマット(JSON形式)】
{{
  "headline": "今朝の一言サマリー(20文字前後)",
  "topics": [
    {{
      "title": "トピック見出し",
      "summary": "何が起きたか・発表されたかの簡潔な要約(60〜80字)",
      "impact": "自身への影響や活用ポイント(40〜60字)",
      "source_url": "元記事URL"
    }}
  ],
  "ann_advice": "本日のSNS・ブログ発信や制作活動への具体的提案(80字前後)"
}}
"""

B. Obsidianノート(Markdown)への直接保存ロジック

パースしやすいFrontmatter付きのMarkdownとして出力します。

def save_to_obsidian(brief_data):
    now = datetime.now()
    md_filename = f"Daily_Tech_Brief_{now.strftime('%Y%m%d')}.md"
    md_path = OBSIDIAN_INBOX / md_filename
    
    headline = brief_data.get("headline", "")
    
    md_content = f"""---
title: "毎朝AI・テック速報 {now.strftime('%Y-%m-%d')}"
date: {now.strftime('%Y-%m-%d %H:%M')}
headline: "{headline}"
tags: [daily_brief, ai_news, tech_trend]
---

# ☀️ 毎朝AI・テック速報({now.strftime('%Y年%m月%d日')})

## 📌 ヘッドライン
> {headline}

## ⚡ 厳選トピック
"""
    for i, t in enumerate(brief_data.get("topics", []), 1):
        md_content += f"\n### {i}. {t.get('title')}\n"
        md_content += f"- **概要:** {t.get('summary')}\n"
        md_content += f"- **活用・影響:** {t.get('impact')}\n"
        if t.get("source_url"):
            md_content += f"- **出典:** [{t.get('title')}]({t.get('source_url')})\n"

    md_content += f"""
---
## 💡 Annの本日の提案
> {brief_data.get('ann_advice')}
"""
    with open(md_path, "w", encoding="utf-8") as f:
        f.write(md_content)

4. 1年後も0.005秒で動くダッシュボードAPIの設計

A. オンデマンド・スライス読み込み

1年分(365ファイル)あっても、サーバー側で最新30ファイルのみを glob してパースするため、通信量もCPU負荷も初日と全く変わりません。

# dashboard_server.py での処理例
obsidian_inbox = PROJECT_ROOT / "Obsidian_Notes/00_Inbox"
# ファイル名降順(最新日付順)でソートし、最新30件のみを抽出
brief_files = sorted(list(obsidian_inbox.glob("Daily_Tech_Brief_*.md")), reverse=True)[:30]

logs = []
for bf in brief_files:
    with open(bf, "r", encoding="utf-8") as f:
        content = f.read()
    # 正規表現でFrontmatter、トピック、提案を高速抽出してJSON化
    ...

5. よくある質問(FAQ)

Q1. なぜ外部のニュース要約SaaSを使わずに自作したのですか?

A. 汎用的なニュース配信サービスだと、不要なノイズ情報が多く、「自分の開発環境(ObsidianやPython、Geminiエコシステム)にどう活かせるか」という個別最適化された示唆が得られないためです。自作システムであれば、プロンプトひとつで自分の関心領域に100%フォーカスした情報だけを抽出できます。

Q2. Macがスリープしている場合は実行されますか?

A. macOSの launchd は、指定時刻にMacがスリープしていた場合、スリープ復帰時に即座にジョブを実行する設計になっています。そのため、朝起きてMacを開いた瞬間に自動でリサーチが走り、Slackに通知が届きます。

Q3. API料金はどれくらいかかりますか?

A. 本システムで使用している gemini-3.1-flash-lite は、極めて低コスト(数トークンあたり数銭レベル)です。毎朝1回の実行であれば、1ヶ月運用しても数円〜数十円程度で収まります。


6. まとめ:情報を「消費」から「資産」へ

情報収集を「ただニュースを読むだけ」で終わらせず、「第二の脳(Obsidian)に蓄積し、ブログやSNSの制作ネタへ即座に転換する仕組み」 を構築することで、毎日のインプット効率は劇的に向上します。

ぜひ本記事の設計を参考に、あなた専用の自律型リサーチ環境を構築してみてください。


タイトルとURLをコピーしました