AIが選んでくれるRSS LINE Botを作った
はじめに
Claude Codeオモロイやん、と思い毎日ニュースを送ってくれるなんちゃってRSS LINE Botを作りました。
コードは99%くらいをClaudeに書いてもらいました(GitHub Actionsのワークフローのtimeout設定を書いたくらい)。
実際のLINE通知


もう少し下までありますが、ほぼ同じなので省略。
機能一覧
- 環境変数で読み込む対象RSSのリスト、LINEに配信するカテゴリ、カテゴリごとの最大件数を設定
- GitHub Actionsで定期実行
- 複数RSSから過去24時間の記事を一括取得
- OpenAIでカテゴリ別に分類・選別・件数絞り込み・日本語翻訳(1回のAPI呼び出し)
- LINEに配信
アーキテクチャ
めっちゃシンプルです。
準備
OpenAI API
アカウント作ってポチポチしてたらAPI Keyを簡単に発行できます。
LINE Messaging API
こちらもポチポチやってたらできます。今回のような1日1回配信のBotなら無料です。
分からんくなったら、Claudeに聞きました。
アイコン画像はBotぽいものにしたかったので、こちらもClaudeに作ってもらい設定しました。
チョットダケこだわったところ
LINEへの通知
Claudeと親和性のあるNotionにしようかなと考えましたが、わざわざ見るとは思えなかったので、一番見る可能性のあるLINEにしました。
とにかく安く
ランニングコストはとにかく安く(というか無料であること)にこだわりました。
そうじゃないと長く使えないので。
定期実行
AWSをよく使うので、EventBridge + Lambdaの構成も検討しましたが、よりお手軽かつ無料のGitHub Actionsを選定しました。
環境変数
OpenAI APIを使うAPI Key、LINEのチャンネルアクセストークンといったSecret以外で下記を環境変数で注入しています。これで細かい調整をするときに何度もソースコードを修正する必要がなくなります。
| 内容 | 例 |
|---|---|
| 読み込む対象RSSのリスト | ["http://example.com","http://example.com#2"] |
| LINEに配信するカテゴリ(name)、カテゴリごとの最大件数(max) | [{"name":"金融","max":5},{"name":"芸能","max":5},{"name":"AI","max":5}] |
AIモデル
gpt-4o-miniを使っています。
が最初は無料枠があり、価格も他より安価なGemini APIを使おうとしましたが、次の理由でOpenAI APIとしました。
- Gemini APIに無料枠があるものの、ハードリミットの設定がなさそうだった(Google Cloudを普段使わないのであったらスイマセン)。意図せず高額請求になるのを懸念した
- 一方でOpenAI APIでハードリミットの設定ができた
- 昔OpenAI APIを使った時のCreditが残っていた
- Gemini APIの方が安いものの、OpenAI APIでも気にならない程度のコストだった
- とりあえず作ってみたかっただけなので、AIの精度は気にしなくていい(どっちでも変わらん)
AIに渡すプロンプト
そこまでこだわったところではないですが、AIに渡すプロンプトは下記です。
受け取る形式はLINE Messaging APIで使いやすい形式にしています。
以下のRSS記事リストを、指定されたカテゴリに分類して選別してください。
【選択条件】
- 各カテゴリのテーマに合致するもの
- 注目度・話題性が高く、多くの人が関心を持ちそうなもの
【カテゴリ設定】
[{"name":"金融","max":5},{"name":"芸能","max":5},...]
【記事リスト】
[{"index": 0, "title": "...", "summary": "...", "source": "..."}, ...]
【出力形式】
各カテゴリごとに条件に合う記事を選び、以下のJSON形式で返してください。
各カテゴリの記事数は max 以内にしてください。無理にカテゴリに当てはめる必要はなく、該当する記事がなければ空配列にしてください。
指定されたカテゴリ以外のキーは絶対に含めないでください。
どのカテゴリにも属さない記事は出力しないでください。
titleとsummaryは必ず日本語にしてください(元が日本語でも、英語でも、日本語で出力してください)。
以下の形式以外は出力しないでください。
{
"カテゴリ名": [
{"index": 0, "title": "日本語タイトル", "summary": "日本語の概要"},
...
],
...
}
良かったこと
ランニング(インフラ)コストが安価
お金がかかるのはOpenAI APIのみです。推定で1ヶ月20〜40円くらいです(記事数などにもよるので、あくまで推定です)。
私の場合、OpenAI APIのCreditが残っており、残りを有効活用できると考えたのでここは問題なし。
日本語訳してくれる
これが一番嬉しいかもしれません。海外のRSSを受け取るようにしてもタイトルが英語なので、読む気がイマイチしなかったストレスがなくなりました。
読む記事数を絞り込める
沢山のRSSを設定すると多すぎて読むのがしんどくなるのですが、これなら件数やカテゴリをカスタマイズできるので、タイパが良いです。
イマイチなところ
AIが選んだ情報しか見なくなるところ、でしょうか。
Discussion