Slack / Google Chat × Googleスプレッドシートでリアルタイム通知を実装する方法
なぜリアルタイム通知が必要なのか?
Googleフォームを使った申請や日報、問い合わせなどは、スプレッドシートに自動で蓄積されます。しかし、担当者が定期的にスプレッドシートを開いて更新状況を確認するのは非効率です。SlackやGoogle Chatと連携し、「新しい行が追加されたら即座に通知」を受け取れるようにすれば、申請や問い合わせに迅速に対応できます。結果として業務のスピードが向上し、担当者のストレスも軽減されます。
この記事では、Google Apps Script(GAS)を使ってスプレッドシート更新をトリガーに、SlackやGoogle Chatへ自動通知を送る方法を詳細に解説します。基本的な設定から、通知のカスタマイズ、セキュリティ上の注意点、応用アイデアまで幅広く取り上げます。
全体の仕組み
- スプレッドシートに新しい行が追加される – Googleフォームや手動入力により申請・問い合わせが登録されます。
- トリガーが発火 – Apps Scriptの
onFormSubmit()
やonEdit()
トリガーがイベントを検知します。どちらを使うかは運用次第ですが、フォーム送信時に確実に通知したい場合はonFormSubmit()
が適しています。 - Webhookへ通知リクエストを送信 – Apps ScriptからSlackまたはGoogle ChatのWebhook URLに対してPOSTリクエストを送り、メッセージを生成します。
- 担当者が確認 – メッセージには日付や氏名、申請内容へのリンクが含まれているため、担当者はクリック一つで詳細を確認できます。
Slack連携の準備
Slackに通知するには、Incoming Webhooks 機能を利用します。2025年現在、Incoming WebhookはSlackアプリの機能として提供されており、カスタムボットの廃止に伴いアプリの作成が必須となっています。以下の手順でWebhook URLを取得します。
- Slackアプリの作成 – Slack APIにアクセスし、「Create an App」から新しいアプリを作成します。Workspaceを選択し、アプリ名を付けます。
- Incoming Webhooksの有効化 – Featuresから「Incoming Webhooks」を選択し、機能をオンにします。追加先のチャンネルを選び、「Add New Webhook to Workspace」をクリックするとWebhook URLが生成されます。URLは機密情報なので、Apps Script以外では公開しないようにしてください。
- 必要に応じてScopesを追加 – 後述するボタン付きメッセージやスレッド通知に対応したい場合は、
chat:write
など追加の権限が必要です。アプリ管理画面のOAuth & Permissionsで設定します。
Webhook URLを取得したら、Apps Scriptのコードに定義します。
const SLACK_WEBHOOK_URL = "https://hooks.slack.com/services/XXXX/XXXX/XXXX";
Google Chat連携の準備
Google Chatでは、スペースにWebhookを追加することで外部アプリからメッセージを受け取れるようになります。手順は以下の通りです。
- 通知用スペースを準備 – Google Chatで新しいスペースを作成するか、既存スペースに通知を送ります。スペースのアクセス権限や表示設定を整えておくと、後からメンバーに共有しやすくなります。
- Webhookの作成 – スペースの右上にある設定メニューから「アプリと統合」→「Webhookを追加」を選択します。Webhook名やアイコンを設定して保存するとWebhook URLが発行されます。こちらもSlack同様、他者に漏らさないように注意してください。
- メッセージ形式の確認 – Google Chatはシンプルなテキストメッセージだけでなく、リッチな「カードメッセージ」に対応しています。タイトルやセクション、ボタンを含めたカードを利用すると見やすく、リンクや操作をまとめて提供できます。必要に応じてカード形式を検討しましょう。
Webhook URLはApps Scriptに次のように記述します。
const CHAT_WEBHOOK_URL = "https://chat.googleapis.com/v1/spaces/AAA/BBBB/threads/XXX";
Google ChatのWebhook URLはスレッドIDまで含まれた形式になっており、特定のスレッドに返信することも可能です。新しいスレッドでメッセージを投稿したい場合は、URL末尾のスレッドIDを省略します。
Apps Scriptコード例
以下は、スプレッドシートのフォーム送信イベントをトリガーに、SlackとGoogle Chatへ通知するサンプルコードです。スクリプトエディタに貼り付け、トリガー設定を行えば動作します。
Slack通知スクリプト
const SLACK_WEBHOOK_URL = "YOUR_SLACK_WEBHOOK_URL";
function sendSlackNotification(e) {
const sheet = e.range.getSheet();
const row = e.range.getRow();
const values = sheet.getRange(row, 1, 1, sheet.getLastColumn()).getValues()[0];
// SlackのBlock Kit形式でメッセージを構築
const payload = {
blocks: [
{
type: "section",
text: {
type: "mrkdwn",
text: `*新しい申請が追加されました*\n• 日付: ${values[0]}\n• 氏名: ${values[1]}\n• 内容: ${values[2]}`
}
},
{
type: "actions",
elements: [
{
type: "button",
text: { type: "plain_text", text: "シートを開く" },
url: SpreadsheetApp.getActiveSpreadsheet().getUrl(),
style: "primary"
}
]
}
]
};
UrlFetchApp.fetch(SLACK_WEBHOOK_URL, {
method: "post",
contentType: "application/json",
payload: JSON.stringify(payload)
});
}
function onFormSubmit(e) {
sendSlackNotification(e);
}
このスクリプトでは、SlackのBlock Kitを使ってメッセージを整形しています。太字やリスト形式のテキスト、ボタンを付けることで、情報が見やすくなり担当者もすぐにスプレッドシートへアクセスできます。SlackはMarkdownの一部をサポートしており、 を使って改行を入れられます。
Google Chat通知スクリプト
const CHAT_WEBHOOK_URL = "YOUR_CHAT_WEBHOOK_URL";
function sendChatNotification(e) {
const sheet = e.range.getSheet();
const row = e.range.getRow();
const values = sheet.getRange(row, 1, 1, sheet.getLastColumn()).getValues()[0];
// Cardメッセージを組み立て
const card = {
cards: [
{
header: {
title: "新しい申請が追加されました",
subtitle: values[1],
imageUrl: "https://example.com/icon.png",
imageStyle: "IMAGE"
},
sections: [
{
widgets: [
{
keyValue: {
topLabel: "日付",
content: values[0]
}
},
{
keyValue: {
topLabel: "内容",
content: values[2]
}
},
{
buttons: [
{
textButton: {
text: "シートを開く",
onClick: {
openLink: {
url: SpreadsheetApp.getActiveSpreadsheet().getUrl()
}
}
}
}
]
}
]
}
]
}
]
};
UrlFetchApp.fetch(CHAT_WEBHOOK_URL, {
method: "post",
contentType: "application/json",
payload: JSON.stringify(card)
});
}
function onFormSubmit(e) {
sendChatNotification(e);
}
Google Chatのカードは、セクションやウィジェットを組み合わせることで表形式やボタンを含むリッチなメッセージを作成できます。サムネイルやアイコンを設定したり、複数のボタンを並べることも可能です。シンプルなテキストのみを送る場合は、{ text: 'メッセージ' }
の形式でも構いません。
通知のカスタマイズ
通知内容をより使いやすくするために、以下のようなカスタマイズが考えられます。
1. キーワードによるフィルタリング
申請内容に「至急」や「重要」が含まれる場合のみ通知する、特定のカテゴリに応じて異なるチャンネルへ送る、といった条件分岐を加えることができます。Apps Script内で条件を設定し、該当しない場合は通知をスキップします。
if (values[2].toLowerCase().includes("至急")) {
sendSlackNotification(e);
}
2. スレッドへの返信
Slackでは、返信先のthread_ts
を指定することでスレッド内にメッセージを投稿できます。定例報告のスレッドを作成し、関連通知を同じスレッドにまとめるとチャネルが散らかりません。Google ChatでもWebhookのURLにスレッドIDを含めることで、特定のスレッドにメッセージを送ることができます。
3. メンションと絵文字
担当者のユーザーIDやロールを含めてメンションすることで、確実にアラートを届けられます。例として、Slackでは <@U12345678>
の形式でユーザーを指定できます。Google Chatでも @メンション
をカード内に含めることができます。ただし、メンション先のユーザーはスペースのメンバーである必要があります。
4. 直接リンクを付与
通知メッセージ内にスプレッドシートの該当行へのリンクを付ければ、担当者がすぐに編集画面にアクセスできます。gid
や行番号をパラメータとしてURLに含めることで行単位のハイライトが可能です。
5. 画像や添付ファイル
Slackでは画像URLを含めたり、ファイルを添付することもできます。例えば、問い合わせ内容に添付されたスクリーンショットをSlackに送る場合は、Apps ScriptからファイルURLを取得し、JSON内にimage_url
またはfiles
項目を追加します。ただし、ファイルサイズ制限や閲覧権限に注意が必要です。
セキュリティと運用上の注意点
Webhook URLは外部からのPOSTを受け付けるため、第三者に漏れると勝手に通知が送られてしまいます。以下の対策を講じましょう。
- URLの取り扱いに注意 – ソースコードを公開しない。別ファイルに保存し、プロジェクトのプロパティで管理すると安全です。
- アクセス制限と権限管理 – Slackアプリの権限やGoogle Chatスペースのメンバー権限を適切に設定し、必要最小限のユーザーのみが通知を受け取れるようにします。
- エラーハンドリング – Apps ScriptからWebhookを呼び出す際にエラーが返ることがあります。try-catch文でエラーを検出し、ログに記録するか管理者にメール通知する処理を追加しておきましょう。
- トリガーの競合を防ぐ –
onEdit
トリガーはセルの変更すべてに反応するため、不用意に通知が連発されることがあります。運用に応じて対象シートや列を限定し、無駄な通知を抑制します。 - API制限の確認 – SlackやGoogle Chatにはメッセージ送信のレート制限があります。短時間に大量の通知を送る可能性がある場合は、バッチ処理やキューイングを検討してください。
応用アイデア
リアルタイム通知の仕組みは、単に情報を送るだけでなく、業務プロセス全体の自動化に応用できます。
- 承認ワークフローとの連携:申請内容を送信した後、Slack上で「承認」「却下」ボタンを押せるようにすれば、承認結果をスプレッドシートに書き込むプロセスまで自動化できます。SlackのInteractivity機能を利用する場合はApp Manifestや追加のOAuthスコープ設定が必要です。
- 定期レポートの配信:毎日や毎週特定の時間に、スプレッドシートの集計結果をChatやSlackに送る定期実行トリガーを設定できます。Apps ScriptのTime-drivenトリガーで実装します。
- AI要約との組み合わせ:新規申請の内容が長文の場合、Google GeminiやOpenAI APIで要約してから通知すると、担当者は要点を素早く把握できます。要約文と元データへのリンクを合わせて送ることで、情報過多を防ぎます。
- Google Workspace Flows利用:2025年に登場したGoogle Workspace Flowsを利用すると、ノーコードで通知と承認のワークフローを構築できます。自然言語で設定を記述するだけで、Geminiによる判断や資料作成、Chat/Slackへの通知まで自動化できるので、複雑なApps Scriptの管理が不要になります。
まとめ
GoogleスプレッドシートとSlack/Google Chatを連携すれば、申請や問い合わせが追加されるたびにリアルタイムで通知することができます。Webhookは導入が簡単で、SlackならBlock Kit、Google Chatならカード形式によりリッチなメッセージを構築可能です。さらに条件分岐や承認フロー、AI要約などと組み合わせれば、情報共有だけでなく業務全体の自動化につながります。まずは基本の通知機能から導入し、運用状況を見ながらカスタマイズや機能拡張にチャレンジしてみてください。