GASサンプル:フォーム回答 → Slack/メール通知 + 集計シート自動更新
「スプレッドシート/GAS/Excel自動化(¥5,000〜)」の納品サンプルです。
Googleフォームの回答が届くたびに、Slack とメールに通知し、集計シートを自動で更新します。
できること
| 機能 | 内容 |
|---|
| Slack通知 | 回答内容を Incoming Webhook で指定チャンネルに投稿 |
| メール通知 | 回答内容を指定アドレス(複数可)に送信。件名に1問目の回答が入る |
| 集計シート | 累計・今日・直近7日・直近30日の件数、日別件数(30日)、選択式設問ごとの内訳を自動生成 |
| 安全設計 | URLやアドレスはコードに書かずスクリプトプロパティで管理。通知・集計のどれかが失敗しても他は実行され、失敗内容はログに残る |
導入手順(所要10分)
1. フォームとスプレッドシートをつなぐ
- Googleフォームを開き、「回答」タブ → スプレッドシートのアイコンをクリック
- 「新しいスプレッドシートを作成」を選ぶ(既存のものでも可)
- 作成されたスプレッドシートを開く。「フォームの回答 1」というシートがあることを確認
2. スクリプトを貼り付ける
- スプレッドシートのメニュー「拡張機能」→「Apps Script」
- 開いたエディタの
コード.gs の中身をすべて削除し、同梱の Code.gs の内容を貼り付ける - 上部の保存アイコン(またはCtrl+S)で保存
3. 通知先を設定する(スクリプトプロパティ)
- エディタ左の歯車アイコン「プロジェクトの設定」をクリック
- 一番下の「スクリプト プロパティ」→「スクリプト プロパティを追加」
- 次のプロパティを追加(不要なものは追加しなくてよい)
| プロパティ名 | 値の例 | 説明 |
|---|
SLACK_WEBHOOK_URL | https://hooks.slack.com/services/... | Slack の Incoming Webhook URL。取得方法は下記 |
NOTIFY_EMAIL | you@example.com, team@example.com | 通知先メール。カンマ区切りで複数可 |
SUMMARY_SHEET | 集計 | 集計シート名(省略可) |
SUBJECT_PREFIX | [お問い合わせ] | メール件名の先頭(省略可) |
Slack Webhook URL の取得: Slack の「アプリ」→「Incoming Webhook」を追加 → 投稿先チャンネルを選択 → 表示された URL をコピー。この URL は投稿権限そのものなので、他人に共有しないでください。
4. トリガーを作成する
- エディタ上部の関数選択で
setupTrigger を選び「実行」 - 初回は権限の承認画面が出る → 自分のアカウントを選び「詳細」→「(プロジェクト名)に移動」→「許可」
- 実行ログに「トリガーを作成しました」と出れば完了
5. 動作確認
- フォームから1件テスト送信する
- または、回答が1件以上ある状態で関数
testWithLastResponse を実行(最新の回答で通知と集計を試す) - Slack/メールに通知が届き、「集計」シートが作られていれば成功
集計シートの見方
項目 件数
累計回答数 128
今日 3
直近7日 21
直近30日 74
最終更新 2026-09-08 10:12:34
日別回答数(直近30日) 件数
2026-08-10 2
...
内訳: お問い合わせ種別 件数
資料請求 52
見積依頼 41
その他 35
- 「内訳」は、回答の種類が12種類以下の設問(ラジオボタン・プルダウン・チェックボックス)だけ自動で作られます。自由記述は対象外です
- 集計は毎回作り直すので、回答を削除・修正しても数字が正しく保たれます
カスタマイズのヒント
| やりたいこと | 変更箇所 |
|---|
| 内訳を作る設問の上限を変える | MAX_DISTINCT_FOR_BREAKDOWN の数値 |
| 日別集計の期間を変える | DAILY_WINDOW_DAYS の数値 |
| 通知文の形式を変える | buildMessageText 関数 |
| 特定の回答だけ通知する(例:「至急」を含むとき) | onFormSubmitHandler の先頭で record.fields を見て return する |
| Chatwork/LINE に通知する | notifySlack を参考に、各サービスの API へ UrlFetchApp.fetch する関数を追加 |
トラブルシューティング
| 症状 | 原因と対処 |
|---|
| 通知が届かない | 「実行数」(エディタ左の時計アイコン)でエラーを確認。SLACK_WEBHOOK_URL / NOTIFY_EMAIL の綴りとプロパティ名を確認 |
| 「回答シートが見つかりません」 | フォームとスプレッドシートがリンクされているか確認(手順1) |
| 権限エラー | setupTrigger を再実行し、承認画面で「許可」を選ぶ |
| メールが1日の上限に達した | 無料 Gmail は1日100通まで。Workspace は1,500通。上限に近い場合は Slack 通知のみにする |
| 集計シートが古い | 関数 rebuildSummaryOnly を実行すると通知なしで集計だけ作り直せます |
注意事項
- 回答に個人情報が含まれる場合、Slack チャンネルの公開範囲にご注意ください
- Webhook URL やメールアドレスをコードに直接書かないでください(スプレッドシートを共有した相手に見えてしまいます)
- 本サンプルは Google Apps Script の V8 ランタイムで動作します(2020年以降の標準設定)
納品時に含まれるもの(実際のご依頼の場合)
- お客様のフォーム項目に合わせて調整した
Code.gs - 上記と同様の導入手順書(スクリーンショット付き)
- 導入後7日間のメールサポート(設定のつまずき対応)