セットアップ手順書 — Slackに自動で通知を投稿する(GAS入門⑤)
SHIFT AI WEBINAR「Slackに自動で通知が届く。Incoming Webhookを覚える60分」(2026-10-14 予定)配布資料
作るもの: GASからSlackのチャンネルへ自動でメッセージを投稿するツール(毎朝「今日の予定」を届け、送った記録をスプレッドシートに残す) 所要時間: 約25分/必要なもの: Googleアカウント・Slackのワークスペース・ターミナル(PCに最初から入っています)
ウェビナー当日に作れなくて大丈夫です。 当日は講師が作るところを見て流れをつかんでいただき、 ご自身の実装はこの手順書を見ながら後日ゆっくりで問題ありません。 今回は中級者向け(GASのエディタを開いたことがある・コードを貼って実行したことがある・Webhookという言葉を聞いたことがある)の内容です。初めての方は第1〜3回のアーカイブで基礎をやってから戻ってくると、スムーズに進みます。
ステップ0: SlackのWebhook URLを取る(10分・ここがいちばん長い)
Webhook(ウェブフック)は、「ここに文章を投げれば、このチャンネルに投稿されます」という専用のURLです。 合言葉つきの投函口だと思ってください。Slackは**「アプリ」を1つ作ってから**投函口をもらいます。画面は英語ですが、押す場所は5か所だけです。
0-1. 練習用のワークスペース(無くても大丈夫)
会社のSlackで試すと管理者の承認が要ることがあります。迷ったら slack.com/get-started から自分だけのワークスペースを無料で作ってください(メールアドレスだけで作れます)。
0-2. アプリを作る
- ブラウザで api.slack.com/apps を開く(Slackにログインしていればそのまま入れます)
- 右上の Create New App を押す
- 出てきた画面で Blank app(空のアプリ)を選び、Continue
- App name に名前を入れる(例:
GAS Notify)。日本語は使えません(英数字・スペース・ハイフンのみ) - Workspace で投稿先のワークスペースを選び、Create
0-3. Incoming Webhooks をONにする
- 左メニュー Features → Incoming Webhooks を開く
- 右上のスイッチ Off → On に切り替える(画面が下に伸びます)
0-4. チャンネルに紐づけて、URLをコピーする
- 画面の一番下 Add New Webhook を押す
- 日本語の許可画面が開きます。**「Webhook 用のチャンネル」**で投稿先チャンネルを選び、許可する
- 元の画面に戻ると Webhook URL の欄に
https://hooks.slack.com/services/…が1行できています。右の Copy を押す
このURLは人に見せないでください。 URLを知っている人は誰でもそのチャンネルに投稿できます。 チャット・SNS・スクリーンショットに出さないよう注意してください。もし漏れたら、同じ画面のゴミ箱アイコンで無効にできます。
ステップ1: ターミナルから1回送ってみる(3分)
GASを書く前に、いちばん小さな道具でWebhookを1回体感します。Webhookは「URLに文章を投げるだけ」——それをターミナルで確かめます。
ターミナルの開き方
| アプリ名 | 開き方 | |
|---|---|---|
| Mac | ターミナル | ⌘+スペース(Spotlight)で「ターミナル」と打って Enter |
| Windows | PowerShell(コマンドプロンプトでも可) | スタートボタンで「powershell」と打って Enter |
送るコマンド((あなたのURL) をステップ0でコピーしたURLに置き換えて、1行で貼って Enter)
Mac:
curl -X POST -H 'Content-type: application/json' --data '{"text":"Hello from terminal!"}' https://hooks.slack.com/services/(あなたのURL)Windows(PowerShell/コマンドプロンプト共通):
curl.exe -X POST -H "Content-type: application/json" -d "{\"text\":\"Hello from terminal!\"}" https://hooks.slack.com/services/(あなたのURL)Slackのチャンネルに Hello from terminal! と届けば成功です。画面に ok と表示されます。
なぜ英語? ターミナルは日本語が文字化けしやすいためです。日本語はこのあとGASで送ります。
curlは「このURLにこれを投げて」と頼む道具で、Mac・Windowsに最初から入っています。
ステップ2: スプレッドシートを作り、エディタを開く(2分)
第3回・第4回は「ドライブから単体のスクリプト」で作りました。 今回は送った記録(ログ)をスプレッドシートに貯めるので、第1回・第2回と同じスプレッドシートからエディタを開くやり方に戻ります。
- ブラウザで sheets.new を開く(新しいスプレッドシートができます)。左上の名前を
Slack通知ログなど分かる名前に - メニュー「拡張機能」→「Apps Script」をクリック
- 新しいタブでエディタが開きます。左上の「無題のプロジェクト」をクリックして、
Slack通知など分かる名前に変えておきます
ステップ3: コードを貼り付けて、URLを入れる(2分)
エディタの中央にある
function myFunction() { }をすべて選択して削除します配布ファイル
code.gsの中身をすべてコピーして貼り付けますコード上のほうにある次の行を探します
const WEBHOOK_URL = 'ここにWebhook URLを貼る';引用符
' 'の中身だけを、ステップ0でコピーしたURLに置き換えます(ステップ1でターミナルに貼ったものと同じURL)Ctrl + S(Macは Cmd + S)で保存します
ステップ4: GASから送る(3分)
- エディタ上部の関数選択(プルダウン)で
sendHelloを選ぶ - ▶ 実行 をクリック
- 初回だけ承認画面が出ます。次の順にクリックしてください
- 「権限を確認」
- 自分のGoogleアカウントを選択
- 「このアプリはGoogleで確認されていません」と出たら → 左下の「詳細」→「(プロジェクト名)に移動(安全ではないページ)」
- 「許可」
- 承認が終わると自動でもう一度実行されます。Slackに「こんにちは!GASからの初投稿です 🎉」と届き、スプレッドシートに「ログ」シートが増えて1行書かれていれば成功です(列: 送信日時/本文/結果)
届かないとき: エディタ左メニューの「実行数」を開き、赤いエラーが出ていないか見ます(→ 最後の「うまく動かないとき」へ)。「ログ」シートの「結果」列にもエラーが残ります
ステップ5: 毎朝「今日の予定」をSlackへ送る(3分)
- 関数選択で
sendTodayScheduleToSlackを選び、▶ 実行- 追加の承認(カレンダーへのアクセス)が出たら、ステップ4と同じ順で許可します
- Slackに「📅 今日の予定」が届き、「ログ」シートに1行増えれば成功
- 関数選択で
createDailyTriggerを選び、▶ 実行(1回だけでOK) - 左メニューの「トリガー(時計のアイコン)」を開いて、
sendTodayScheduleToSlackの時間主導トリガーが1件できていれば完了です
翌朝から、設定した時刻に自動でSlackへ届き、ログも毎日1行ずつ貯まります。
設定を変えたいとき
コード冒頭の「設定」を書き換えて、保存 → createDailyTrigger をもう一度実行します。
| 変えたいこと | 書き換える場所 | 例 |
|---|---|---|
| 送り先のチャンネル | const WEBHOOK_URL = '…'; |
別チャンネル用に Add New Webhook でもう1本作って貼り替える |
| 送る時刻 | const SEND_HOUR = 7; |
8 にすると毎朝8時台 |
| 文章の見た目 | buildMessage の中 |
*太字*・`コード`・:tada: の絵文字コードがSlackでそのまま表示されます |
| ログの列 | logToSheet の中 |
例: 予定の件数を4列目に足す |
時刻は分単位で指定できません。
SEND_HOUR = 7なら「7時〜8時のあいだ」に届きます(GASの仕様)。
止めたいとき
- 関数選択で
deleteDailyTriggerを選んで ▶ 実行 - または左メニューの「トリガー」から、該当行の「⋮」→「トリガーを削除」
- Slack側で受け付けを止めたいときは、Incoming Webhooks の画面で該当URLのゴミ箱アイコン(スイッチをOffにすると全部無効になります)
うまく動かないとき トップ3
| 症状 | 原因 | 直し方 |
|---|---|---|
| 「WEBHOOK_URL にSlackのWebhook URLを貼ってください」と出る | URLを貼り替えていない・引用符を消してしまった | const WEBHOOK_URL = 'https://hooks.slack.com/services/…'; の形になっているか確認する |
実行数に「403」「404」「no_service」/ターミナルに invalid_token |
URLが途中で欠けている/Slack側でWebhookが削除・無効化されている | Incoming Webhooks の画面でもう一度 Copy して貼り直す。スイッチがOffなら On に |
| 「こんにちは」は届くのに「予定」が届かない/予定なしになる | カレンダーの承認が未完了/予定が別のカレンダーにある | sendTodayScheduleToSlack をもう一度実行して承認を最後まで進める。このツールは「デフォルトのカレンダー」だけを見ます |
そのほか: getActiveSpreadsheet でエラー → エディタを「ドライブから単体」で作っている。ステップ2のとおりスプレッドシートの「拡張機能」から開き直してください。
応用アイデア
- 複数のチャンネルに送る: Add New Webhook でURLを増やし、
sendToSlackにURLを引数で渡す形にする - メンションを付ける: 本文に
<!channel>を入れると全員に通知される(多用は嫌われるので注意) - ログを活かす: 「ログ」シートで送信回数を数える/エラーの行だけ色を付ける(条件付き書式)
- AIに要約させてから送る: 予定の一覧をGeminiに渡して「今日の一言アドバイス」を付けてから投稿する
- LINEに送る: 次回・第6回は同じ型でLINE公式アカウント(Messaging API)に送ります。事前準備が重い回なので、告知が出たら早めに
次回: 第6回 GAS入門⑥「LINE連携」(10/28(水)予定) ※日程はSHIFT AI会員サイトのイベントページでご確認ください