mcpField
N
newsletter-digest

newsletter-digest

github.com/varnan-techマーケティング・グロース68745 回インストール2 週間前に更新
リポジトリ

newsletter-digest について

newsletter-digestは、RSS記事を週次またはテーマ別のニュースレターにまとめるスキルです。Geminiで内容を統合し、Ghost CMSが未設定の場合は整形した原稿を出力します。

主な機能

  1. 01RSS記事の取得と重複排除
  2. 02期間による記事の絞り込み
  3. 03Geminiによるダイジェスト作成
  4. 04週次・テーマ別・厳選形式への対応
  5. 05Ghost CMSへの下書きまたは公開

活用シーン

  1. 01設定済みフィードから週次まとめを作成
  2. 02特定テーマに絞ったダイジェストを作成
  3. 03Ghost未設定時にニュースレター原稿を生成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/varnan-tech/opendirectory --skill newsletter-digest

インストール後、Claude Code で/newsletter-digestを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

.env.example
feeds.json
package.json
README.md
evals/
evals.json
references/
digest-format.md
output-template.md
scripts/
fetch-feeds.js
ghost-publish.js

詳細

ニュースレターダイジェスト

RSS フィードのコンテンツを集約し、Gemini で今週のトップニュースを要約して、ダイジェストを Ghost CMS に公開します。週間ダイジェスト、トピック別のまとめ、厳選記事の形式に対応しています。

執筆スタイル

生成するすべてのダイジェストコンテンツに適用します。

  • 能動態のみを使用します
  • 1 文を短くし、1 文につき 1 つの内容を伝えます
  • エムダッシュは使わず、ピリオドまたはコンマを使用します
  • セミコロンは使いません
  • 最終的なニュースレター本文に Markdown やアスタリスクを使いません
  • ハッシュタグは使いません

禁止語 — ダイジェストでは次の語を使わないでください。 incredible, amazing, leveraging, synergize, game-changing, game changer, delve, harness, unlock, groundbreaking, cutting-edge, remarkable, paradigm, revolutionize, disruptive, transformative, thrilled, excited to share, powerful, innovative, comprehensive, actionable, crucial, vital, pivotal, elucidate, utilize, dive deep, tapestry, illuminate, revolutionize

重要なルール

ダイジェスト内のすべての主張、統計、要約は、取得した記事に基づく必要があります。データ、引用、事実を決して捏造しないでください。情報として意味のある内容がない記事は除外してください。


ステップ 1:セットアップを確認する

1a. フィードが設定されていることを確認する

スキルディレクトリに feeds.json があるか確認します。

ls /Users/ksd/Desktop/Varnan_skills/newsletter-digest/feeds.json 2>/dev/null

見つからない場合は、ユーザーに「監視する RSS フィードを教えてください。URL の一覧を共有していただければ、feeds.json を作成します。」と尋ねます。

形式は次のとおりです。

[
  { "url": "https://example.com/feed", "name": "Source Name" },
  { "url": "https://another.com/rss", "name": "Another Source" }
]

1b. 必須の環境変数を確認する

次の環境変数が設定されていることを確認します。

  • GEMINI_API_KEY(必須):要約に使用します
  • GHOST_URL と GHOST_ADMIN_KEY(Ghost への公開に必須。出力のみの場合は任意)

GEMINI_API_KEY が設定されていない場合は、処理を停止し、設定するようユーザーに依頼します。

GHOST の設定は任意です。設定されていない場合、スキルは公開せず、書式を整えた Markdown を出力します。

1c. スクリプトの依存関係を確認する

ls /Users/ksd/Desktop/Varnan_skills/newsletter-digest/node_modules 2>/dev/null | head -1

不足している場合:

cd /Users/ksd/Desktop/Varnan_skills/newsletter-digest && npm install

ステップ 2:フィードを取得して解析する

取得スクリプトを実行します。

node /Users/ksd/Desktop/Varnan_skills/newsletter-digest/scripts/fetch-feeds.js

スクリプトの処理内容:

  • フィード一覧を feeds.json から読み込みます
  • rss-parser を使用して各フィードを取得します
  • 過去 7 日間に公開された項目に絞り込みます
  • URL を基準に重複を除去します
  • 公開日順に並べ替え、新しいものを先頭にします
  • 結果を /tmp/newsletter-digest-articles.json に保存します

特定のフィードでスクリプトがエラーになった場合は、警告を記録して処理を続けます。1 つのフィードの不具合で実行全体が停止することはありません。

スクリプトの完了後、出力を確認します。

node -e "
const fs = require('fs');
const data = JSON.parse(fs.readFileSync('/tmp/newsletter-digest-articles.json', 'utf8'));
console.log('Total articles:', data.articles.length);
console.log('From feeds:', data.feedsSummary.map(f => f.name + ': ' + f.count).join(', '));
console.log('Date range:', data.dateRange.from, 'to', data.dateRange.to);
"

記事が 3 件未満の場合はユーザーに警告し、期間を 14 日に延長するか確認します。期間を広げるには、スクリプトに --days=14 を渡します。


ステップ 3:形式のルールを読む

コンテンツを生成する前に、references/digest-format.md を最後まで読みます。次の内容を把握してください。

  • 3 種類のダイジェスト形式(Weekly Roundup、Topic Deep Dive、Curated Picks)と、それぞれを使う場面
  • 形式ごとのセクション構成と長さの要件
  • 出典の明記に関するルール(すべての主張に出典へのリンクを付けます)
  • トーンと文体のガイドライン

references/output-template.md を読み、指定された形式に一致するテンプレートを選びます。

ユーザーが形式を指定していない場合は、Weekly Roundup をデフォルトとして使用します。


ステップ 4:Gemini で要約する

/tmp/newsletter-digest-articles.json を読み込み、要約用のプロンプトを作成します。

プロンプトの構成:

You are a newsletter editor writing a digest of this week's top stories.

Sources (use ONLY these — do not invent facts):
[For each article: Title | Source | Date | Summary]

Task:
Write a [FORMAT] digest following this structure:
[Paste the selected template from references/output-template.md]

Rules:
- Every claim, statistic, and quote must come from the sources above
- Write in active voice, short sentences, contractions allowed
- Do not use: incredible, amazing, leveraging, game-changing, delve, groundbreaking, cutting-edge, revolutionize
- No em dashes, no semicolons, no hashtags
- Include [Source: Name](URL) attribution after each major claim
- Output plain text with HTML heading tags only (no markdown asterisks)

このプロンプトを使って Gemini を呼び出します。対象モデル:gemini-2.0-flash または利用可能な最新モデル。

応答に禁止語が含まれている場合、または元記事にない統計が捏造されている場合は、より厳格なプロンプトで再生成します。

ステップ 5:セルフ QA

提示する前に、すべてのチェックを実行してください。違反があれば、まず修正してください。

  • すべての主張、統計、引用がソース記事にたどれる
  • どのセクションにも禁止語が含まれていない
  • テキストに em ダッシュが含まれていない
  • テキストにセミコロンが含まれていない
  • すべてのセクションに URL 付きの出典が少なくとも 1 つある
  • 語数がフォーマットの目標範囲内である(references/digest-format.md を参照)
  • 同じ記事を同じセクションで 2 回取り上げていない
  • タイトルが具体的である(「Weekly Digest」だけではなく、日付範囲または号数を含む)
  • HTML 出力が有効である(Ghost への投稿時に未閉鎖タグがない)

ユーザーに提示する前に、すべての違反を修正してください。


ステップ 6:フォーマットとプレビュー

以下の順序でダイジェストをユーザーに提示してください。

  1. タイトル — 号の日付範囲またはトピック
  2. ダイジェストの内容 — フォーマット済みテキスト全文
  3. ソース一覧 — 使用したすべての記事と URL
  4. 語数と記事数

「Ghost に下書きとして公開する準備はできていますか? それとも、先に編集しますか?」と尋ねてください。


ステップ 7:Ghost への公開または出力

GHOST_URL と GHOST_ADMIN_KEY が設定されていて、ユーザーが確認した場合:

公開スクリプトを実行します。

node /Users/ksd/Desktop/Varnan_skills/newsletter-digest/scripts/ghost-publish.js \
  --title "DIGEST_TITLE" \
  --status "draft"

スクリプトは /tmp/newsletter-digest-output.json(ステップ 6 でエージェントが書き込むファイル)を読み込み、Ghost に投稿します。

投稿後、スクリプトは下書きの Ghost 管理 URL を返します。ユーザーに次のように提示してください。「下書きを保存しました:[URL]。Ghost ダッシュボードから確認して公開してください。」

ユーザーがすぐに公開したい場合は、スクリプトに --status "published" を渡してください。

Ghost が設定されていない場合、またはユーザーが「出力のみ」と指示した場合:

ダイジェストを 3 つの形式で出力します。

  1. HTML — 任意の CMS にそのまま貼り付け可能
  2. Markdown — Substack、Notion、Hashnode 用
  3. プレーンテキスト — メールクライアント用

「Substack には公開 API がありません。Markdown 版を Substack のエディターに直接コピーしてください。」と追記してください。


Substack に関する注意事項

Substack には公開 API がありません。内部エンドポイントをリバースエンジニアリングしない限り、プログラムから投稿することはできません。これは利用規約に違反します。このスキルは、Substack のエディターに貼り付けられるようフォーマットした Markdown ダイジェストを出力します。これが正しい方法です。

コメント