newsletter-digest について
newsletter-digestは、RSS記事を週次またはテーマ別のニュースレターにまとめるスキルです。Geminiで内容を統合し、Ghost CMSが未設定の場合は整形した原稿を出力します。
主な機能
- 01RSS記事の取得と重複排除
- 02期間による記事の絞り込み
- 03Geminiによるダイジェスト作成
- 04週次・テーマ別・厳選形式への対応
- 05Ghost CMSへの下書きまたは公開
活用シーン
- 01設定済みフィードから週次まとめを作成
- 02特定テーマに絞ったダイジェストを作成
- 03Ghost未設定時にニュースレター原稿を生成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ varnan-tech/ opendirectory --skill newsletter-digestインストール後、Claude Code で/newsletter-digestを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
.env.examplefeeds.jsonpackage.jsonREADME.mdevals/evals.jsonreferences/digest-format.mdoutput-template.mdscripts/fetch-feeds.jsghost-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:フォーマットとプレビュー
以下の順序でダイジェストをユーザーに提示してください。
- タイトル — 号の日付範囲またはトピック
- ダイジェストの内容 — フォーマット済みテキスト全文
- ソース一覧 — 使用したすべての記事と URL
- 語数と記事数
「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 つの形式で出力します。
- HTML — 任意の CMS にそのまま貼り付け可能
- Markdown — Substack、Notion、Hashnode 用
- プレーンテキスト — メールクライアント用
「Substack には公開 API がありません。Markdown 版を Substack のエディターに直接コピーしてください。」と追記してください。
Substack に関する注意事項
Substack には公開 API がありません。内部エンドポイントをリバースエンジニアリングしない限り、プログラムから投稿することはできません。これは利用規約に違反します。このスキルは、Substack のエディターに貼り付けられるようフォーマットした Markdown ダイジェストを出力します。これが正しい方法です。