セットアップ手順書 — Discordに自動で通知を投稿する(GAS入門④)
SHIFT AI WEBINAR「Discordに自動で通知が届く。Webhookを覚える60分」(2026-09-21)配布資料
作るもの: GASからDiscordのチャンネルへ自動でメッセージを投稿するツール(毎朝「今日の予定」を届ける) 所要時間: 約15分/必要なもの: Googleアカウント・Discordアカウント(どちらも無料・インストール不要)
ウェビナー当日に作れなくて大丈夫です。 当日は講師が作るところを見て流れをつかんでいただき、 ご自身の実装はこの手順書を見ながら後日ゆっくりで問題ありません。
ステップ0: DiscordのWebhook URLを取る(5分)
Webhook(ウェブフック)は、「ここに文章を投げれば、このチャンネルに投稿されます」という専用のURLです。 合言葉つきの投函口だと思ってください。
- Discord にログインする(ブラウザ版でOK)
- 練習用に自分だけのサーバーを作る: 左の「+」→「オリジナルの作成」→「自分と友達のため」→ 名前を付けて作成
- すでに投稿してよいサーバーがあれば、それでも構いません(管理権限が必要です)
- 通知を届けたいチャンネル名の横の「⚙(歯車)」→ 左メニュー「連携サービス」→「ウェブフック」
- 「新しいウェブフック」を押す。名前(例:
予定お知らせ)と投稿先チャンネルを確認する - 「ウェブフックURLをコピー」を押す
https://discord.com/api/webhooks/……で始まる長いURLがコピーされます
このURLは人に見せないでください。 URLを知っている人は誰でもそのチャンネルに投稿できます。 チャット・SNS・スクリーンショットに出さないよう注意してください。もし漏れたら、同じ画面の「ウェブフックを削除」で無効にできます。
ステップ1: Apps Scriptのプロジェクトを作る(2分)
第1回・第2回は「スプレッドシート → 拡張機能 → Apps Script」で開きました。 今回はスプレッドシートを使わないので、ドライブから単体のスクリプトとして作ります(第3回と同じ)。
- Googleドライブ を開く
- 左上の「+ 新規」→「その他」→「Google Apps Script」をクリック
- 「その他」の中に見つからない場合は「その他」→「アプリを追加」から
Google Apps Scriptを追加してください
- 「その他」の中に見つからない場合は「その他」→「アプリを追加」から
- 新しいタブでエディタが開きます。左上の「無題のプロジェクト」をクリックして、
Discord通知など分かる名前に変えておきます
ステップ2: コードを貼り付けて、URLを入れる(2分)
エディタの中央にある
function myFunction() { }をすべて選択して削除します配布ファイル
code.gsの中身をすべてコピーして貼り付けますコード上のほうにある次の行を探します
const WEBHOOK_URL = 'ここにウェブフックURLを貼る';引用符
' 'の中身だけを、ステップ0でコピーしたURLに置き換えますCtrl + S(Macは Cmd + S)で保存します
ステップ3: 手で1回送る(3分)
まずトリガーなしで、Discordに届くかを確かめます。
- エディタ上部の関数選択(プルダウン)で
sendHelloを選ぶ - ▶ 実行 をクリック
- 初回だけ承認画面が出ます。次の順にクリックしてください
- 「権限を確認」
- 自分のGoogleアカウントを選択
- 「このアプリはGoogleで確認されていません」と出たら → 左下の「詳細」→「(プロジェクト名)に移動(安全ではないページ)」
- 「許可」
- 承認が終わると自動でもう一度実行されます。Discordのチャンネルに「こんにちは!GASからの初投稿です」と届けば成功です
届かないとき: エディタ左メニューの「実行数」を開き、赤いエラーが出ていないか見ます(→ 最後の「うまく動かないとき」へ)
ステップ4: 毎朝「今日の予定」をDiscordへ送る(3分)
- 関数選択で
sendTodayScheduleToDiscordを選び、▶ 実行- 追加の承認(カレンダーへのアクセス)が出たら、ステップ3と同じ順で許可します
- Discordに「📅 今日の予定」が届けば成功
- 関数選択で
createDailyTriggerを選び、▶ 実行(1回だけでOK) - 左メニューの「トリガー(時計のアイコン)」を開いて、
sendTodayScheduleToDiscordの時間主導トリガーが1件できていれば完了です
翌朝から、設定した時刻に自動でDiscordへ届きます。
設定を変えたいとき
コード冒頭の「設定」を書き換えて、保存 → createDailyTrigger をもう一度実行します。
| 変えたいこと | 書き換える場所 | 例 |
|---|---|---|
| 送り先のチャンネル | const WEBHOOK_URL = '…'; |
別チャンネルのWebhook URLに貼り替える |
| 送る時刻 | const SEND_HOUR = 7; |
8 にすると毎朝8時台 |
| 文章の見た目 | buildMessage の中 |
**太字** や絵文字はDiscordでそのまま表示されます |
時刻は分単位で指定できません。
SEND_HOUR = 7なら「7時〜8時のあいだ」に届きます(GASの仕様)。 Discordの1投稿は2000文字まで。 超える分はコードが自動で切り落とします。
止めたいとき
- 関数選択で
deleteDailyTriggerを選んで ▶ 実行 - または左メニューの「トリガー」から、該当行の「⋮」→「トリガーを削除」
- Discord側で受け付けを止めたいときは、ウェブフックの設定画面で「ウェブフックを削除」
うまく動かないとき トップ3
| 症状 | 原因 | 直し方 |
|---|---|---|
| 「WEBHOOK_URL にDiscordのウェブフックURLを貼ってください」と出る | URLを貼り替えていない・引用符を消してしまった | const WEBHOOK_URL = 'https://discord.com/api/webhooks/…'; の形になっているか確認する |
| 実行数に「404」や「401」のエラー | URLが途中で欠けている/Discord側でウェブフックが削除されている | もう一度「ウェブフックURLをコピー」して貼り直す |
| 「こんにちは」は届くのに「予定」が届かない/予定なしになる | カレンダーの承認が未完了/予定が別のカレンダーにある | sendTodayScheduleToDiscord をもう一度実行して承認を最後まで進める。このツールは「デフォルトのカレンダー」だけを見ます |
応用アイデア
- 複数のチャンネルに送る:
sendToDiscordを、URLを引数で受け取る形にすれば送り分けられる - メンションを付ける: 本文に
@everyoneを入れると全員に通知される(多用は嫌われるので注意) - AIに要約させてから送る: 予定の一覧をGeminiに渡して「今日の一言アドバイス」を付けてから投稿する(次回以降で扱う予定)
- SlackやLINEに送る: 「URLにJSONをPOSTする」は同じ型。第5回(Slack)・第6回(LINE)で送り先だけ変えます
次回: 第5回 GAS入門⑤「Slack連携」(10/14(水)予定) ※日程はSHIFT AI会員サイトのイベントページでご確認ください