Google Apps Script(GAS)とSlackを連携させることで、スプレッドシートの更新やフォームの送信を自動でSlackに通知できます。
Slackはビジネスの情報共有ツールとして広く使われていますが、手動での通知作業は意外と手間がかかります。締め切りが近いタスクを毎日チャンネルに書き込む、新しい依頼が来るたびに担当者にメンションする――こういった繰り返し作業はGASで自動化できます。
この記事では、GASからSlackにメッセージを送る基本パターンから、スプレッドシートのデータを定期通知する応用例まで、実際に動くコードで解説します。Incoming Webhookを使うので、Slack APIの深い知識は不要です。
この記事でできること
- GASからSlackの指定チャンネルにメッセージを送信する
- スプレッドシートの内容を毎朝自動でSlackに通知する
- フォーム送信時にリアルタイムでSlack通知を飛ばす
- メンション(@channel、@here、個人)を含んだ通知を送る
事前準備
SlackのIncoming Webhookを有効にする必要があります。Slackの管理画面から「アプリを管理」→「カスタムインテグレーション」→「Incoming Webhook」を開き、通知を送りたいチャンネルを選んでWebhook URLを発行してください。URLは「https://hooks.slack.com/services/」で始まる文字列です。このURLは外部に漏らさないよう注意してください。
GAS側の準備はとくに不要です。Googleアカウントがあれば、スクリプトエディタを開くだけで始められます。
STEP1: 基本のSlack送信関数を作る
まずはGASからSlackにメッセージを送る最小構成のコードです。スクリプトエディタ(script.google.com)を開いて、以下のコードを貼り付けてください。
function sendSlackMessage(message) {
const WEBHOOK_URL = "https://hooks.slack.com/services/XXXXX/YYYYY/ZZZZZ";
const payload = {
text: message
};
const options = {
method: "post",
contentType: "application/json",
payload: JSON.stringify(payload)
};
UrlFetchApp.fetch(WEBHOOK_URL, options);
}
function testSend() {
sendSlackMessage("GASからのテストメッセージです!");
}
WEBHOOK_URLを自分のものに書き換えてから、testSend関数を実行してください。Slackの指定チャンネルにメッセージが届けば成功です。初回実行時は「外部サービスへのアクセスを許可しますか?」という確認ダイアログが表示されるので、「許可」をクリックしてください。
STEP2: スプレッドシートのデータを通知する
次に、スプレッドシートの内容を読み取ってSlackに送信する関数を作ります。例として、タスク管理シートの「期限が今日のタスク」を朝に通知する仕組みを作ります。A列:タスク名、B列:担当者、C列:期限 の構成を想定しています。
function notifyTodayTasks() {
const WEBHOOK_URL = "https://hooks.slack.com/services/XXXXX/YYYYY/ZZZZZ";
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("タスク");
const today = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy/MM/dd");
const data = sheet.getDataRange().getValues();
const todayTasks = [];
for (let i = 1; i < data.length; i++) {
const taskName = data[i][0];
const assignee = data[i][1];
const dueDate = Utilities.formatDate(new Date(data[i][2]), "Asia/Tokyo", "yyyy/MM/dd");
if (dueDate === today && taskName !== "") {
todayTasks.push("・" + taskName + "(担当: " + assignee + ")");
}
}
if (todayTasks.length === 0) {
return;
}
const message = "*本日締め切りのタスク(" + today + ")*
" + todayTasks.join("
");
const payload = { text: message };
const options = {
method: "post",
contentType: "application/json",
payload: JSON.stringify(payload)
};
UrlFetchApp.fetch(WEBHOOK_URL, options);
}
シート名やカラム順は実際のスプレッドシートに合わせて変更してください。
STEP3: 毎朝自動実行するトリガーを設定する
GASのトリガー機能を使って、毎朝決まった時間に自動通知する設定にします。スクリプトエディタの左メニューから「トリガー」(時計のアイコン)をクリックし、「トリガーを追加」ボタンを押してください。
設定内容は以下の通りです。
- 実行する関数: notifyTodayTasks
- イベントのソース: 時間主導型
- 時間ベースのトリガーのタイプ: 日付ベースのタイマー
- 時刻: 午前8時〜9時(業務開始前を選ぶ)
これで毎朝8〜9時の間に自動的にnotifyTodayTasks関数が実行され、当日締め切りのタスクがSlackに通知されます。
STEP4: フォーム送信時にリアルタイム通知する
Googleフォームと連携させると、フォームが送信されるたびにリアルタイムでSlack通知を飛ばせます。フォームに紐付いたスプレッドシートのスクリプトエディタに、以下のコードを追加します。
function onFormSubmit(e) {
const WEBHOOK_URL = "https://hooks.slack.com/services/XXXXX/YYYYY/ZZZZZ";
const responses = e.values;
const timestamp = responses[0];
const name = responses[1];
const content = responses[2];
const message = "*新しいフォーム送信がありました*
" +
"受付時刻: " + timestamp + "
" +
"名前: " + name + "
" +
"内容: " + content;
const payload = {
text: message,
username: "フォーム通知Bot",
icon_emoji: ":mailbox_with_mail:"
};
const options = {
method: "post",
contentType: "application/json",
payload: JSON.stringify(payload)
};
UrlFetchApp.fetch(WEBHOOK_URL, options);
}
このコードを保存したあと、トリガーを追加します。今度は「フォーム送信時」のトリガーを選択し、関数にonFormSubmitを指定してください。フォームが送信されるたびにSlackに通知が届くようになります。
STEP5: メンションを入れた通知を送る
特定の人や全員にメンションしたい場合は、メッセージテキストに特定の文字列を含めます。
// @channel(チャンネル全員に通知)
const message = "緊急連絡です!本日16時からミーティングがあります。";
// Slackでは <!channel> と記述することでチャンネル全員に通知
// @here(現在オンラインのメンバーに通知)
// Slackでは <!here> と記述することでオンラインメンバーに通知
// 個人へのメンション(メンバーIDが必要)
const userId = "U01XXXXXXXX";
// Slackでは <@メンバーID> の形式で個人メンションが可能
個人のメンバーIDはSlackのプロフィール画面から確認できます。プロフィールの「…」メニューから「メンバーIDをコピー」を選択してください。実際のコードでは変数に格納したIDを動的に埋め込むことも可能です。
うまくいかないときのチェックリスト
- Webhook URLが正しいか確認する(スペースや改行が混入していないか)
- GASの実行ログ(表示→ログ)でエラーメッセージを確認する
- 「外部サービスへのアクセス」の許可が完了しているか確認する
- Slackのチャンネルが存在し、Webhookがそのチャンネルに設定されているか確認する
- スプレッドシートの日付フォーマットが「yyyy/MM/dd」と一致しているか確認する
- トリガーの実行時間帯がズレていないか確認する(タイムゾーンをAsia/Tokyoに設定する)
応用・発展
基本のパターンを組み合わせることで、さらに高度な自動化が実現できます。例えば、Slackのメッセージをボタン付きにする場合はBlock Kit形式のペイロードを使います。また、複数チャンネルに同時通知したい場合は複数のWebhook URLに対してループ処理すればOKです。
さらに発展させるなら、Slack APIのchat.postMessageメソッドを使うことで、スレッド返信や既存メッセージの更新、ファイルのアップロードなども可能になります。その場合はSlack AppとOAuthトークンが必要になりますが、Incoming Webhookで物足りなくなったタイミングで移行を検討してみてください。
まとめ
- GASからSlackへの通知はIncoming WebhookとUrlFetchApp.fetch()で実現できる
- スプレッドシートのデータを読み取り、条件に合う情報だけを通知することが可能
- 時間トリガーを使えば定期通知、フォーム送信トリガーを使えばリアルタイム通知ができる
- @channelや@hereのメンションも特定の記法を埋め込むだけで対応できる
- 基本パターンを覚えれば、あらゆる業務通知の自動化に応用できる

コメントを残す