技術ブログ

GASでSlack Botを自作!基本から応用まで徹底解説

/ 初心者向け

GASでSlack Botを自作!基本から応用まで徹底解説

GASでSlack Botを自作!基本から応用まで徹底解説

「もっと便利にチームのコミュニケーションをしたい」「定型的な報告を自動化したい」

そんな時、Slack Botの作成を検討する方も多いのではないでしょうか。実は、Google Apps Script (GAS) を使えば、プログラミング初心者でも比較的簡単にオリジナルのSlack Botを作成できるんです。

本記事では、GASの基本から、Slackとの連携方法、そして実際にBotを作成する手順までを、図解を交えながら分かりやすく解説していきます。GASとSlack Botの可能性を広げ、あなたのワークフローを劇的に改善しましょう!

GASとは?

Google Apps Script(GAS)は、Google Workspace(Gmail, Google Drive, Google Sheetsなど)の機能を拡張したり、自動化したりするためのJavaScriptベースのスクリプト言語です。ブラウザ上でコードを記述・実行できるため、特別な開発環境を用意する必要がありません。Googleアカウントがあればすぐに始められるのが魅力です。

なぜGASでSlack Botを作るのか?

GASでSlack Botを作成するメリットは、主に以下の点が挙げられます。

  • 手軽さ: Googleアカウントがあればすぐに始められ、特別なツールは不要。
  • 連携の容易さ: Google SheetsやGmailなど、他のGoogleサービスとの連携が容易。
  • 無料: 一定の利用量までは無料で利用可能。
  • 柔軟性: 独自の処理を記述し、カスタマイズ性の高いBotを作成できる。

Slack Botの基本構成要素

Slack Botを作成するには、大きく分けて以下の要素が必要になります。

1. Slack側の設定: Botアプリの作成と、Webhook URLの取得。

2. GAS側のスクリプト: Slackにメッセージを送信するためのコード。

Step 1: Slack側の設定

まずはSlack側でBotを作成し、GASからメッセージを送信するための準備をします。

1. Slack Appの作成

1. Slack API にアクセスし、「Create an App」ボタンをクリックします。

2. 「From scratch」を選択します。

3. App Name(アプリ名)と、App Directories への表示設定(Workspaceにインストールする場合はNoneでOK)を行います。そして、開発するWorkspaceを選択して「Create App」をクリックします。

2. Incoming Webhooksの有効化

作成したAppの設定画面で、左側のメニューから「Incoming Webhooks」を選択し、 「Activate Incoming Webhooks」をオンにします。

次に、「Add New Webhook to Workspace」ボタンをクリックし、メッセージを投稿したいチャンネルを選択して「Allow」をクリックします。これで、そのチャンネルにメッセージを投稿するためのWebhook URLが生成されます。

このWebhook URLはGASからSlackにメッセージを送る際に必要になるので、コピーして控えておきましょう。

Step 2: GAS側のスクリプト作成

次に、GASエディタでSlackにメッセージを送信するスクリプトを作成します。

1. GASプロジェクトの作成

1. Google Drive を開き、「新規」>「その他」>「Google Apps Script」を選択して新しいスクリプトプロジェクトを作成します。

2. プロジェクト名を分かりやすいものに変更します(例: SlackBotSender)。

2. スクリプトの記述

以下のコードをGASエディタに貼り付けます。

function sendMessageToSlack() {
  var slackWebhookUrl = 'ここに取得したSlackのWebhook URLを貼り付け'; // ← ここを置き換える

  var message = {
    text: 'GASからこんにちは!これはテストメッセージです。'
  };

  var options = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(message)
  };

  UrlFetchApp.fetch(slackWebhookUrl, options);
}

コードの説明:

  • slackWebhookUrl: 先ほどSlack側で取得したWebhook URLを貼り付けます。
  • message: Slackに送信するメッセージの内容をJavaScriptオブジェクトで定義します。textプロパティにメッセージ本文を指定します。
  • options: methodpostcontentTypeapplication/jsonに設定します。payloadには、JSON.stringify()で文字列化したメッセージオブジェクトを指定します。
  • UrlFetchApp.fetch(): GASで外部URLにHTTPリクエストを送信するための関数です。ここでSlackのWebhook URLに対してPOSTリクエストを送信しています。

3. スクリプトの実行

1. GASエディタの上部にある「実行」ボタン(▶️のようなアイコン)をクリックします。

2. 初回実行時には、スクリプトの実行に必要な権限の許可を求められます。「権限を確認」をクリックし、指示に従って承認してください。

3. 実行が完了したら、Slackの指定したチャンネルにテストメッセージが投稿されているか確認しましょう。

応用編: Google Sheetsと連携したSlack Bot

GASの真価は、他のGoogleサービスとの連携にあります。ここでは、Google Sheetsに新しい行が追加されたら、その内容をSlackに通知するBotを作成してみましょう。

1. Google Sheetsの準備

  • Slackに通知したい情報が含まれるGoogle Sheetsを作成します。例えば、A列にタスク名、B列に期日などを入力するシートです。

2. GASスクリプトの修正

以下のスクリプトは、Google Sheetsの変更を検知し、Slackに通知する例です。

function sendSheetDataToSlack() {
  var spreadsheetId = 'ここにGoogle SheetsのスプレッドシートIDを貼り付け'; // ← ここを置き換える
  var sheetName = 'Sheet1'; // ← 通知したいシート名
  var slackWebhookUrl = 'ここに取得したSlackのWebhook URLを貼り付け'; // ← ここを置き換える

  var ss = SpreadsheetApp.openById(spreadsheetId);
  var sheet = ss.getSheetByName(sheetName);

  // 前回の最終行番号をユーザープロパティに保存・取得する
  var lastRow = PropertiesService.getUserProperties().getProperty('lastRow_' + spreadsheetId + '_' + sheetName) || 0;
  var currentRow = sheet.getLastRow();

  if (currentRow > lastRow) {
    // 新しく追加された行のデータを取得
    var range = sheet.getRange(lastRow + 1, 1, currentRow - lastRow, sheet.getLastColumn());
    var data = range.getValues();

    // Slackに送信するメッセージを作成
    var messageText = '【新着タスク】\n';
    for (var i = 0; i < data.length; i++) {
      // 例: A列(タスク名), B列(期日)
      messageText += '- ' + data[i][0] + ' (期日: ' + data[i][1] + ')\n';
    }

    var message = {
      text: messageText
    };

    var options = {
      method: 'post',
      contentType: 'application/json',
      payload: JSON.stringify(message)
    };

    UrlFetchApp.fetch(slackWebhookUrl, options);

    // 今回処理した最終行番号を保存
    PropertiesService.getUserProperties().setProperty('lastRow_' + spreadsheetId + '_' + sheetName, currentRow);
  }
}

コードの説明:

  • spreadsheetId: 通知したいGoogle SheetsのスプレッドシートIDを貼り付けます。(URLの /d//edit の間の文字列です)
  • sheetName: 通知したいシートの名前を指定します。
  • PropertiesService.getUserProperties(): GASでユーザー固有の設定を保存・取得できるサービスです。これにより、前回処理した行を記憶しておき、差分のみを通知できます。
  • sheet.getRange().getValues(): 指定した範囲のセルの値を取得します。
  • ループ処理で取得したデータを整形し、Slackに送信するメッセージを作成しています。

3. トリガーの設定

このスクリプトを自動実行させるために、トリガーを設定します。GASエディタの左側にある時計アイコン(トリガー)をクリックし、「トリガーを追加」ボタンをクリックします。

  • 実行する関数を選択: sendSheetDataToSlack
  • 実行するデプロイを選択: Head
  • イベントのソースを選択: スプレッドシートから
  • イベントの種類を選択: 変更時
  • 通知設定: 適宜設定

「保存」をクリックすると、Google Sheetsが変更されるたびにGASスクリプトが実行され、Slackに通知が送信されるようになります。

まとめ

GASを使えば、複雑なコーディングなしに、あなたのワークフローを便利にするカスタムSlack Botを簡単に作成できます。今回ご紹介した内容は基本ですが、これを応用すれば、もっと多様な自動化が可能になります。

  • Gmail連携: 特定のメールを受信したらSlackに通知
  • Google Calendar連携: イベントのリマインダーをSlackに送信
  • 外部API連携: 天気予報やニュースなどの情報をSlackに定期的に投稿

GASとSlack Botを組み合わせることで、チームの生産性向上はもちろん、日々の業務をより快適にすることができるでしょう。

ぜひ、あなただけのオリジナルSlack Bot作りに挑戦してみてください!

GAS自動化の導入相談

請求書PDF作成、Gmail自動送信、Slack通知、スプレッドシート連携などを業務に合わせて実装できます。

請求書自動生成ツールを見る / SNS自動投稿ツールを見る