Google Apps ScriptでGoogleフォーム回答をSlack即時通知 無料で初動を10分に
Googleフォームに問い合わせが届いても、誰かが管理画面を開くまで気づけない——この構造的な遅れは、Google Apps Script で Slack へ通知を飛ばすだけで解消します。外部の自動化サービスを契約せず、月額¥0のまま、初動を10分に縮める方法をコードごと公開します。
- Googleフォーム送信を起点に、Slack へ回答内容を自動投稿(人の操作ゼロ)
- 外部の自動化サービスは不要。Google 標準機能だけで月¥0、処理件数による課金なし
- 本記事のコードはそのままコピーして動く(フォーム送信トリガー+Slack Webhook)
- 設定は約30分、必要なのは Googleアカウントと Slack のワークスペース管理権限のみ
- 回答は従来どおりスプレッドシートにも蓄積され、通知と記録を同時に実現
編集長の見解:問い合わせ対応の遅さは、担当者の怠慢ではなく「気づく仕組みがない」ことで起きます。ここで重要なのは、月額課金の自動化サービスを増やす前に、Google が無料で配っている実行環境をまず使い切ることです。コードを一度貼るだけで、以後ずっと無料で動き続けます。
🔍 なぜ「無料でできる」ことを知っておくべきか
問い合わせフォームの通知自動化は、専用の自動化サービスを使えばクリックだけで組めます。ただし多くは処理回数に応じた課金です。問い合わせが増えるほど、通知の費用も増えていきます。
Google Apps Script(以下 GAS)は、Googleアカウントに無料で付いてくるプログラム実行環境です。フォームやスプレッドシートに直接ひも付き、追加契約なしで動きます。
- 費用: 個人向け Googleアカウントでも無料で利用可能
- 件数: 処理回数による従量課金がなく、問い合わせが増えても金額は変わらない
- 停止リスク: 外部サービスの値上げや仕様変更に振り回されない
代わりに支払う対価は「コードを貼る」という一手間だけです。次のセクションで、その仕組み全体を図で確認します。
🗺 全体フロー — 3ステップで完結
構造は驚くほど単純です。フォームが送信された瞬間に GAS が起動し、Slack の受け口(Incoming Webhook)へメッセージを送ります。
送信から通知まで数秒、人の操作はゼロ
登場する部品は 2 つだけです。役割を整理します。
| 部品 | 役割 | 公式ドキュメント |
|---|---|---|
| フォーム送信トリガー | フォーム送信を検知して関数を実行 | インストール型トリガー |
| Slack Incoming Webhook | 受け取った内容をチャンネルに投稿 | Incoming Webhooks |
この 2 つをつなぐのが、次のセクションで示すコードです。コピーして貼り付けるだけで済みます。
💰 必要なものと費用の目安
このレシピは、追加の支出が一切発生しない構成です。用意するものを表で確認してください。
| 必要なもの | 役割 | 費用の目安 |
|---|---|---|
| Googleアカウント(無料 or Workspace) | フォーム・スプレッドシート・GAS の実行 | 無料(Workspace は既存契約で可) |
| Google Apps Script | 通知処理の実行環境 | 無料 |
| Slack ワークスペース | 担当者への通知先 | 無料プランで可 |
Slack の無料プランでも Incoming Webhook は利用できます。料金体系は変更されることがあるため、最新の条件はSlack 公式の料金ページで確認してください。
💡 編集部の判断材料:すでに Make.com などの自動化サービスを契約中なら、無理に乗り換える必要はありません。GAS が向くのは「これから始める」「通知だけのために課金したくない」「問い合わせ件数が多い」ケースです。画面操作だけで済ませたい方はMake.comでGoogleフォーム回答をSlackに自動通知するレシピを参照してください。
判断がついたら、実際の構築に進みます。
🛠 設定手順 — 約30分で完成
作業は「Slack 側で受け口を作る」「GAS 側でコードを貼る」の 2 段階です。プログラミングの知識は不要で、コードは本記事のものをそのまま貼り付ければ動きます。
貼り付けるコード(そのまま動きます)
以下を Apps Script エディタの コード.gs に貼り付けてください。フォーム送信時に呼ばれる onFormSubmit が本体です。
/**
* Googleフォーム送信 → Slack 通知
* トリガー: フォーム送信時(インストール型)に onFormSubmit を実行
*/
function onFormSubmit(e) {
const webhookUrl = PropertiesService
.getScriptProperties()
.getProperty('SLACK_WEBHOOK_URL');
if (!webhookUrl) {
throw new Error('SLACK_WEBHOOK_URL がスクリプトプロパティに未設定です');
}
// 回答を「質問: 回答」の行に整形
const lines = e.response.getItemResponses().map(function (item) {
const answer = item.getResponse();
const text = Array.isArray(answer) ? answer.join(', ') : String(answer);
return '*' + item.getItem().getTitle() + '*: ' + (text || '(未入力)');
});
const timestamp = Utilities.formatDate(
new Date(), 'Asia/Tokyo', 'yyyy/MM/dd HH:mm'
);
const message = [
':new: 新しい問い合わせが届きました',
'',
lines.join('\n'),
'',
'受信日時: ' + timestamp
].join('\n');
postToSlack_(webhookUrl, message);
}
/**
* Slack Incoming Webhook へ送信(失敗時はログに残す)
*/
function postToSlack_(webhookUrl, text) {
const options = {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify({ text: text }),
muteHttpExceptions: true
};
const res = UrlFetchApp.fetch(webhookUrl, options);
const code = res.getResponseCode();
if (code !== 200) {
console.error('Slack 送信失敗 code=' + code + ' body=' + res.getContentText());
throw new Error('Slack への送信に失敗しました (HTTP ' + code + ')');
}
}
Webhook URL の登録(コードに直書きしない)
STEP 2 で控えた URL は、コードに直接書かず「スクリプトプロパティ」に保存します。この URL を知っている人は誰でもチャンネルに投稿できてしまうため、コードへの直書きは避けるのが安全です。
- Apps Script エディタ左の**歯車アイコン(プロジェクトの設定)**を開く
- 最下部の「スクリプト プロパティ」で「スクリプト プロパティを追加」をクリック
- プロパティ名に
SLACK_WEBHOOK_URL、値に STEP 2 の URL を入力して保存
💡 編集部メモ:通知の冒頭に :new: のような絵文字コードを入れておくと、Slack のタイムラインで問い合わせが一目で目立ちます。緊急度の高い用件を見分けやすくなり、返信の初速が上がります。文面を変えたいときは、コード中の message の配列を書き換えるだけで済みます。
保存とトリガー設定が終わったら、必ず自分でテスト送信してください。次のセクションで、つまずきやすい点を整理します。
⚠️ 失敗パターンと運用上の注意
GAS は無料で強力ですが、初回だけ引っかかりやすい関門があります。編集部が特に注意すべきと考える 2 点を挙げます。
⚠️ 失敗パターン1:トリガーを作らず「実行」だけして動かない。エディタの実行ボタンで onFormSubmit を直接動かすと、引数が空のためエラーになります。この関数はフォーム送信トリガー経由でのみ正しく動きます。必ず STEP 5 のトリガー設定を行い、確認はフォームからの実送信で行ってください。
⚠️ 失敗パターン2:個人情報の通知範囲が広すぎる。問い合わせには氏名・電話番号・メールが含まれます。通知先が全社員参加のチャンネルだと、必要のない人にも情報が見えます。通知は担当者だけが入れる非公開チャンネルに送り、Webhook URL の共有範囲も最小限にしてください。
初回設定時には、Google から「このアプリは確認されていません」という趣旨の警告が出ます。これは自分で書いたスクリプトに、自分のデータへのアクセスを許可するための画面です。詳細を開いてプロジェクト名が自分のものであることを確認し、承認すれば先へ進めます。
| トラブル | 起こりやすい原因 | 編集部の対策 |
|---|---|---|
| 通知が届かない | トリガー未作成、または種類が誤り | イベントの種類が「フォーム送信時」か確認 |
| エラーメールが届く | Webhook URL 未設定・失効 | スクリプトプロパティの値を再登録 |
| 通知が空欄だらけ | 必須でない質問が未入力 | コードの (未入力) 表示で判別できる |
| 情報が広く見える | 公開チャンネルに通知 | 担当者のみの非公開チャンネルへ変更 |
なお GAS には 1 日あたりの実行時間や外部通信回数の上限がありますが、通知1件あたりの処理は数秒で終わるため、通常の問い合わせ量では上限に届きません。詳細はApps Script の割り当てと制限を確認してください。次のセクションで、この30分の投資が経営上どう返ってくるかを整理します。
🚀 経営者はこの30分をどう回収するか
編集部の想定シナリオを1つ挙げます。従業員5名の設計事務所が、見積依頼をGoogleフォームで受けているケースです(実在の企業の事例ではありません)。
- 導入前: 担当者が朝と夕方にフォームを確認。深夜の依頼は翌日夕方まで放置され、初動が最長20時間
- 導入後: 送信の数秒後に Slack へ通知。営業時間内であれば10分以内に一次返信
- 効果: 相見積もりで「返信が一番早かった」という理由で選ばれる確率が上がる
かかった費用は¥0、かかった時間は初回の30分だけです。基本形が動いたら、次の応用も同じコードの延長で組めます。
- 緊急度の振り分け: 用件に特定のキーワードが含まれる回答だけ、別チャンネルへ通知
- 担当者メンション: 選択された部署に応じて Slack のメンションを付け替える
- AI で要約: 長文の問い合わせを要約してから通知する
当サイトでは、フォーム・問い合わせ系の自動化を複数紹介しています。あわせて読むと設計の引き出しが増えます。
- Make.comでGoogleフォーム回答をSlackに自動通知するレシピ
- Make.comでGoogleフォーム回答をChatGPTで自動分類・振り分け
- Make.comで問い合わせフォームのリード管理を自動化
- Make.comでkintoneの更新をSlackに自動通知するレシピ
編集部のまとめ:このレシピの本質は「気づく仕組みを、人の記憶からシステムへ移す」ことです。GAS を選べば、その仕組みを月¥0で、件数が増えても値上がりしない形で持てます。まずは通知が届く体験を作り、そのうえで振り分けや要約といった応用へ進むのが堅実な順序です。
出典・参考情報
- Google Apps Script 公式サイト
- Apps Script インストール型トリガー(フォーム送信時)
- Apps Script UrlFetchApp リファレンス
- Apps Script の割り当てと制限
- Slack Incoming Webhooks 公式ドキュメント
- Slack アプリ管理画面
- Slack 料金プラン(日本語)
- Googleフォーム 公式サイト
Mira / AI経営ラボ 編集長