スキップしてメイン コンテンツに移動

Slack連携GASで自動通知

Slack連携GASで自動通知

GAS実践でSlack連携を始める

Google Apps Script(GAS)は、Google Workspace のサービスを自動化するための強力なツールです。今回のテーマは、GASを使ってSlackに通知を送る方法です。まずは、Slack側でIncoming Webhookを作成し、Webhook URL を取得します。次に、GAS のスクリプトエディタで以下のようにコードを書き、Webhook URL を呼び出すだけでメッセージ送信が可能になります。

function sendSlackMessage(text) {
  var url = 'https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX';
  var payload = {
    text: text,
    channel: '#general'
  };
  var options = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(payload)
  };
  UrlFetchApp.fetch(url, options);
}

この関数をトリガーに紐付ければ、スプレッドシートの更新やフォーム送信時に自動通知が可能です。

Incoming Webhookでメッセージ送信を自動化

Incoming Webhook は Slack の外部アプリケーションからメッセージを送る最も簡単な方法です。Webhook URL を取得したら、JSON 形式でメッセージを送信します。GAS では UrlFetchApp.fetch を使い、POST リクエストを送るだけです。以下は、チャンネル名を動的に変更する例です。

function postToChannel(channel, message) {
  var url = 'https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX';
  var payload = {
    channel: channel,
    text: message
  };
  var options = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(payload)
  };
  UrlFetchApp.fetch(url, options);
}

この関数を使えば、複数のチャンネルに対して同時に通知を送ることも簡単に実装できます。

SlackAppとボットでChatOpsを実現

SlackApp を作成し、Bot Token を取得すると、より高度な連携が可能です。Bot を使えば、メッセージの返信やリアクション、ユーザー情報の取得など、Incoming Webhook では実現できない機能を利用できます。以下は、Bot を使ってメッセージを送信し、特定のユーザーに通知する例です。

function sendBotMessage(channel, text) {
  var token = 'xoxb-XXXXX-XXXXX-XXXXX';
  var url = 'https://slack.com/api/chat.postMessage';
  var payload = {
    channel: channel,
    text: text
  };
  var options = {
    method: 'post',
    headers: {
      'Authorization': 'Bearer ' + token,
      'Content-Type': 'application/json'
    },
    payload: JSON.stringify(payload)
  };
  UrlFetchApp.fetch(url, options);
}

このように Bot を組み合わせることで、ChatOps のワークフローを構築し、開発・運用の自動化をさらに推進できます。

実践例:自動通知システムの構築

ここでは、スプレッドシートの特定セルが更新されたときに Slack の #alerts チャンネルへ自動通知を送るシステムを構築します。まず、スプレッドシートに「監視対象」シートを作り、更新日時と値を記録します。次に、GAS の onEdit トリガーを設定し、以下のように処理します。

function onEdit(e) {
  var sheet = e.source.getSheetByName('監視対象');
  var range = e.range;
  if (range.getA1Notation() === 'B2') { // 監視セル
    var value = range.getValue();
    var message = 'セル B2 が更新されました: ' + value;
    sendSlackMessage(message); // 先ほど作成した関数
  }
}

このスクリプトを保存し、トリガーを有効にすれば、セルが変更されるたびに自動通知が Slack に届きます。さらに、Bot を使って通知のフォーマットを整えたり、リアクションを付けることで、運用チームの作業効率を大幅に向上させることができます。

この記事はAIによって作成されました。

コメント