本文へスキップ

GASでニュース配信LINEボットを作った。AI要約はやめて、費用0円で動いている

·

  • 自作ツール
  • GAS
  • LINE

毎朝、気になるテーマのニュースを自分のLINEに届けてくれるボットを、Google Apps Script(GAS)で作ってみた。GASは、Googleが無料で用意しているプログラムの実行場所のようなものだ。

先に結論を書いておく。最初はAIに要約させるつもりだったけれど、途中でやめた。 AIを使うための「鍵」をGASに置くのが、セキュリティ的に少し怖くなったからだ。やめてみたら見出しだけでも十分だったし、費用も0円になった。

LINE側の準備は、前の記事「LINEに通知を送る準備で迷ったのは、2つの管理画面の行き来だった」にまとめている。

どんなものを作ったか

毎朝7時〜8時のあいだに、3つのテーマのニュースの見出しとリンクがLINEに届く。

テーマ 件数 どのくらい前の記事まで
生成AI 5件 1日以内
B2Bマーケティング 5件 1日以内
ピックルボール(趣味) 2件 7日以内

テーマごとに吹き出しが分かれていて、3つまとめて届く。一度送った記事は覚えておいて、次の日からは送らないようにしている。

ニュースは「Google ニュース」から取ってきている。Google ニュースには、検索結果を機械が読みやすい形で配ってくれる仕組み(RSS)があって、キーワードを指定すればその一覧がもらえる。

動きとしては、こんな流れだ。

  1. 毎朝、GASが自動でプログラムを動かす
  2. Google ニュースから、キーワードに合う記事の一覧をもらう
  3. まだ送っていない記事だけを選ぶ
  4. 自分のLINEに送る
  5. うまくいかなかったときは、LINEとメールで知らせてくれる

お金と時間

項目 内容
費用 0円(GAS、Google ニュース、LINEの無料プラン)
LINEの通数 1日1通で月30通くらい。無料の月200通に収まる
かかった時間 LINE側の準備と合わせて約3時間

少しずつ「動いた!」を積み重ねた

いきなり完成形を目指さず、小さく区切って、1つずつ「ここまで動いた」を確かめながら進めた。

段階 やること ゴール
0 テーマや件数、届く時間を決める 決めることが全部決まる
1 LINE側の準備 トークンとユーザーIDが手元にある
2 GASから「テスト」と1通送ってみる 自分のLINEに届く
3 ニュースの見出しを取って送る 見出しの一覧が届く
4 AIで要約して送る やめた
5 毎朝自動で動くようにする 翌朝、何もしなくても届く(1回目は届かなかった)

こうしておくと、うまくいかなかったときに「段階2までは動いていたから、原因はその後だな」とすぐ当たりがつく。これはかなり助かった。

トークンはプログラムに直接書かない

LINEに送るには、前の記事で手に入れた「トークン」と「ユーザーID」が必要になる。どちらもパスワードのようなものだ。

これをプログラムの中に直接書いてしまうと、プログラムを人に見せたときや、記事に載せたときに一緒に漏れてしまう。そこで、GASの設定画面にある「スクリプト プロパティ」という、プログラムとは別の保管場所に入れておいた。プログラムからは「LINE_TOKENという名前のものを取ってきて」と呼び出すだけなので、中身はプログラムに出てこない。

つまずき① 実行ボタンが押せない

プログラムを貼りつけて、いざ「実行」を押そうとしたら、押せなかった。

原因は、保存していなかったこと。Ctrl+Sで保存したら、すんなり押せるようになった。

普段使っているGoogleドキュメントは勝手に保存されるので、GASもそうだと思い込んでいた。

つまずき② 届いたのは「テスト」の1つだけ

段階3で、ニュースを送るプログラムに入れ替えて実行した。3つの吹き出しが届くはずが、届いたのは1つだけ。

開いてみると、中身は「テスト」。段階2で作った、テスト送信のほうが動いていた。プログラムを入れ替えても、「どれを実行するか」の選択は前のままだったのだ。選び直したら、3つともちゃんと届いた。

エラーは何も出ない。ちゃんと動いた結果として、違うものが届く。初めてだと「プログラムが間違っているのかな」と疑ってしまうところだ。

つまずき③ B2Bマーケティングの記事が2件しかない

初めて取ってきた結果は、生成AIが5件、B2Bマーケティングが2件、ピックルボールが2件だった。

B2Bマーケティングは、1日以内の記事だと数が少なかった。日本語の記事では「B2B」より「BtoB」と書かれることが多いので、両方で探すように広げてみた。

それでも足りなければ、3日以内まで広げるつもりだ。届く記事が本当に読みたいものかどうかも、何日か見ながら調整していく。

AI要約をやめた理由

もともとの計画は「ニュース要約ボット」だった。集めた記事をAI(Claude)に要約させてから届けるつもりで、使い方や料金まで調べていた。

AIを使うには、APIキーと呼ばれる「鍵」が必要になる。これをGASに置いておき、毎朝その鍵を使ってAIに頼む、という仕組みだ。

ここで、少し怖くなった。 この鍵が万一漏れたら、他人に勝手に使われて、料金がかかってしまうかもしれない。使用額に上限をつける、専用の鍵にする、といった対策も調べた。でも、自分で管理する鍵が1つ増えること自体が、なんとなく落ち着かなかった。

そこで、AIなしで見出しだけを送ってみた。すると、見出しを読めば、何のニュースかは十分に分かった。 気になったものだけリンクを開けばいい。

もうひとつ、作っている途中で分かったことがある。Google ニュースからもらえるのは見出しとリンクだけで、記事の本文は入っていない。 AIに渡せるのも見出しだけなので、「要約」といっても見出しの言い換えくらいにしかならない。それなら、なおさらAIはいらない。

AIで要約(最初の計画) AIなし(今の形)
届くもの 見出し+AIの説明+リンク 見出し+リンク
費用 月に数十円くらいの見込み 0円
管理する鍵 LINEのトークンとAIのAPIキー LINEのトークンだけ
止まる可能性がある場所 GAS、ニュース、LINE、AI GAS、ニュース、LINE

AIを入れると、お金だけでなく、気にかけないといけないものが1つずつ増える。今回の目的なら、それに見合うだけの効果はなかった。

つまずき④ 翌朝、届かなかった

全部できた!と思って寝た翌朝。LINEを開いても、ニュースは届いていなかった。

GASの画面を開いて確かめてみると、原因はあっけないものだった。毎朝動かすための設定(トリガー)を、そもそもしていなかった。

GASでは、プログラムを書いて手動で動かせても、それだけでは毎朝勝手に動いてはくれない。「毎日この時間にこれを動かして」という予約を、別の画面で登録する必要がある。それがトリガーだ。手動で実行してLINEに届いたところで、すっかり完成した気になっていた。

確認したのは、GASの左側にあるこの2つの画面だ。

画面 分かること
トリガー(時計のマーク) 毎朝動く予約が入っているか
実行数(リストのマーク) 実際に動いたか、エラーが出たか

トリガーの画面は空っぽだった。「毎日、午前7時〜8時に dailyJob を動かす」と登録し直し、あわせてタイムゾーンが日本(東京)になっているかも確かめた。ここがアメリカの時間のままだと、「朝7時」が日本の夜中になってしまうらしい。

次の朝からは、何もしなくてもLINEにニュースが届くようになった。これでようやく完成だ。

やってみて分かったこと

AIは「使えるか」より「使う理由があるか」で決めればいい。 作る前は、要約があったほうが便利だと思っていた。でも、AIなしで一度動かしてみたら、なくても困らなかった。鍵の管理が増える不安と比べて、やめるほうを選んだ。

「怖い」と感じたら、その気持ちは大事にしていい。 セキュリティのことは詳しくないけれど、「よく分からないものを抱えるのは落ち着かない」という感覚は、たぶん正しい。分からないまま増やすより、減らせるなら減らすほうが安心だ。

「手で動いた」と「毎朝動く」は別物。 手動で実行して届いた時点で、完成した気になっていた。自動で動かすための予約は、別に設定しないといけない。完成したかどうかは、何もしないで次の朝を迎えてみるまで分からない。

小さく区切ると、つまずいた場所がすぐ分かる。 「テスト」が1つだけ届いたときも、段階2までは動いていたので、原因の見当がすぐについた。

つまずくのは、プログラムより画面の操作。 保存しないと実行できない、実行するものを選び直す、トリガーを設定し忘れる。どれもプログラムの中身の問題ではなかった。前の記事のLINEの管理画面と同じで、今回も時間を使ったのは「どこを操作するか」だった。

この規模なら、外注しなくても自分で作れる。 必要だったのは、3時間ほどの作業と、困ったときにAIへ画面を見せて聞き直すことくらい。逆に、記事の本文まで取ってきて要約する、となると一気に難しくなる。自分で作るか頼むかの境目は、そのあたりにありそうだ。

よくある質問

プログラミングが得意でなくても、GASでLINEにニュースを届けるボットは作れますか?
作れました。私は非エンジニアですが、LINE側の準備と合わせて約3時間で、毎朝ニュースが届くところまでできました。つまずいたのは、プログラムの中身よりも「保存しないと実行できない」「実行する関数を選び直す」といった画面の操作でした。
AIでニュースを要約させなかったのはなぜですか?
AIを使うには、APIキーという「鍵」をGASに置く必要があり、セキュリティ的に少し怖いと感じたからです。万一漏れると、他人に使われて料金がかかるおそれがあります。実際に見出しだけを送ってみると、それでも内容は十分分かったので、AIなしにしました。
GASで作ったプログラムが、翌朝に自動で動かないのはなぜですか?
トリガー(毎日決まった時間に動かす予約)が設定されていない可能性があります。手動で実行できても、トリガーがなければ自動では動きません。GASの左側の時計のマークから「トリガーを追加」で登録します。あわせて、プロジェクトの設定でタイムゾーンが東京になっているかも確認してください。
Google ニュースのRSSで、記事の要約はできますか?
RSSに入っているのは、見出しと媒体名とリンクだけで、記事の本文は入っていません。AIに渡せるのも見出しだけなので、本文の要約にはなりません。
このボットの費用はいくらですか?
0円です。GAS、Google ニュースのRSS、LINE公式アカウントの無料プランだけで動いています。LINEの無料プランは月200通までで、1日1回なら月30通くらいに収まります。

← 記事一覧へ