📓

Slackでの情報共有を効率化!Gemini 1.5 ProとGoogle Apps Script(GAS)で記事要約Botを作ってみた

2024/07/01に公開

はじめに

現代は情報が溢れすぎており、必要な記事や情報を効率的に把握するのが難しくなっています。インターネットやSNSでは膨大な量のコンテンツが日々生成されており、重要な記事を見逃したり、読む時間がないと感じている人も多いのではないでしょうか。

そこで、今回作成したのが、URLを指定するだけで記事の要約をSlackに投稿できるBotです。

主な機能は次のとおりです。

  1. Slackでのメンション、またはスプレッドシートに記載されたURLからコンテンツを抽出
  2. 抽出したコンテンツをAIで要約
  3. 要約した文章をSlackチャンネルに投稿

このBotを活用することで、Slackのチャンネルのメンバーは重要な記事を見逃さず、必要な情報に迅速にアクセスできます。情報収集の時間を節約し、アイデアの創出も促進できればと思います。

技術概要・仕様

このBotは以下の技術を使って構成されています。

  • Google Apps Script (GAS): プログラムのメイン部分
  • Gemini API (Gemini 1.5 Pro): AIによる要約機能の提供
  • Google Sheets (スプレッドシート): URLや要約記事のデータ管理
  • Slack API: Slackとの連携

Botの動作フローは以下の通りです。

  1. SlackでBotにメンションを付けてURLを投稿するか、スプレッドシートにURLを入力
  2. GASスクリプトが新しいURLを検出
  3. 検出されたURLから記事の内容を抽出
  4. Gemini 1.5 Pro APIを利用して要約
  5. 要約結果をSlackチャンネルに投稿

ちなみに、Gemini 1.5 Proを採用した理由は以下の通りです。

  • OpenAI GPT-4oよりも、プロンプトに応じた要約文章の作成が安定していると感じたこと
  • 本アプリケーションの機能仕様に対して、無料利用枠が十分だったこと(以下公式参考)

https://ai.google.dev/pricing?hl=ja

開発手順

以下の手順で開発を進めます。

1. Google Sheet(スプレッドシート)の作成

まず、スプレッドシートを作成し、以下の列を用意します。

列名 説明
A列 URL
B列 ページタイトル
C列 要約内容
D列 Slack投稿
E列 投稿先チャンネルID

本シートのA列にURLが入力された場合、もしくは、SlackでメンションされたメッセージにURLが含まれていれば、Webページの記事内容が要約され、Slackに投稿される仕組みです。

投稿完了後、B列〜D列の情報は自動で記載されます。投稿先のチャンネルを変更する場合は、E列にSlackチャンネルのIDを記入します。

SlackチャンネルIDの取得方法については、こちらの記事を参考にしてください。

https://qiita.com/akis1215/items/cb68b2de6542a742da0a

2. Gemini API Keyの取得

次に、Google AI Studioにログインし、Gemini APIのAPI Keyを取得します。

https://ai.google.dev/gemini-api?hl=ja

3. Slack Appの設定(Botの作成とトークンの取得)

Slackのワークスペースで、記事の要約文章を投稿するためのSlack Appを作成し、トークンを取得します。具体的な作成〜取得方法はこちらの記事を参考にしてください。

https://zenn.dev/lclco/articles/712d482d07e18c#slack-app(チャットボットアプリ)を作成する

4. Google Apps Scriptプロジェクトの作成

Google Apps Scriptプロジェクトを作成し、以下のファイルを追加します。

common.gs

共通の関数と定数を定義します。

https://github.com/toono-f/gas-youyaku/blob/main/gas/common.js

fetchAndPostUnfinishedUrls.gs

シートから取得したページの記事内容を要約し、Slackに投稿するまでの処理を実装します。

https://github.com/toono-f/gas-youyaku/blob/main/gas/fetchAndPostUnfinishedUrls.js

handleSlackPostRequest.gs

Slackからのイベント処理を実装します。

https://github.com/toono-f/gas-youyaku/blob/main/gas/handleSlackPostRequest.js

fetchAIAnswerSummary.gs

Gemini APIを使用した要約処理を実装します。

https://github.com/toono-f/gas-youyaku/blob/main/gas/fetchAIAnswerSummary.js

extractContent.gs

Webページから記事の内容を抽出します。

今回は、以下の記事で紹介されているextractContent.gsを利用させていただきます。

https://qiita.com/takatama/items/6f86d0d1e0de601506b5

5. Google Apps Scriptのスクリプトプロパティを設定

これまでの過程で取得した各値をスクリプトプロパティに登録します。

  • SLACK_BOT_AUTH_TOKEN: Slack App作成時に取得したトークン
  • API_KEY: 取得したGemini API KEY
  • SLACK_CHANNEL_ID: 投稿先のSlackチャンネルID

6. GASのスクリプトを自動で実行するトリガーの作成

fetchAndPostUnfinishedUrls関数のトリガーを設定し、スプレッドシートに新たなURLが追加された場合に実行されるようにします。

7. Slack AppとGASでデプロイしたアプリケーションを連携

Slack AppのEvent Subscriptionsに、デプロイしたアプリケーションのURLを設定します。

完成イメージ

作成したSlack Botに、要約させたいページのURLをメンションします。そうすると間もなく、要約した文章を投稿してくれます。

作成したスプレッドシートにもページURLやタイトル、要約文章が自動で追加されます。

今回作成したBotは、Slackでメンションせずとも、スプレッドシートにURLを追加するだけでチャンネルに投稿してくれる仕様になっています。こちらの方法も試してみてください。

最後に

今回は、Google Apps ScriptとGemini 1.5 ProのAPIを使用して、Slackで動作する記事要約Botを作成する方法を紹介しました。このBotを活用することで、チーム内の情報共有の効率化やアイデアの創出につながれば幸いです。ぜひ試してみてください。

LCL Engineers

Discussion