EdenyBot News Lab
← Back to Blog

EdenyBotが
毎朝ニュースを届けるようになった日
Claude API × GitHub Actions で全自動化した話

PROLOGUE

動いているBotをもっと賢くする

EdenyBot——LINE上で動くClaudeベースのチャットbotがすでにあった。話しかけると返事を返す、ごく基本的な会話ができる存在だ。ただ、これは「話しかけないと動かない」タイプのbotだった。

このbotが毎朝9時になったら勝手にAIニュースを集めてLINEに送ってきたら——そういう「向こうから動く」機能を追加することにした。

手動で話しかけるbotから、向こうから話しかけてくるbotへ。
その差は、使う側の体験をまったく変える。
BUILD

3つのピースを組み合わせる

仕組みは3段階で完結する。

Claude API ニュース収集・整形 LINE Push 毎朝9時 / GitHub Actions

Claude APIにはweb_searchツールがある。通常のClaudeはウェブ検索ができないが、このツールを使えば当日のリアルタイムなニュースを収集できる。収集した情報をそのまま送るのではなく、「エデニーちゃんキャラ・大阪弁・たくちゃん向けコメント」という指示をプロンプトに入れて整形する。最後にLINEのPush APIでプッシュ送信する。

これをスクリプト1本(news.js)にまとめ、GitHub Actionsのcronスケジューラで毎朝0時UTC(= 日本時間9時)に自動実行するようにした。

APIキーの管理はGitHub Secretsを使った。ターミナルからghコマンドで直接登録し、ログに絶対残らないようにする。Claude APIのキー・LINEのアクセストークン・送信先のユーザーIDの3つを安全に保管した。

手動でも実行できるようworkflow_dispatchも追加した。テストのたびに時間を待たなくていい。

TROUBLE

2回詰まった。どちらも単純なミスだった

TROUBLE 01
npm キャッシュエラーでActionsが止まった
GitHub Actionsのワークフローにcache: 'npm'と書いていたが、リポジトリにpackage-lock.jsonが存在しなかった。npmキャッシュはlockファイルを必要とするため、実行時にエラーで停止した。

修正はシンプルで、cache: 'npm'の行を削除するだけ。ファイルがないのにキャッシュを使おうとしたのが原因だった。
TROUBLE 02
LINE Push APIが「to property is invalid」と返した
LINE Push APIにメッセージを送ったところ、「to propertyが無効」というエラーが返ってきた。LINEのユーザーIDの値が間違っていた。

LINE Developersコンソールで正しいユーザーIDを確認し、GitHub Secretsを再設定した。IDの見た目は似ているが、取得する場所を間違えると別のIDになる。
RESULT

キャラとして動くbotになった

2回の修正を経てワークフローが成功した。ニュース収集・整形・送信まで約35秒で完結する。

エデニーちゃんキャラが機能していることを確認できた瞬間があった。AIニュースの中にUEFNのスターウォーズ情報が含まれていて、botが「たくちゃん絶対興味あるやろ〜!」と一言添えてきた。

ただの情報収集ではなく、誰かが届けてくれた感覚になっている。その差は、実際に使ってみると大きい。

技術的なポイントとして、Claude APIのweb_searchツールはリアルタイムのウェブ情報にアクセスできる。通常のClaudeは学習データまでの情報しか持っていないが、このツールを組み合わせることで「今日のニュース」を取得できる。LLMに時事情報を持たせる方法として、最もシンプルなアプローチだと思う。

SUMMARY

EdenyBotに毎朝のAIニュース自動通知機能を追加した。Claude APIのweb_searchでニュースを収集し、エデニーちゃんキャラで整形してLINE Push APIで送信——この流れをGitHub Actionsのcronで全自動化した。

行き詰まりは2件で、どちらも設定上の単純なミス。構造そのものは想定通りに動いた。向こうから話しかけてくるbotが毎朝9時に動き始めた——それだけで、道具が少し生き物に近づいた気がした。

ALL UEFN × Verse Lab Log