GasとSlackで効率化!リアクション集計の自動化方法

あの…Slackでリアクションを集計する方法ってありますか?GASを使って自動化できるという話を聞いたんですが…。
猫男
猫男
catman
catman
そうか、リアクション集計をGASとSlackで効率化したいんだね。catmanが教えてやるさ。

GASを使ったSlackリアクション集計の基本

GAS(Google Apps Script)を利用することで、Slackのリアクションを自動で集計することができます。まずは、基本的な設定を行いましょう。

Slack APIとGASの連携

Slack APIを使うためには、まずSlackアプリを作成し、React APIを有効にする必要があります。

以下のステップがあります。

  1. Slackの管理コンソールで新規アプリを作成する。
  2. 必要なAPIスコープを設定(リアクションに対するスコープを有効化)。
  3. Slack APIトークンを取得し、GASスクリプトに設定する。

GASスクリプトでの設定

GAS側では、Slackからリアクション情報を取得するためのスクリプトを準備します。


const SLACK_TOKEN = 'your-slack-api-token';
function getReactionsFromSlack() {
    const url = 'https://slack.com/api/reactions.list?token=' + SLACK_TOKEN;
    const response = UrlFetchApp.fetch(url);
    const data = JSON.parse(response.getContentText());
    return data;
}

このスクリプトでは、Slackのリアクション情報を取得しています。UrlFetchApp.fetch()を使って、指定されたURLからデータを取得します。

 

なるほど、SlackのAPIトークンを使ってデータを取ってくるんですね!簡単そうで良かったです。
猫男
猫男

 

リアクションデータの整理と出力

取得したリアクションデータを整理し、どのようにスプレッドシートに出力するかを見ていきます。

データの整理

取得したデータが多い場合、整理することが必要です。


function parseReactions(data) {
    const reactions = [];
    data.items.forEach(item => {
        item.message.reactions.forEach(reaction => {
            reactions.push({
                name: reaction.name,
                count: reaction.count,
                users: reaction.users
            });
        });
    });
    return reactions;
}

このスクリプトは取得したデータを回し、リアクションの名前、数、ユーザー情報を配列に追加します。

整理したデータをスプレッドシートに出力


function updateSpreadsheet(reactions) {
    const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    sheet.clear();
    sheet.appendRow(['リアクション名', '数', 'ユーザー']);
    reactions.forEach(reaction => {
        sheet.appendRow([reaction.name, reaction.count, reaction.users.join(', ')]);
    });
}

スプレッドシート上にリアクションデータを書き出し、集計結果を視覚的に確認できるようにします。

 

なるほど!簡単なスクリプトで、スプレッドシートにまとめられるんですね。もっと効率的に管理できます!
猫男
猫男

 

練習問題

以下の練習問題に挑戦してみましょう。

問題: 上記のスクリプトを基にして、新しいリアクションが追加された場合のみ更新されるようにしてみましょう。

  

解答・解説


function updateSpreadsheetWithCheck(reactions) {
    const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    const existingData = sheet.getDataRange().getValues();
    const existingReactions = existingData.map(row => row[0]);
    
    reactions.forEach(reaction => {
        if (!existingReactions.includes(reaction.name)) {
            sheet.appendRow([reaction.name, reaction.count, reaction.users.join(', ')]);
        }
    });
}

このスクリプトでは、スプレッドシートに既存のリアクションが含まれていない場合のみ、リアクションを追加します。これにより、新しいリアクションのみを追加し、既存のデータと重複しないようにできます。

EARTHPG 自動化研究所

「その作業、仕組みにできます。」

Google Apps Script、Python、スプレッドシート自動化、WordPress開発、 API連携、AI活用まで対応。 小さな自動化から業務全体の設計まで、研究所が支援します。