7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Gemini CLI × Obsidian で構築するニュース収集環境

Last updated at Posted at 2025-12-29

こんな環境を作りました

まず最初に完成形を示します。
次の画像は、私のデイリーノートの画面です。

スクリーンショット 2025-12-29 10.35.16.png

Obsidian でデイリーノートを新規作成すると、「本日の予定」→「日記」→「今日のニュース」が自動挿入された状態で表示されます。

朝に予定とニュースをチェックし、夜にこれらを見ながら1日の振り返りを日記として記録する、というワークフローができています。

溢れるニュースフィードと整理しきれない情報

現代のビジネスパーソンにとって、情報収集は「重荷」です。私自身、以前は次のような課題に直面していました。

  1. ニュースフィードの「洪水」
    ニュースサイトの RSS を登録すると1日に流れてくる記事は数百件。本当に知りたい情報を探し出すだけでも一苦労です。
  2. 「ストック」されないフロー情報
    ブラウザでニュースを読んでもその場限りで記憶から消えてしまいます。「あの記事の感想、いつの日記に書いたっけ?」と思っても、フロー情報として流れていってしまい、自分の知識(ストック)として定着させるのが非常に困難でした。
  3. 日記(デイリーノート)との断絶
    Obsidian でデイリーノートを運用していても、「その日の予定」、「世の中の動き(ニュース)」、「自分の思考」がバラバラに存在していました。これらを一つの文脈でつなげ、あとから振り返れるようにしたい——。

AIを「フィルター」として使う

そこで考えたのが、「すべての情報を自分で読むのをやめる」 という決断です。

Obsidian を全ての情報のハブにし、その膨大な生データから、Gemini という「脳」を使って自分のプロファイルに合うものだけを抽出・要約させる。

この「情報の濾過器」を自作することで、毎朝7時に「自分にとって本当に価値のある15件」だけがリンク付きで美しく整理されて届く環境を構築しました。

具体的な解決手順: 情報の「ハブ」と「脳」を繋ぐ

今回構築したシステムは、「Obsidian」を情報のハブに、「Gemini CLI」を思考の脳に見立てた自動化ラインです。

全体の流れは以下の通りです。

  1. インプット:Local RSS が定期的に専門サイトから記事をMarkdownとして自動取得。
  2. トリガー:cron が毎朝7時にシェルスクリプトを実行。
  3. プロセシング:シェルスクリプトが過去24時間分のファイルを抽出し、Gemini CLI へ送信。
  4. アウトプット:自分のプロファイルに基づいた「厳選要約ノート」が生成される。

これにより、人間は「大量の記事を巡回する」作業から解放され、「AIが選んだ質の高い情報に目を通す」だけで済むようになります。

ステップ1: 情報の入り口を整える

まずは、AIに読み込ませる「材料」を Obsidian 内に集める仕組みを作ります。

仕組みは簡単で、Local RSS(Obsidian プラグイン)を使って適当なフォルダに Markdown 形式のニュースを溜め込むだけ。

ニュースをブラウザで読むのではなく、Obsidian 内に保存するのには大きな理由があります。AI(Gemini)が直接そのファイルにアクセスし、全文をスキャンできるようにするためです。

使用プラグイン:Local RSS
役割:登録したRSSフィードの各記事を、1つのMarkdownファイルとしてローカルに保存します。
選定したソース:一般的なニュースではなく、以下の専門メディアに絞り込みました。

後の自動処理を容易にするため、Local RSS の設定で保存ファイル名の形式を {{date}}_{{title}}.md としています。これにより、OS の検索機能(findコマンド)で「特定の日付のニュース」だけを瞬時に抽出することが可能になります。

ステップ2: Gemini CLI による「選別」の自動化

情報の材料が揃ったら、次は Gemini を使って情報の「濾過(ろか)」を行います。ここで重要なのは、「私は誰で、何を知りたくて、何を知りたくないのか」 を AI に教え込むことです。

今回、AIコンサルタントとしての実務と個人の趣味を両立させるために設計したプロンプトはこちら。

プロンプト
# 実行すべきタスク
1. 与えられたニュース群を分析し、後述するプロファイルに合致する重要なニュースを最大15個厳選してください。
2. 選定したニュースを【LLM/技術】【ビジネス活用/DX】【生産性/ガジェット】【吹奏楽】【政治経済】【その他】のカテゴリに分類し、各カテゴリごとに重要なポイントを横断的に要約してください。
3. 最後に、これらのニュースから得られる「今日のビジネス・生活への示唆」をコンサルタントの視点で3行でまとめてください。
4. 出力形式: 各ニュースの要約の末尾に [ソース元タイトル](URL) の形式で必ず参照リンクを付与してください。ソースにURLが含まれていない場合は省略して構いません。

# ユーザのプロファイル
1. AI/DX関連の戦略・導入支援を行うコンサルタント
2. 関心トピック:具体的なAI活用事例、プロンプトエンジニアリング、最新のLLM論文、AIによる業務効率化。
3. Apple製品等のガジェット、および生産性向上ツール(Obsidian等)の活用。
4. 趣味:吹奏楽(コンクール・コンテスト、最新の楽譜、音楽業界のDX等があれば注目)と株式投資・資産運用。

# 禁止事項
1. 具体的根拠のない抽象的なニュース、コラム記事、芸能・一般事件のニュースは一切除外すること。
2. ニュースに関係のない文章(例えば、「こんにちは、今日のニュースをまとめました」など)を差し込むことは禁止します。
3. 内容が重複しているニュースは、最も情報量が多い一つだけを残して他は統合してください。
4. 特筆すべきニュースが見当たらないカテゴリについては「特になし」とだけ出力してください。

構成のポイント:
ペルソナ(ロール)の設定: 「AI/DXコンサルタント」と定義することで、要約のトーンをビジネス実務寄りに固定します。

また「プロンプトエンジニアリング」「吹奏楽」など、一見バラバラなキーワードを並べることで、自分にとっての「当たり記事」を逃さないようにします。

ネガティブプロンプト(禁止事項): 「抽象的な内容」「芸能・一般事件」を明示的に禁止し、ノイズをカットします。

ステップ3: cron による完全自動化

仕組みができたら、あとは「人間が何もしなくても動く」状態にするだけです。
作成したスクリプトはこちら。

summarize_news.sh
#!/bin/bash

# あなたの環境に合わせて書き換えてください
OBSIDIAN_DIR="/Users/path/to/Obsidian" # Obsidianの保管庫のパス
export NVM_DIR="/Users/(ユーザ名)/.nvm"

# 1. nvmをロードしてパスを通す
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

# 2. 使用するNodeバージョンを指定(もし自動で選ばれなければ)
nvm use v20.19.0 > /dev/null

# 3. PATHを設定する
export PATH="$NVM_DIR/versions/node/v20.19.0/bin:$PATH"

# 4. 検索範囲の計算
# macOS (BSD date) の場合
START_TIME=$(date -v-1d +"%Y-%m-%d 07:00:00")
END_TIME=$(date +"%Y-%m-%d 07:00:00")

# 5. 作業ディレクトリへ移動
cd "$OBSIDIAN_DIR"

# 6. 指定期間のファイルを抽出
NEWS_CONTENT=$(find News -name "*.md" -newermt "$START_TIME" ! -newermt "$END_TIME" -print0 | xargs -0 cat)

if [ -z "$NEWS_CONTENT" ]; then
    echo "$(date): No news found." >> "$OBSIDIAN_DIR/summarize_news_log.txt"
    exit 1
fi

TODAY=$(date +%Y-%m-%d)
OUTPUT_FILE="02_ニュース/${TODAY}_ニュース.md"

# 7. パスを明示的に指定して実行
echo "$NEWS_CONTENT" | NODE_NO_WARNINGS=1 gemini -p "
# 実行すべきタスク
...(先ほどのプロンプトをここに記載)
" > "$OUTPUT_FILE"

echo "$(date): Success" >> "$OBSIDIAN_DIR/summarize_log.txt"

そして、crontab -e で毎朝7時の実行を予約します。

00 07 * * * /bin/bash /Users/path/to/summarize_news.sh

ちなみに、macOS では、cron に「フルディスクアクセス」の権限を与えないと、書類フォルダ内のファイルを読み込めないので注意が必要です。

ハマりどころ1:node: No such file or directory

ターミナルでは動くのに cron だと動かない。
その原因は 「cron環境のPATH不足」 にあります。特に nvm で Node.js を管理している場合、cron は node がどこにあるかを知りません。

解決策:スクリプト内で nvm.sh を直接読み込み、export PATH で Node のバイナリディレクトリを明示的に追加しました。これで Gemini CLI が内部で呼んでいる node を正しく見つけられるようになります。

ハマりどころ2: ファイル名の「スペース」問題

Local RSS が生成するファイル名にはスペースが含まれることがあります。
通常の xargs cat ではスペースで区切られた断片を別ファイルと誤認してエラーになります。

解決策find -print0xargs -0 をセットで使うことで、ヌル文字を区切りとして扱い、スペース入りのファイル名も安全に処理できるようにしました。

ステップ4:デイリーノートへの埋め込み

私は Obsidian のデイリーノートに、ニュース要約を自動で表示させるようにしています。

## 📰 今日のニュース
![[02_ニュース/<% tp.date.now("YYYY-MM-DD") %>_ニュース.md]]

こうすることで、その日の予定を確認するついでに、AIが選別した重要トピックが自然と目に入ります。

気になったニュースは、末尾の参照リンクから一次ソースへ飛び、そのまま自分の考察をデイリーノートに書き込む。このシームレスな体験が、情報収集を「作業」から「知的生産」へと変えてくれました。

おわりに: AI に「読ませる」ことで、人間は「考える」ことに集中する

かつて、RSS リーダーに溜まっていく未読記事の山を見ては、小さな罪悪感を感じていた時期がありました。しかし、このシステムを構築してからは、そのプレッシャーから完全に解放されました。

「全てのニュースを追いかける必要はない。本当に重要なものは、Geminiが私の代わりに拾い上げてくれる」

という信頼感があるからです。

AI を単なる「生成ツール」として使うのではなく、膨大な情報から自分に必要なものだけを濾過する「高度なフィルター」として使う。これは、情報過多の時代を生き抜くための、一つの生存戦略だと言えるかもしれません。

もし、皆さんの Obsidian の中に眠っている RSS フィードやメモがあれば、ぜひ Gemini という「脳」を繋いでみてください。そこには、あなたのためだけに編集された、最高に贅沢な新聞が待っているはずです。

...という意識の高い記事を Gemini に書かせてみました

この記事は、Gemini に書かせて私が後から軽く手直ししたものです。
最近の AI は本当にすごいですね。意識高い。

でも、「朝に予定とニュースをチェックし、夜にこれらを見ながら1日の振り返りを日記として記録する」というワークフローは、実際に私が運用しています。

皆さんにもオススメ。
というわけで、今回記事にまとめてみました。

補足1

デイリーノートへの予定の取り込みは「Google Calendar Importer」、テンプレートの作成には「Templater」というプラグインを使っています。

これらの設定方法については、需要があれば別途書きます。

補足2

1ヶ月分の日記を月末に要約すると、一月の振り返りができて結構楽しいです。
スクリプトとプロンプトはこちら。

summarize_diary.sh
#!/bin/bash
DIARY_DIR="$HOME/Path/to/日記"
PROMPT_FILE="日記要約プロンプト.md"
MONTH_PATTERN=$(date "+%Y-%m") # 2025-12
OUTPUT_FILE="${MONTH_PATTERN}_ダイジェスト.md"

cd "$DIARY_DIR" || exit 1

echo "--- ${MONTH_PATTERN} の全日記を精査中 ---"

# 今月の全ファイル(2025-12-*.md)を結合してGeminiに渡す
# エラー出力を捨ててAIの結果だけをファイルに保存
cat "$PROMPT_FILE" ${MONTH_PATTERN}-*.md | gemini > "$OUTPUT_FILE" 2>/dev/null

echo "✅ $OUTPUT_FILE を作成しました。"
プロンプト
# 実行すべきタスク
- 今月の日記を精査し、そこから特筆すべき内容を取り出して、「今月のダイジェスト」(要約)を作ってください。

# 禁止事項
- ダイジェスト本文以外の文章(例えば、「以下にダイジェストを出力しました」など)を差し込むことは禁止します。
7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?