Lab
EdenyBot——LINE上で動くClaudeベースのチャットbotがすでにあった。話しかけると返事を返す、ごく基本的な会話ができる存在だ。ただ、これは「話しかけないと動かない」タイプのbotだった。
このbotが毎朝9時になったら勝手にAIニュースを集めてLINEに送ってきたら——そういう「向こうから動く」機能を追加することにした。
仕組みは3段階で完結する。
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も追加した。テストのたびに時間を待たなくていい。
cache: 'npm'と書いていたが、リポジトリにpackage-lock.jsonが存在しなかった。npmキャッシュはlockファイルを必要とするため、実行時にエラーで停止した。cache: 'npm'の行を削除するだけ。ファイルがないのにキャッシュを使おうとしたのが原因だった。
2回の修正を経てワークフローが成功した。ニュース収集・整形・送信まで約35秒で完結する。
エデニーちゃんキャラが機能していることを確認できた瞬間があった。AIニュースの中にUEFNのスターウォーズ情報が含まれていて、botが「たくちゃん絶対興味あるやろ〜!」と一言添えてきた。
ただの情報収集ではなく、誰かが届けてくれた感覚になっている。その差は、実際に使ってみると大きい。
技術的なポイントとして、Claude APIのweb_searchツールはリアルタイムのウェブ情報にアクセスできる。通常のClaudeは学習データまでの情報しか持っていないが、このツールを組み合わせることで「今日のニュース」を取得できる。LLMに時事情報を持たせる方法として、最もシンプルなアプローチだと思う。
EdenyBotに毎朝のAIニュース自動通知機能を追加した。Claude APIのweb_searchでニュースを収集し、エデニーちゃんキャラで整形してLINE Push APIで送信——この流れをGitHub Actionsのcronで全自動化した。
行き詰まりは2件で、どちらも設定上の単純なミス。構造そのものは想定通りに動いた。向こうから話しかけてくるbotが毎朝9時に動き始めた——それだけで、道具が少し生き物に近づいた気がした。