【Googleスプレッドシート】SlackにApps Scriptで通知!Webhook URL経由のメッセージ送信

【Googleスプレッドシート】SlackにApps Scriptで通知!Webhook URL経由のメッセージ送信
🛡️ 超解決

Slackにスプレッドシートの更新を自動で通知したいと思ったことはありませんか。WebhookとApps Scriptを組み合わせれば、メールを使わずに、リアルタイムで通知を送ることが可能になります。この記事では、SlackのIncoming Webhookの設定方法から、Google Apps Scriptでメッセージを投稿するスクリプトの作成、定期実行のトリガー設定までを詳しく解説します。初心者の方でもステップに沿って進めれば、すぐに通知機能を実装できるようになります。

この記事を読み終えると、以下の3つの操作を習得できます。SlackのWebhook URLを発行して通知先を決める方法、Apps ScriptでHTTP POSTリクエストを送るスクリプトの書き方、そしてトリガーを使って完全自動化する設定です。手動でSlackを開く手間から解放され、スプレッドシートの状態を即座にチームと共有できます。

【要点】Slack通知をApps Scriptで自動化する3ステップ

  • Slack Incoming Webhookの作成: Slack APIサイトでWebhook URLを発行し、通知先のチャンネルを指定します。
  • Apps ScriptでのPOST送信: UrlFetchApp.fetchを使ってWebhook URLにJSONペイロードを送信し、メッセージを投稿します。
  • トリガー設定による定期実行: スプレッドシートの編集時や時間主導型トリガーでスクリプトを自動実行し、通知を完全自動化します。

ADVERTISEMENT

Slack WebhookとApps Scriptで通知を送る仕組み

SlackのIncoming Webhookは、外部アプリケーションからSlackにメッセージを投稿するための専用URLです。このURLに対してHTTP POSTリクエストを送ると、指定したチャンネルにメッセージが即座に表示されます。Google Apps ScriptにはUrlFetchAppというクラスが用意されており、Web APIへのリクエストを簡単に実行できるようになっています。また、Apps Scriptにはトリガー機能が備わっていて、スプレッドシートの編集時や一定時間ごとにスクリプトを自動起動できます。この仕組みを理解すれば、スプレッドシートのデータをSlackに反映するあらゆる自動化が可能になります。

Slack通知を自動化する具体的な手順

SlackでIncoming Webhookを作成する

  1. Slack APIサイトにアクセスする
    ブラウザで「api.slack.com/apps」を開き、Slackアカウントでログインします。ワークスペースの管理者権限が必要な場合があります。
  2. 新しいアプリを作成する
    「Create New App」をクリックし、「From scratch」を選びます。アプリ名(例:「スプレッドシート通知」)と開発用のワークスペースを選択して作成します。
  3. Incoming Webhooksを有効化する
    左メニューの「Incoming Webhooks」を開き、スイッチをオンにします。ページ下部の「Add New Webhook to Workspace」ボタンをクリックします。
  4. 通知先チャンネルを選択して承認する
    表示された画面でメッセージを投稿したいチャンネルを選び、「許可する」をクリックします。自動的にWebhook URLが生成されます。
  5. Webhook URLをコピーする
    先ほどの画面に戻ると、Webhook URLが追加されています。このURLをメモ帳などに安全に保管してください。

Google Apps Scriptで通知用スクリプトを作成する

  1. スプレッドシートからスクリプトエディタを開く
    スプレッドシートを開き、メニューの「拡張機能」→「Apps Script」をクリックします。デフォルトのプロジェクトが開きます。
  2. スクリプトコードを記述する
    コード.gsに以下の関数を入力します。Webhook URLは先ほどコピーしたものに置き換えてください。
function sendToSlack() {
  // Webhook URLを設定します。
  var webhookUrl = 'https://hooks.slack.com/services/T00000000/B00000000/xxxxxxxx';
  // 送信するメッセージを作成します。
  var message = {
    text: 'スプレッドシートが更新されました。'
  };
  // HTTP POSTリクエストのオプションを設定します。
  var options = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(message)
  };
  // Webhook URLにリクエストを送信します。
  UrlFetchApp.fetch(webhookUrl, options);
}
  1. スクリプトを保存して実行する
    フロッピーディスクアイコンをクリックして保存し、関数名「sendToSlack」を選択して▶実行ボタンを押します。初回は権限の承認画面が表示されるので、自分のアカウントで承認してください。実行後にSlackのチャンネルを確認し、メッセージが届いていれば成功です。
  2. メッセージにスプレッドシートのデータを含める
    以下のように、スプレッドシートのセル値を取得してメッセージに組み込むことも可能です。この例では、シート1のA1セルの値を最終更新日時として送信します。
function sendToSlackWithData() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1');
  var lastUpdate = sheet.getRange('A1').getValue();
  var webhookUrl = 'https://hooks.slack.com/services/...';
  var message = {
    text: '最終更新: ' + lastUpdate
  };
  var options = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(message)
  };
  UrlFetchApp.fetch(webhookUrl, options);
}

トリガーを設定して定期実行する

  1. Apps Scriptのトリガー画面を開く
    スクリプトエディタの左側にある時計アイコン「トリガー」をクリックし、「トリガーを追加」ボタンを押します。
  2. トリガーの条件を設定する
    「実行する関数」で「sendToSlack」を選びます。「イベントのソース」を「時間主導型」にすると、指定した間隔で自動実行されます。例えば「時間ベースのタイマー」で「1時間おき」を選べば、1時間ごとに通知が送られるようになります。
  3. スプレッドシートの変更をトリガーにする
    「スプレッドシートから」を選び、「変更時」を選択すると、セルの編集や行の追加などの変更があったときにスクリプトが実行されます。ただし、頻繁な変更があると過剰に通知が行くため、用途に応じて使い分けてください。
  4. トリガーを保存して動作を確認する
    設定後、「保存」をクリックします。これで自動化の準備が整いました。実際にスプレッドシートを編集するか、次の時間まで待って通知が届くか確認してください。

よくあるトラブルと対処法

Webhook URLが間違っているとメッセージが届かない

Webhook URLの綴りが正しいか、末尾のスラッシュの有無を確認します。Slackのアプリ設定画面から再度コピーし、余計な空白が入っていないかチェックしてください。ワークスペースが本来のものと異なる場合も届かないため、アプリが正しいワークスペースにインストールされているか確認します。

Apps Scriptの実行中にエラーが出る

UrlFetchApp.fetchのエラーは、ネットワークの問題かJSONペイロードの形式ミスが原因です。optionsのcontentTypeが「application/json」になっているか、payloadがJSON.stringifyで正しく変換されているか確認します。Apps Scriptの「表示」→「ログ」からエラーメッセージを確認し、問題箇所を特定してください。

Slackに意図した内容が表示されない

messageオブジェクトにtext以外のプロパティ(attachmentsやblocks)を指定している場合、文法に誤りがある可能性があります。まずは単純なtextだけのメッセージでテストし、段階的に機能を追加するとよいです。変数の中身がundefinedでないかも確認してください。日本語の文字化けは通常発生しませんが、もし起きた場合はcharsetを指定する必要はありません。

トリガーが予期したタイミングで動作しない

時間主導型トリガーはGMT基準で動作するため、日本時間とは9時間の時差があります。最小間隔は1時間で、それより細かい設定はできません。変更時トリガーは編集、入力、書式変更など様々な変更を検知しますが、頻繁すぎるトリガーはApps Scriptの1日の実行回数制限(通常90分/日)に達する恐れがあります。実行制限に達した場合は、翌日まで待つか、トリガーの頻度を減らしてください。

ADVERTISEMENT

手動実行とトリガー実行の違い

項目 手動実行 トリガー実行
実行タイミング スクリプトエディタで実行ボタンを押したとき 指定した時間経過後またはスプレッドシートの変更時
手間 その都度手動で操作が必要 一度設定すれば自動
通知の即時性 任意のタイミングで即時送信できる トリガーの間隔に依存(最短1時間または変更時すぐ)
用途 テスト実行や臨時の通知 定期的な進捗報告や変更の監視
制限 なし Apps Scriptの実行回数制限に注意

まとめ

この記事では、SlackのIncoming WebhookとGoogle Apps Scriptを使って、スプレッドシートからSlackに自動通知を送る方法を解説しました。Webhook URLの取得、スクリプトの作成、トリガー設定の3ステップで実現できます。応用として、スプレッドシートの特定セルの値をメッセージに含めたり、複数のチャンネルに通知を振り分けるカスタマイズも可能です。まずはシンプルなテキスト通知から試し、徐々に機能を拡張してみてください。マークダウンを使ったメッセージの装飾や、SlackのBlock Kitを利用したリッチな通知にも発展させられます。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

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