About Services Blog News 運営者
GAS 2026年4月10日

GASでスプレッドシートの更新をSlackに自動通知する方法【Webhook設定から実演まで】

この記事について

私はGAIDEというGAS自動化ツールを開発しています。GAIDEのユーザーに利用目的をヒアリングしたところ、メール自動送信に次いで多かったのが「スプレッドシートの情報をSlackに通知したい」という要望でした。この記事では、Slack Incoming Webhookの取得からGASコードの実装・トリガー設定・動作確認まで、一連の流れをスクリーンショット付きで解説します。

完成イメージ

スプレッドシートでタスク管理をしていて、期限が近いタスクがあると毎朝9時にSlackに自動でこのような通知が届く仕組みを作ります。

c4

前提:Slack Incoming Webhookとは

Incoming Webhookは、外部のプログラムからSlackのチャンネルにメッセージを投稿するための仕組みです。URLを1つ発行して、そのURLにHTTPリクエストを送ると、指定したチャンネルにメッセージが表示されます。

GAS側では UrlFetchApp.fetch() という関数を使ってこのURLにデータを送ります。

ステップ1:Slack Incoming Webhook URLを取得する

Slackの管理画面でWebhook URLを発行します。手順は以下の通りです。

まず、ブラウザで https://api.slack.com/apps にアクセスし、「Create New App」→「From scratch」を選択します。

c1

App名(例:「GAS通知」)と、通知を送りたいSlackワークスペースを選択して「Create App」をクリックします。

次に、左メニューの「Incoming Webhooks」をクリックし、トグルを「On」にします。ページ下部の「Add New Webhook to Workspace」をクリックし、通知先のチャンネル(例:#general)を選択して「許可する」をクリックします。

c3

Webhook URLが発行されます。https://hooks.slack.com/services/T.../B.../xxx のような形式です。このURLをコピーしておいてください。

ステップ2:スプレッドシートを準備する

タスク管理用のスプレッドシートを用意します。以下の構成にしてください。

A列にタスク名、B列に期限日(例:2026-04-10)、C列にステータス(「未完了」「完了」)を入力します。

テスト用に、期限が今日・明日・3日後のタスクをそれぞれ入れておくと動作確認がしやすいです。

ステップ3:GASコードを書く

スプレッドシートのメニュー「拡張機能」→「Apps Script」を開き、以下のコードを貼り付けてください。

function notifyDeadlinesToSlack() {
  // ここにステップ1で取得したWebhook URLを貼り付ける
  var SLACK_WEBHOOK_URL = 'https://hooks.slack.com/services/YOUR/WEBHOOK/URL';

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var data = sheet.getDataRange().getValues();

  var today = new Date();
  today.setHours(0, 0, 0, 0);

  var alerts = [];

  for (var i = 1; i < data.length; i++) {
    var taskName = data[i][0];
    var deadline = new Date(data[i][1]);
    var status = data[i][2];

    if (status === '完了') continue;

    deadline.setHours(0, 0, 0, 0);
    var diffDays = Math.round((deadline - today) / (1000 * 60 * 60 * 24));

    if (diffDays === 0) {
      alerts.push(':sos: *本日が期限* : ' + taskName);
    } else if (diffDays === 1) {
      alerts.push(':warning: *明日が期限* : ' + taskName);
    } else if (diffDays === 3) {
      alerts.push(':bell: *3日後が期限* : ' + taskName);
    } else if (diffDays < 0) {
      alerts.push(':rotating_light: *期限超過(' + Math.abs(diffDays) + '日)* : ' + taskName);
    }
  }

  if (alerts.length === 0) {
    Logger.log('通知対象のタスクはありません');
    return;
  }

  var message = ':calendar: *本日の期限アラート*' + '\n' + alerts.join('\n');

  UrlFetchApp.fetch(SLACK_WEBHOOK_URL, {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify({ text: message })
  });

  Logger.log(alerts.length + '件の通知をSlackに送信しました');
}

コードのポイント解説

このコードの設計で意識したのは3点です。

1点目は、期限超過のタスクも検知している点です。diffDays < 0 のケースを入れることで「3日前に期限が過ぎたのに放置されているタスク」も通知に含まれます。実務ではこれが一番重要な通知です。

2点目は、通知対象がゼロの場合はSlackに何も送らない設計にしている点です。「今日は通知なし」というメッセージを毎朝送ると、すぐにチャンネルがノイズだらけになります。

3点目は、setHours(0,0,0,0) で日付の時刻部分をリセットしている点です。これをしないと、スプレッドシートの日付データに含まれる時刻情報のせいで、日数の差分計算がずれることがあります。GASの日付処理で最もハマりやすいポイントです。

ステップ4:テスト実行

「▶ 実行」ボタンを押して動作確認します。初回は承認ダイアログが表示されます(外部URLへのアクセス許可)。承認後、Slackのチャンネルを確認してください。

通知が届いていれば成功です。

c4

ステップ5:毎朝自動実行するトリガーを設定

GASエディタの左メニュー「トリガー」→「トリガーを追加」から、notifyDeadlinesToSlack を毎朝9時に実行するよう設定します。設定方法はメール自動送信の記事と同じです。

GAIDEでやるとどうなるか

GAIDEに以下のように入力します。

「スプレッドシートのA列にタスク名、B列に期限日、C列にステータスが入っています。未完了のタスクのうち、期限が今日・明日・3日後・期限超過のものをSlackに通知してください。

c5

Slack Webhook URLの取得だけは自分で行う必要がありますが、GASコードの生成とApps Scriptへの保存はGAIDEで完結します。

GAIDEを無料で試す →

まとめ

GASとSlack Incoming Webhookを組み合わせれば、スプレッドシートの期限日を自動監視してSlackに通知する仕組みを30分で作れます。日付の時刻リセット(setHours)、通知なし時のスキップ、期限超過の検知、この3点を入れるだけで実用レベルの品質になります。Webhook URLの取得が最初のハードルですが、この記事の手順通りに進めれば5分で完了します。

GAIDE

この自動化、GAIDEなら3分で実現できます

AIに話しかけるだけでGASコードを自動生成。プログラミング知識は不要です。

ログイン不要・クレジットカード不要

Seaside Lab

Seaside Lab

AIとWebで、もっと便利に