GASでスプレッドシートの更新をSlackに自動通知する方法【Webhook設定から実演まで】
この記事について
私はGAIDEというGAS自動化ツールを開発しています。GAIDEのユーザーに利用目的をヒアリングしたところ、メール自動送信に次いで多かったのが「スプレッドシートの情報をSlackに通知したい」という要望でした。この記事では、Slack Incoming Webhookの取得からGASコードの実装・トリガー設定・動作確認まで、一連の流れをスクリーンショット付きで解説します。
完成イメージ
スプレッドシートでタスク管理をしていて、期限が近いタスクがあると毎朝9時にSlackに自動でこのような通知が届く仕組みを作ります。
前提: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」を選択します。
App名(例:「GAS通知」)と、通知を送りたいSlackワークスペースを選択して「Create App」をクリックします。
次に、左メニューの「Incoming Webhooks」をクリックし、トグルを「On」にします。ページ下部の「Add New Webhook to Workspace」をクリックし、通知先のチャンネル(例:#general)を選択して「許可する」をクリックします。
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のチャンネルを確認してください。
通知が届いていれば成功です。
ステップ5:毎朝自動実行するトリガーを設定
GASエディタの左メニュー「トリガー」→「トリガーを追加」から、notifyDeadlinesToSlack を毎朝9時に実行するよう設定します。設定方法はメール自動送信の記事と同じです。
GAIDEでやるとどうなるか
GAIDEに以下のように入力します。
「スプレッドシートのA列にタスク名、B列に期限日、C列にステータスが入っています。未完了のタスクのうち、期限が今日・明日・3日後・期限超過のものをSlackに通知してください。
Slack Webhook URLの取得だけは自分で行う必要がありますが、GASコードの生成とApps Scriptへの保存はGAIDEで完結します。
まとめ
GASとSlack Incoming Webhookを組み合わせれば、スプレッドシートの期限日を自動監視してSlackに通知する仕組みを30分で作れます。日付の時刻リセット(setHours)、通知なし時のスキップ、期限超過の検知、この3点を入れるだけで実用レベルの品質になります。Webhook URLの取得が最初のハードルですが、この記事の手順通りに進めれば5分で完了します。
この自動化、GAIDEなら3分で実現できます
AIに話しかけるだけでGASコードを自動生成。プログラミング知識は不要です。
ログイン不要・クレジットカード不要
Seaside Lab
AIとWebで、もっと便利に