KanaLab.

Claude Code

ニュース収集、Claude Code に任せてみた

ニュース収集、Claude Code に任せてみた

Claude Code の練習がてら、ニュース収集ツールを作ってみました。


なぜ作ったか

毎朝ニュースをチェックしてたわけじゃなくて。 X(Twitter)の投稿ネタが欲しくて、ゲーム・AI系のニュースを自動で拾ってこれたら便利かなと思って作りました。


作ったもの

毎時サーバーで自動起動

RSSフィードからニュースを収集

スコア順に各カテゴリ TOP3 を選定

Notion のデイリーニュースページに追記

サーバーのcronで動かしているので、PCを起動してなくても勝手に動きます。


収集しているニュース

自分の興味にあわせて4カテゴリ設定しました。

  • ゲーム — LoL・ポケモン・スト6・ゼンゼロ(4Gamer・IGN Japanなど)
  • AI — Claude・OpenAI・Geminiまわり(TechCrunch・MIT Technology Reviewなど)
  • 投資・資産運用 — NHK経済・Reutersなど
  • AdSense・ブログ収益化 — Google AdSenseブログなど

キーワードフィルタがついていて、関係ない記事は自動で除外されます。各カテゴリ最大3件。


Notion API との連携

ここが一番こだわったところ。

Notion に「デイリーニュース」という親ページを用意しておいて、その配下に 日付ごとの子ページを自動で作る 仕組みにしました。

📰 デイリーニュース(親ページ)
├── 2026-04-13 ニュース  ← 毎日自動で作られる
├── 2026-04-12 ニュース
├── 2026-04-11 ニュース
└── ...

子ページの自動作成

スクリプトを動かすと、まず「今日のページがあるか?」を Notion API の検索で確認します。

  • ある → そのページに追記
  • ない → 新規でページを作成

検索キーは 2026-04-13 ニュース のように日付+固定文字列。これで重複作成を防いでます。

「最新が上」を実現するセンチネル方式

これが面白かったポイント。

Notion API でブロックを追加すると、デフォルトでは ページの末尾 に追加されます。でも、ニュース収集ツールとしては 最新の取得結果を一番上 に出したかった。

そこで使ったのが センチネル方式。ページ作成時に先頭に「空の段落ブロック」を1つ置いておき、追記する時はその直後(after パラメータ)に挿入します。

# センチネル(不可視の空ブロック)を先頭に配置
sentinel = {"object": "block", "type": "paragraph",
            "paragraph": {"rich_text": []}}

# 追記時はセンチネルの直後に挿入することで「最新が上」になる
requests.patch(
    f"https://api.notion.com/v1/blocks/{page_id}/children",
    json={"children": new_blocks, "after": sentinel_id}
)

これで 8:00 取得9:00 取得 の順で追記しても、ページ上では 9:00 → 8:00 の順で表示されるようになりました。

ブロック構造

1回の取得結果は、こんな階層で書き込んでます。

🕐 8:00 取得(10件)         ← heading_3
├── 🎮 ゲーム                ← bulleted_list(太字)
│   ├── [4Gamer] 記事タイトル ← リンク付き
│   │   └── サマリー200字     ← グレー文字
│   ├── ...
├── 🤖 AI
│   └── ...
─────────────────            ← divider

bulleted_list_itemchildren にネストできるので、カテゴリ → 記事 → サマリーを階層化できます。


スコアリングと選定ロジック

「とりあえず最新3件」だと微妙な記事も混ざるので、シンプルなスコアリングを入れました。

要素スコア
キーワードがタイトルに含まれる+3
キーワードがサマリーに含まれる+1
はてなブックマーク数×10倍(日本語記事のみ)

はてブの重み付けが効いてて、話題になってる記事が自然と上位に来ます。各カテゴリでスコア順にソートして、TOP3を選定。

3時間以内に公開された記事だけを対象にしているので、毎時の cron で叩いてもダブり収集はなし。さらに daily_cache.json収集済み URL を1日単位で管理 していて、同じ記事を2回拾わないようにしてます。


Geminiは一旦やめた

最初はGeminiでツイート文も自動生成しようとしていました。 ただ、使おうとしたモデルが有料だったので一旦やめています。 とりあえず収集だけしてNotionに貯めておいて、投稿文は自分で書いてます。


実際どうか

Notionを開けばネタが並んでいる状態になりました。 ゼロから探すよりずっと楽です。

Notionに自動収集されたニュース一覧

完成まで半日くらい。 RSSまわりとNotion APIは初めてだったけど、Claude Codeに「こういうの作りたい」と言い続けたら動くものができました。

特に Notion API のセンチネル方式は、自分では絶対思いつかなかったやり方。「最新を上に出したい」って投げただけで提案してくれたのは助かりました。


ツイート自動生成はそのうち再挑戦する予定です。

X(@kanalyzelab)でも発信してるので、気が向いたらフォローしてもらえると嬉しいです。