無料開発・構築

n8n×ClaudeでRSSをAI要約してNotionに保存する

·13 min read·Nexeed Lab
Clauden8nNotionRSS

n8nとClaude APIを連携し、RSSフィードのニュースを自動収集してAIで日本語要約を生成し、Notionデータベースに自動保存するシステムの構築手順を解説します。

はじめに

毎日大量のニュースやブログ記事を手動でチェックするのは時間がかかります。 RSSフィードを購読しているだけでは情報が溜まり、読み切れないまま放置されることも多いです。 そこで本記事では、n8nAnthropic Claude API を組み合わせて、RSSフィードを自動収集→AI要約→Notionデータベース保存するパイプラインを構築する方法を解説します。 一度セットアップすれば、指定したフィードの最新記事が毎日自動でNotionに要約付きで蓄積されていきます。

システムの全体像

このシステムは以下の6ステップで動作します。

[Schedule Trigger]
       ↓ 毎朝9時に起動
[HTTP Request: RSS取得]
       ↓ XMLフィードを取得
[Code Node: XML解析]
       ↓ 記事リストを抽出
[HTTP Request: Claude API]
       ↓ 各記事をAI要約
[Code Node: レスポンス解析]
       ↓ 要約テキストを抽出
[Notion Node: ページ作成]
       ↓ データベースに保存

n8nはノーコード/ローコードの自動化ツールで、各ノードをビジュアルに接続するだけでワークフローが構築できます。 Claude APIはAnthropicが提供するLLM APIで、日本語の要約生成に優れた精度を発揮します。 Notionは情報蓄積・管理に広く使われているツールで、データベース機能を活用して記事情報を整理できます。

事前準備

Anthropic APIキーの取得

Anthropic ConsoleでAPIキーを発行します。 https://console.anthropic.com/ にアクセスし、「API Keys」から新しいキーを作成してください。 使用するモデルは claude-haiku-4-5-20251001 を推奨します。 Haikuはコストが低く、要約タスクには十分な精度を持っています。

Notionインテグレーションの設定

Notion APIを使うには、インテグレーショントークンとデータベースIDが必要です。 https://www.notion.so/my-integrations でインテグレーションを作成し、シークレットキーを控えます。 次に、記事を保存するNotionデータベースを作成し、インテグレーションにアクセス権限を付与します。 データベースには以下のプロパティを追加しておきます。

  • タイトル (Title型): 記事タイトル
  • URL (URL型): 元記事のリンク
  • 要約 (Text型): AI生成の要約
  • 公開日 (Date型): 記事の公開日
  • フィード (Select型): フィード元の識別子

n8nのセットアップ

n8nをDockerで起動します。

docker run -d \
  --name n8n \
  -p 5678:5678 \
  -e N8N_TIMEZONE=Asia/Tokyo \
  -v n8n_data:/home/node/.n8n \
  docker.n8n.io/n8nio/n8n

ブラウザで http://localhost:5678 を開き、アカウントを作成したらセットアップ完了です。 「Credentials」メニューから Anthropic APINotion の認証情報を事前に登録しておきましょう。

ワークフローの構築

STEP 1: Schedule Trigger

n8nの新規ワークフローを作成し、最初のノードとして Schedule Trigger を追加します。 「Trigger at」を Every Day、時刻を 09:00 に設定することで毎朝9時に自動起動します。 テスト時は「Execute Workflow」ボタンで手動実行できるので、まずは動作確認を優先しましょう。

STEP 2: HTTP Request(RSSフィード取得)

次に HTTP Request ノードを追加し、RSSフィードのURLを設定します。

  • Method: GET
  • URL: https://news.ycombinator.com/rss(例: Hacker News)
  • Response Format: Text

「Response Format」を Text にするのがポイントです。 XML形式のRSSフィードはJSONとして自動解析されないため、テキストとして受け取ってから後続のCodeノードで解析します。

STEP 3: Code Node(XML解析)

Code ノードを追加し、受け取ったXMLをJavaScriptで解析します。

// RSS XMLをパースして記事リストを返す
const xml = $input.first().json.data;

// <item>タグを抽出
const itemMatches = xml.match(/<item>([\s\S]*?)<\/item>/g) || [];

const items = itemMatches.slice(0, 5).map(item => {
  const title = (item.match(/<title><!\[CDATA\[(.*?)\]\]><\/title>/) ||
                 item.match(/<title>(.*?)<\/title>/))?.[1] || '';
  const link  = (item.match(/<link>(.*?)<\/link>/))?.[1] || '';
  const pubDate = (item.match(/<pubDate>(.*?)<\/pubDate>/))?.[1] || '';
  const desc  = (item.match(/<description><!\[CDATA\[(.*?)\]\]><\/description>/) ||
                 item.match(/<description>(.*?)<\/description>/))?.[1] || '';

  // HTMLタグを除去して300文字に制限
  const cleanDesc = desc.replace(/<[^>]+>/g, '').slice(0, 300);

  return { title, link, pubDate, description: cleanDesc };
});

return items.map(item => ({ json: item }));

slice(0, 5) で1回の実行につき最新5件のみを処理しています。 API呼び出しコストとNotionのレート制限を考慮した現実的な設定です。 フィードによってはCDATAセクションでタイトルや説明がラップされているため、両パターンに対応した正規表現を用意しています。

STEP 4: HTTP Request(Claude API呼び出し)

HTTP Request ノードを追加してClaude APIへリクエストを送ります。

  • Method: POST
  • URL: https://api.anthropic.com/v1/messages
  • Authentication: Header Auth(x-api-key にAnthropicのAPIキーを設定)
  • Headers: anthropic-version: 2023-06-01content-type: application/json
  • Body: JSON形式(下記参照)

リクエストボディにはn8nの式を使って前ステップのデータを埋め込みます。

{
  "model": "claude-haiku-4-5-20251001",
  "max_tokens": 300,
  "messages": [
    {
      "role": "user",
      "content": "以下の記事タイトルと概要を、日本語で3〜5文に要約してください。\n\nタイトル: {{ $json.title }}\n概要: {{ $json.description }}\n\n要約のみ出力し、余計な前置きは不要です。"
    }
  ]
}

{{ $json.title }}{{ $json.description }} はn8nの式で、直前のノードから渡されたデータを参照します。 max_tokens: 300 に制限することで、要約が長くなりすぎるのを防ぎコストも抑えられます。 Haikuモデルを使えば1記事あたりの費用は約0.01円程度です。

STEP 5: Code Node(レスポンス解析)

Claude APIのレスポンスから要約テキストを取り出します。

// Claude APIレスポンスから要約テキストを抽出する
const response = $input.first().json;
const summaryText = response.content?.[0]?.text || '要約の取得に失敗しました';

// 上流ノードのデータと合算して返す(ノード名は環境に合わせて変更)
return [{
  json: {
    title: $('Code: XML解析').item.json.title,
    link: $('Code: XML解析').item.json.link,
    pubDate: $('Code: XML解析').item.json.pubDate,
    summary: summaryText
  }
}];

n8nでは $('ノード名').item.json の形式で任意の上流ノードのデータにアクセスできます。 このノードでデータを整形することで、後続のNotionノードへの入力をシンプルに保てます。

STEP 6: Notion Node(データベースへ保存)

最後に Notion ノードを追加します。

  • Resource: Database Page
  • Operation: Create
  • Database: 作成したNotionデータベースを選択
  • Title: {{ $json.title }}

各プロパティのマッピングを設定します。

  • URLプロパティ → {{ $json.link }}
  • 要約プロパティ → {{ $json.summary }}
  • 公開日プロパティ → {{ $json.pubDate }}
  • フィードプロパティ → Hacker News(固定値)

これでワークフローが完成です。 「Save」してから「Execute Workflow」を押すと、Notionに記事が追加されるはずです。

複数フィードの一括処理

複数のRSSフィードを処理する場合は、Schedule Triggerの直後に Code ノードを置いてフィードURLのリストを生成します。

// 処理するRSSフィードのリストを定義する
const feeds = [
  { name: 'Hacker News', url: 'https://news.ycombinator.com/rss' },
  { name: 'TechCrunch',  url: 'https://techcrunch.com/feed/' },
  { name: 'Zenn Trend',  url: 'https://zenn.dev/feed' },
];

return feeds.map(feed => ({ json: feed }));

このノードの出力は3アイテムになるため、後続のHTTP Request(RSS取得)ノードはそれぞれのURLに対して自動的に3回実行されます。 n8nはデフォルトでアイテムごとにノードを繰り返し実行するため、ループ処理を明示的に書く必要はありません。 「URL」フィールドには {{ $json.url }} を指定するだけで動的にフィードを切り替えられます。

重複保存防止

同じ記事を何度も保存しないように、Notionの検索APIで重複チェックを行います。 HTTP Requestノードを1つ追加し、Notion APIの POST /v1/databases/{database_id}/query を呼び出して、URLプロパティが一致するページが存在するか確認します。 Codeノードでレスポンスを評価し、results.length > 0 なら後続処理をスキップする分岐を設けます。 n8nの IF ノードを使って「重複あり → ワークフロー終了」「重複なし → Claude API → Notion保存」という分岐を実装してください。

運用コスト目安

claude-haiku-4-5モデルの料金(2025年時点)を元に試算します。 1記事あたり入力トークン約200、出力トークン約150として、1記事の費用は約0.008円です。 1日5記事×3フィード=15記事を処理しても月あたり約3.6円と非常に低コストです。 n8nはセルフホスト版を使えば実行費用は発生しないため、VPSやRaspberry Piで動かすのが最もコスト効率に優れます。

プロンプト改善のコツ

要約の品質を高めるためにはプロンプトの工夫が重要です。 出力形式を固定することで後続の処理がしやすくなります。 例えば「1行目に要点、2〜4行目に詳細」のように構造を指示すると、Notionでの表示も整理されます。 記事の分野(テクノロジー、ビジネスなど)をプロンプトに含めることで、分野に適した語彙で要約が生成されやすくなります。 英語記事が多い場合は「日本語で要約」と明示するだけで十分ですが、「専門用語は英語のままでよい」という指示を加えると読みやすさが向上します。

Notionビュー活用術

Notionのデータベースにビューを追加することで、蓄積した記事を効率よく閲覧できます。 フィルタービュー を使えば「フィード = Hacker News」など特定のフィードだけを表示できます。 カレンダービュー では公開日プロパティを基準に記事を時系列で可視化できます。 ギャラリービュー に要約を表示させると、タイトルと要約を一覧で素早くスキャンするのに便利です。 定期的に「既読」プロパティ(チェックボックス型)を追加し、読んだ記事をフィルタアウトするワークフローを組み合わせると、未読管理もスムーズになります。

まとめ

本記事ではn8nとClaude APIを組み合わせてRSSフィードをAI要約しNotionに保存するシステムを構築しました。 6つのノードを接続するだけで、毎日の情報収集を完全に自動化できます。 Claude Haikuモデルの低コストと高精度な日本語要約により、実用的な運用コストに抑えられる点も大きな魅力です。 複数フィードへの拡張や重複防止など、実運用に必要な要素もカバーしているため、そのままプロダクション環境に適用できます。 次のステップとして、Slackへの要約通知やキーワードフィルタリングなどの機能を追加すれば、さらに高度な情報収集基盤が構築できます。

参考資料

この記事をシェア

XFacebookはてブ
n8n×ClaudeでRSSをAI要約してNotionに保存する | AI活用ラボ