業務自動化

Google Apps ScriptでGoogleフォーム回答をSlack即時通知 無料で初動を10分に

士業・制作会社・EC・サロン・教室・不動産など、問い合わせフォームを運用する中小企業/個人事業主 の業務自動化レシピ
業種士業・制作会社・EC・サロン・教室・不動産など、問い合わせフォームを運用する中小企業/個人事業主
ツールGoogle Apps Script
難易度★★☆ 中
設定時間約 30 分

Googleフォームに問い合わせが届いても、誰かが管理画面を開くまで気づけない——この構造的な遅れは、Google Apps Script で Slack へ通知を飛ばすだけで解消します。外部の自動化サービスを契約せず、月額¥0のまま、初動を10分に縮める方法をコードごと公開します。

読了時間 約9分 / 設定所要時間 約30分 / 月額固定費 ¥0

編集長の見解:問い合わせ対応の遅さは、担当者の怠慢ではなく「気づく仕組みがない」ことで起きます。ここで重要なのは、月額課金の自動化サービスを増やす前に、Google が無料で配っている実行環境をまず使い切ることです。コードを一度貼るだけで、以後ずっと無料で動き続けます。

🔍 なぜ「無料でできる」ことを知っておくべきか

問い合わせフォームの通知自動化は、専用の自動化サービスを使えばクリックだけで組めます。ただし多くは処理回数に応じた課金です。問い合わせが増えるほど、通知の費用も増えていきます。

Google Apps Script(以下 GAS)は、Googleアカウントに無料で付いてくるプログラム実行環境です。フォームやスプレッドシートに直接ひも付き、追加契約なしで動きます。

代わりに支払う対価は「コードを貼る」という一手間だけです。次のセクションで、その仕組み全体を図で確認します。

🗺 全体フロー — 3ステップで完結

構造は驚くほど単純です。フォームが送信された瞬間に GAS が起動し、Slack の受け口(Incoming Webhook)へメッセージを送ります。

フォーム回答→Slack通知の全体像
📝
01
フォーム送信
顧客が問い合わせを送信
⚙️
02
GAS が起動
回答内容を整形
💬
03
Slack へ通知
指定チャンネルに自動投稿

送信から通知まで数秒、人の操作はゼロ

登場する部品は 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 段階です。プログラミングの知識は不要で、コードは本記事のものをそのまま貼り付ければ動きます。

GAS × Slack 通知の構築手順
STEP 1
Slack アプリを作成
Slack API の管理画面で「Create New App」→「From scratch」を選び、アプリ名と対象ワークスペースを指定します。
STEP 2
Incoming Webhook を有効化
左メニューの「Incoming Webhooks」をオンにし、「Add New Webhook to Workspace」で通知先チャンネルを選びます。発行された URL を控えます。
STEP 3
フォームからエディタを開く
Googleフォームの編集画面右上のメニューから「Apps Script」を選び、スクリプトエディタを開きます。
STEP 4
コードを貼り付けて保存
下記のコードを丸ごと貼り付け、Webhook URL をスクリプトプロパティに登録します(手順は次項)。
STEP 5
フォーム送信トリガーを設定
エディタ左の時計アイコンから「トリガーを追加」、イベントの種類に「フォーム送信時」を選んで保存します。
STEP 6
テスト送信で確認
実際にフォームから2〜3件テスト送信し、Slack に届くか、文字化けや項目落ちがないかを確認します。

貼り付けるコード(そのまま動きます)

以下を 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 を知っている人は誰でもチャンネルに投稿できてしまうため、コードへの直書きは避けるのが安全です。

  1. Apps Script エディタ左の**歯車アイコン(プロジェクトの設定)**を開く
  2. 最下部の「スクリプト プロパティ」で「スクリプト プロパティを追加」をクリック
  3. プロパティ名に 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フォームで受けているケースです(実在の企業の事例ではありません)。

かかった費用は¥0、かかった時間は初回の30分だけです。基本形が動いたら、次の応用も同じコードの延長で組めます。

当サイトでは、フォーム・問い合わせ系の自動化を複数紹介しています。あわせて読むと設計の引き出しが増えます。

編集部のまとめ:このレシピの本質は「気づく仕組みを、人の記憶からシステムへ移す」ことです。GAS を選べば、その仕組みを月¥0で、件数が増えても値上がりしない形で持てます。まずは通知が届く体験を作り、そのうえで振り分けや要約といった応用へ進むのが堅実な順序です。

出典・参考情報


Mira / AI経営ラボ 編集長