GASでサクッとSlack通知!Googleスプレッドシートと連携する自動化の第一歩
「スプレッドシートに新しいタスクが追加されたのに、誰も気づかなくて作業が遅れた…」 チームで仕事をしていると、こんな「情報共有のタイムラグ」に悩まされることはありませんか?
こんにちは!料理のレシピもすべてスプレッドシートで管理している、効率化マニアのWebエンジニアです。
今回は、無料で使えて超強力な自動化ツール「Google Apps Script(通称:GAS)」を使って、スプレッドシートの情報が更新された瞬間に、自動でSlackへメッセージを通知する仕組みを作ってみます。プログラミング初心者の方でもコピペで動かせるように解説します!
なぜGAS(Google Apps Script)なのか?
GASは、Googleが提供しているプログラミング環境です。JavaScriptという言語をベースにしており、特別なソフトをインストールすることなく、ブラウザ上で直接コードを書いて実行できます。
最大のメリットは、Googleの各種サービス(スプレッドシート、Gmail、カレンダーなど)との連携が異常に簡単だということです。今回は「スプレッドシート」と、外部のチャットツールである「Slack」を連携させます。
連携の仕組み(Mermaid図解)
全体のデータの流れは以下のようになります。「Webhook(ウェブフック)」という仕組みを使って、GASからSlackの指定された窓口へメッセージを投げ込みます。
graph TD
A["ユーザーがスプレッドシートを編集"] -->|トリガー検知| B{"GASスクリプトが自動起動"}
B --> C["編集されたセルの内容を取得"]
C --> D["通知用のメッセージ文を作成"]
D -->|HTTP POST送信| E["SlackのIncoming Webhook URL"]
E --> F["Slackの指定チャンネルにメッセージが表示される"]
style B fill:#eff6ff,stroke:#2563eb
style E fill:#f8fafc,stroke:#475569
実践:Slackに「タスク追加」を通知する
それでは、実際に設定を行っていきましょう。大きく分けて「Slack側の設定」と「スプレッドシート(GAS)側の設定」の2ステップです。
ステップ1:Slackで「Incoming Webhook」を取得する
まずは、Slackが外部からメッセージを受け取るための「専用URL」を発行します。
- 通知を送りたいSlackのワークスペースで、「App(アプリ)」の設定画面を開きます。
- 「Incoming WebHooks」というアプリを検索してインストールします。
- 通知を送るチャンネル(例:
#task-updates)を選択し、「Incoming WebHook インテグレーションの追加」をクリック。 - 発行された Webhook URL (
https://hooks.slack.com/services/...)をコピーしてメモしておきます。これがSlackへの「秘密の合言葉」になります。
ステップ2:GASのコードを書く
次に、スプレッドシートを開きます。
上部のメニューから 拡張機能 > Apps Script を選択すると、GASのエディタ画面が開きます。
最初から書かれている function myFunction() { ... } を消して、以下のコードをコピペしてください。
// SlackのWebhook URLを設定(先ほどコピーしたURLに書き換えてください)
const SLACK_WEBHOOK_URL = "https://hooks.slack.com/services/XXXXXXXXX/YYYYYYYYY/ZZZZZZZZZZZZZZZ";
function sendToSlack(message) {
// Slackへ送るデータの形を整える
const payload = {
"text": message,
"icon_emoji": ":robot_face:", // お好みでアイコンを変更
"username": "GAS通知ボット"
};
const options = {
"method": "post",
"contentType": "application/json",
"payload": JSON.stringify(payload)
};
// 実際に送信を実行
UrlFetchApp.fetch(SLACK_WEBHOOK_URL, options);
}
// スプレッドシートが編集されたときに自動で呼ばれる特別な関数
function onEdit(e) {
// e(イベントオブジェクト)から、編集されたセルの情報を取得
const range = e.range;
const sheet = range.getSheet();
// 例として「タスク管理」という名前のシート以外では何もしない
if (sheet.getName() !== "タスク管理") return;
// 編集された行番号と列番号を取得
const row = range.getRow();
const col = range.getColumn();
// 例として、B列(タスク名、列番号2)が編集された時だけ通知する
if (col === 2) {
const newValue = e.value;
// 入力された値が空(削除)の場合は無視
if (!newValue) return;
const message = `🚨 新しいタスクが追加/更新されました!\n行番号: ${row}\n内容: ${newValue}`;
// Slackへ送信関数を呼び出す
sendToSlack(message);
}
}
私の失敗談:トリガーの設定忘れと権限エラー
GASを初めて触る人が100%陥る罠があります。私も例に漏れずハマりました。 コードを書いても、それだけでは自動で動きません。
GASから外部(今回はSlackのURL)へ通信を行うには、初回だけ「権限の承認」が必要です。
エディタ画面の上部で sendToSlack 関数を選んで「実行」ボタンを押し、Googleアカウントの警告画面を進んで「許可」を与えてください。(初回はエラーが出ますが、許可できればOKです)。
また、onEdit は単純な編集トリガー(シンプルトリガー)ですが、外部通信を行う場合は、左側のメニューの「トリガー(時計アイコン)」から、手動でインストーラブルトリガーを設定(「実行する関数: onEdit」「イベントの種類: 編集時」)しないと通信がブロックされる場合があります。ここ、本当にテストに出るレベルで引っかかりやすいポイントです。
まとめ:業務連絡は人間がやるべき仕事じゃない
「これ終わりました」「新しいデータ入れました」という単なる事実の共有は、人間が手動でチャットを打つべき仕事ではありません。
- GASを使えば、Googleのサービスと外部ツールを魔法のように連携できる。
- Webhookは、システム同士が会話するためのインターフェース。
- 自動化により、人間は「その通知を見てどう行動するか」という本質的な業務に集中できる。
一度この便利さを知ってしまうと、もう手動でのコピペ報告には戻れなくなります。ぜひ、あなたのチームのちょっとした情報共有から、自動化を始めてみてください!
関連記事(IT)
Notion APIで作る!自分だけの最強プロジェクト進捗ダッシュボード
2026/08/21
長いコマンド打ってない?Makefileで開発タスクを劇的に効率化する
2026/08/21
無料で使える最強のクーロン!GitHub Actionsで定期実行スクリプトを動かす
2026/08/21