ADVERTISEMENT

【Googleスプレッドシート】Slack通知をWebhookで送る!Apps ScriptからのIncoming Webhook

【Googleスプレッドシート】Slack通知をWebhookで送る!Apps ScriptからのIncoming Webhook
🛡️ 超解決

Googleスプレッドシートのデータが更新されたとき、Slackに自動で通知が届けば便利だと思ったことはありませんか。SlackのIncoming Webhook機能を使えば、スプレッドシートの変更をトリガーにSlackへメッセージを送信できます。この記事では、SlackでWebhook URLを取得する方法から、Google Apps ScriptでそのURLにPOSTリクエストを送るコード、さらにトリガー設定までを詳しく解説します。初心者の方でもステップごとに進めれば、数分で連携を実現できます。

【要点】Slack Incoming WebhookとApps ScriptでスプレッドシートからSlack通知を送る

  • Slack Incoming Webhookの設定: Slackアプリ管理画面からWebhook URLを発行し、特定のチャンネルにメッセージを投稿できるようにします。
  • Apps ScriptのUrlFetchApp.fetch: スクリプトからHTTP POSTリクエストでWebhook URLにJSONペイロードを送信します。
  • トリガーによる自動化: 編集・フォーム送信・時間主導のトリガーを設定して、更新時に自動でSlackへ通知できます。

ADVERTISEMENT

Slack Incoming Webhookとは何か

Slack Incoming Webhookは、外部のアプリケーションからSlackの特定のチャンネルにメッセージを投稿するための仕組みです。発行されたURLに対してJSON形式のデータをPOSTすると、Slackが自動的にメッセージとして表示します。特別な認証やライブラリは不要で、URLさえあればどんなプログラミング言語からでも利用できます。GoogleスプレッドシートのApps Scriptからも、UrlFetchApp.fetchメソッドを使って簡単にPOSTリクエストを送信できます。

SlackでIncoming Webhookを作成する手順

まずはSlack側でWebhook URLを発行します。以下の手順で設定を進めます。

  1. Slack API管理画面を開く
    ブラウザで「api.slack.com/apps」にアクセスし、使用するワークスペースにログインします。[Create New App]をクリックし、[From scratch]を選択します。
  2. アプリ名とワークスペースを設定
    アプリ名(例:Google Sheets Notifier)を入力し、インストール先のワークスペースを選んで[Create App]をクリックします。
  3. Incoming Webhooksを有効化
    左メニューから[Incoming Webhooks]を選び、[Activate Incoming Webhooks]スイッチをONにします。
  4. Webhook URLを生成する
    ページ下部の[Add New Webhook to Workspace]をクリックし、通知を送りたいチャンネルを選択します。[Allow]を押すと、Webhook URLが発行されます。このURLは後でスクリプトで使いますので、メモしておいてください。

Google Apps ScriptでWebhookを送信するコード

SlackのWebhook URLを取得したら、次はGoogleスプレッドシートのスクリプトエディタでコードを記述します。以下が基本的な関数です。

function postToSlack(message) {
  var url = "https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/xxxxxxxxxxxxxxxxxxxxxxxx";
  var payload = {
    "text": message
  };
  var options = {
    "method": "post",
    "contentType": "application/json",
    "payload": JSON.stringify(payload)
  };
  UrlFetchApp.fetch(url, options);
}

この関数は引数messageで受け取った文字列を、Slackに投稿します。urlの部分は先ほど発行したWebhook URLに置き換えてください。ペイロードにはtextだけでなく、usernameやicon_emojiなどSlackのメッセージフォーマットに従った項目を追加できます。

トリガーを設定して自動化する

特定のセルが編集されたときや、フォーム送信時に通知したい場合は、トリガーを設定します。スクリプトエディタの左メニューから時計アイコンの[トリガー]をクリックし、[トリガーを追加]を選びます。実行する関数にpostToSlackを、イベントの種類には「編集時」「フォーム送信時」「時間主導型」などから選べます。例えば、セルA1が更新されたらSlackに通知する場合は、onEdit関数内で条件分岐します。

function onEdit(e) {
  var range = e.range;
  if (range.getA1Notation() === "A1") {
    postToSlack("A1が更新されました: " + range.getValue());
  }
}

応用例:複数行の通知やリッチメッセージ

ペイロードを工夫することで、見出しや色付きのメッセージ(attachments)を送ることもできます。以下の例では、ヘッダーとフィールドを設定して見やすくしています。

var payload = {
  "attachments": [{
    "color": "#36a64f",
    "title": "スプレッドシート更新通知",
    "fields": [
      {"title": "更新者", "value": Session.getActiveUser().getEmail(), "short": true},
      {"title": "更新日時", "value": new Date().toLocaleString(), "short": true}
    ],
    "footer": "Google Sheets"
  }]
};

さらに、IMPORTRANGEで別ファイルのデータを取得して通知する場合も、同じ仕組みで応用できます。

ADVERTISEMENT

注意点とよくあるトラブル

Webhook URLの漏洩に注意する

Webhook URLを知っている人は誰でもそのチャンネルにメッセージを投稿できてしまいます。スクリプト内に直接URLを書く場合は、スクリプトの公開範囲を制限するか、スクリプトプロパティに保存して参照する方法が安全です。スクリプトプロパティを使うには、[ファイル]→[プロジェクトのプロパティ]→[スクリプトのプロパティ]でKEY=VALUE形式で保存し、PropertiesService.getScriptProperties().getProperty(‘KEY’)で取得します。

ペイロードの文字数制限

Slack Incoming Webhookのペイロードは、1回のリクエストで約40,000文字までという制限があります。大量のデータを送るとエラーになるため、長いテキストは分割するか、ファイルとしてアップロードする方法を検討しましょう。

レート制限

Slackは1分間に1回程度のリクエストを推奨しています。短時間に何度もトリガーが発動すると、制限に引っかかってメッセージが届かないことがあります。トリガーの間隔を適切に設定するか、一度の実行で複数の変更をまとめて通知するようにします。

URLが変わった場合の更新忘れ

Slackアプリを再インストールしたり、ワークスペースを変更するとWebhook URLが変わることがあります。その場合はスクリプト内のURLも更新する必要があります。定期的に動作確認をするか、変数で管理しておくと変更が楽です。

比較表:Webhook送信とSlack APIの違い

項目 Incoming Webhook Slack Web API (chat.postMessage)
認証方法 URL自体にトークンが含まれる OAuthトークンが必要
投稿先チャンネル URL作成時に固定 リクエストで指定可能
メッセージの種類 シンプルなテキスト、アタッチメント ボタン、モーダルなど高度なブロック対応
制限 1分1通推奨、40,000文字 レートリミットあり(1分20回など)
利用の難易度 非常に簡単(URLにPOSTするだけ) トークン取得とスコープ設定が必要

Incoming Webhookは簡単さが最大のメリットです。一方、チャンネルを動的に変えたい場合やリッチなインタラクションが必要な場合は、Web APIの利用を検討しましょう。

まとめ

この記事では、Slack Incoming Webhookの設定からGoogle Apps Scriptでメッセージを送信する方法、自動化のトリガー設定までを解説しました。これでスプレッドシートの更新をSlackでリアルタイムに把握できるようになります。さらに、フォーム送信時の自動返信や、定期的なレポートの通知など、応用範囲は広いです。ぜひ自分のワークフローに合わせてカスタマイズしてみてください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。