やじうまの杜

「ChatGPT」にニュースを自動で集めるプログラムを作らせてみたら、コードが書けない私でも「Discord BOT」ができちゃった話

小一時間ほどで完成して情報収集力が上がった気がする!

 “やじうまの杜”では、ニュース・レビューにこだわらない幅広い話題をお伝えします。
ChatGPTを使って簡単なツールを作ってみました

 私は普段の情報収集にRSSリーダーを使っています。

 主にチェックしているジャンルはゲームやテクノロジー系、VA/AR/MR、メタバースなど、それほど多くありません。それでも国内の各Webメディアに加え、海外メディアなどを入れると、チェックするフィードの数はかなりの量になります。1日で数千件のニュースをチェックするなんてこともあります。

 さすがに全てを本文の最後の最後まで読んでいるわけではありませんが、この数になるとタイトルを流し見するだけでも結構時間がかかります。そうなると取りこぼしが発生することも少なくありません。特に重要でなかったり、あまり興味のない記事なら問題はないのですが、そういうときに限って気になるニュースが流れてしまっていたりするものです。

窓の杜のRSSフィードだけでもそれなりな数になります。これで他メディアのもとなると、やっぱり取りこぼしが発生しがちです

 そこで、あらかじめ設定した自分の気になるキーワードを含んだ記事を、自動で「Discord」に投稿してくれる仕組みを作りたいと考えました。投稿する先はDiscord以外に「Slack」なども候補にありましたが、私が中毒的にDiscordを見ていることから、今回は「Discord」に投稿する形に決めました。

 ですが、いきなり大きな問題が立ち塞がります。というのも私はコードをほとんど書けないのです。先に弁明させてもらうと、全く知識がないというわけではないのですが、いろいろなプログラミング言語の勉強をつまみ食いしては挫折して……を繰り返してきました。ですので、思い通りのコードが書けるかというとそんなことはなく、ギリギリできるとしたら、Webにあるサンプルコードをつぎはぎしてなんとか動かせるというレベルです。

 そんな中、いまは「ChatGPT」をはじめとする生成AIが盛り上がっている昨今。とりあえず自分用に動くスクリプトを作る程度であれば、「ChatGPT」に任せてみたいと思いました。そこで本稿では「ChatGPT」(今回はGPT-4の「Code Interpreter」)を使用してコードを書いてもらいました。

 ちなみに今回は「Python」を使ったコードを生成しています。恐らくほかの言語でもできると思うのですが、私の環境で「Python」を実行できるものがあったので、そちらを使っています。

手元のWindowsに「Python」の実行環境を作っていたのでそちらで検証します。最終的には24時間動かせるサーバー環境に移しました

 さて、前置きが長くなりましたが、私が考えた要件は下記の通りです。要件というには簡素すぎますが、これ以上思いつかなかったので、これで「ChatGPT」に聞いてみます。

  • RSSで特定のテーマを引っ掛ける
  • 本文を取得してAIに要約してもらう
  • Webブラウザーでも見れて、「Webhook」で通知を飛ばして「Discord」でも読めるようにする

 そうしたところ、こういった返答が帰ってきました。

要件……と言えるものではないですが、とりあえず整理してもらいました

 必要な情報を「ChatGPT」が整理してくれました。この時点でWebのインターフェイスを考えるのが大変なことに気づき、一旦その要件を外しました。また、タイトルしか読んでいないので、ひとまず要約の機能も外し、ChatGPTが言う「RSSフィードの選定」、「キーワードの設定」、「Webhookの設定(Discordに投稿する部分)」を実装することにしました。

 いきなり全てを解決しようとすると私が混乱してしまうのと、今後進めていくにあたり、エラーなどが出たときもパーツ毎にテストをしていった方が特定しやすいということもあり、少しずつ進めていきます。まずはRSSフィードの情報を取得するコードを、「ChatGPT」に書いてもらいました。

1パーツずつ作っていきます。まずはRSSフィードを読み込むところです

 実行すると、細かいエラー(publishedというエントリーがRSSフィードに含まれていない)が発生したのですが、これはすぐにピンと来たので手動で直しました。もちろん「ChatGPT」に答えを聞いてもよいと思います。

 次は新着のフィードだけを読めるような実装を依頼しました。恐らくいくつか手法があると思うのですが、「ChatGPT」は前回取得したフィードをファイルに保存して差分をチェックする形式を提案してきました。ここまで来ると筆者には実装方法や具体的なコードは思いつきません。特に反対する理由もないのでこのまま進めます。

 こちらもローカルのPython環境で問題なく動作しました。

雑な要件を指定してみましたが、よい感じに解釈してコードが生成されました

 続いて、特定のキーワードでフィードを検索する部分です。こちらも筆者には具体的なコードが全く思いつかない範囲なので、「ChatGPT」にすべてを託します。

 こちらは最終的には問題なく動作するコードだったのですが、キーワードと一致させる部分に違和感を感じたので、コードの意図を聞いてみました。

タイトルに特定の文字列が含まれる場合のみ出力されるように改造させます

 全く問題なさそうです。RSSフィードを取得し、エントリーのタイトルに特定のキーワードが含まれている場合のみ出力するコードはここまでで完成しました。

コードの一部をコピペしてどんな動作をしているか解説させることもできます

 次は「Discord」に送信する部分を作っていきます。

 なお、「Discord」の仕様といった詳細は記事の趣旨から外れるので省きますが、今回は「Webhook」という仕組みを使って「Discord」にメッセージを送るようにしています。

メッセージを送信する部分はもちろん、実際にライブラリのインストール方法まで生成されます

 それまで生成したコードを前提に、「Discord」にメッセージを送信する部分を追加するコードが生成できました。

カスタマイズが必要な部分もきっちりと教えてくれました

 順調に進んでいたかと思いきや、ここで問題発生です。このコードを実行したところエラーが発生しました。結果的にこちらも筆者のミスだったのですが、エラーメッセージをそのままコピペして「ChatGPT」にヘルプを頼みます。

エラーが発生してしまったのでエラーメッセージをそのままコピペします。エラーの原因もきっちりと解説されます

 「ChatGPT」はエラー原因の解説とともに、正しく動作するコードを生成してくれました。実際にこのコードをローカル環境で動かすと、全く問題なく動作しました。すごいの一言ですね。

 ここまでの手順でかかった時間は小一時間くらいでしょうか。コードは正しいのですが、私の動かし方が悪く、動作しなかった時間もあるので、それらがなければもっと短時間でここまで来れたと思います。また、エラー処理などを含めてきっちりとしたコードを書くとすると、もう少し手間をかける必要があると思います。ただ自分用に使うという意味では十分な内容だと感じました。

 ちなみに、最終的にはこのあと利便性を向上するためのカスタマイズも入れているのですが、そこは割愛させてください。ただ、追加した部分についても自分でコードを書いたところはほとんどなく、すべて「ChatGPT」に任せています。

指定したサイトのRSSフィードを取得し、設定されたキーワードをタイトルに含むニュースを「Discord」に投稿してくれます。とても便利です

 「ChatGPT」にはいろいろな活用の仕方があります。その一方で、使い方がありすぎて何から手をつければよいかわからない側面があるのも事実です。もし何に使ってみるか迷ったら、こういった自分専用のツールを作ってみるのもよいかもしれません。

 自分で書いたコードを添削してもらうなど、「ChatGPT」はプログラミングの勉強にも使えると思います。もちろん入門書を読みながら、実際にコードをゼロから書いてみるというのもよいと思いますよ。