Googleフォームに申込みが届いたら、自動で確認メールを送り、スプレッドシートに整理し、Slackに通知まで届く仕組みをGASで構築する手順を解説します。
申込フォームへの対応は、多くの企業で手動作業が残っている業務の一つです。「フォームに回答が来たらメールを確認して、スプレッドシートに転記して、担当者にSlackで連絡する」という流れを毎回手動でやっていませんか?
Google Apps Script(GAS)を使えば、この一連の流れをすべて自動化できます。Googleフォームのトリガー機能とGASを組み合わせることで、回答が届いた瞬間に確認メール送信・データ整理・通知まで完了する仕組みが、無料で作れます。
この記事でできること
- Googleフォームへの回答を自動でスプレッドシートに整理する
- 申込者に自動確認メールを送信する
- 担当者のSlackチャンネルに申込通知を自動送信する
- フォーム回答をトリガーにGASを自動実行する
事前準備
以下のものを用意してください:
- Googleアカウント(Gmailが使えるもの)
- Googleフォーム(申込フォームを作成済みであること)
- 回答を記録するGoogleスプレッドシート(フォームにリンク済みが望ましい)
- Slack Incoming WebhookのURL(Slack通知を使う場合)
SlackのWebhook URLは、Slack APIページでアプリを作成し「Incoming Webhooks」を有効化することで取得できます。取得したURLは後で使います。
STEP1: GASエディタを開く
Googleフォームを開き、上部メニューの「その他」(点3つのアイコン)から「スクリプトエディタ」を選択します。これでフォームに紐づいたGASプロジェクトが開きます。
または、フォームに回答を集めているスプレッドシートを開き、メニューの「拡張機能」→「Apps Script」からエディタを開いても構いません。どちらの方法でも動作します。
エディタが開いたら、デフォルトで書かれているコードを削除して、次のSTEPで作成するコードを貼り付けます。
STEP2: フォーム回答処理のメイン関数を書く
以下のコードをエディタに貼り付けます。
// 設定値(自分の環境に合わせて変更)
const SLACK_WEBHOOK_URL = 'https://hooks.slack.com/services/XXXX/YYYY/ZZZZ';
const NOTIFY_EMAIL = 'admin@example.com'; // 管理者通知先
function onFormSubmit(e) {
const responses = e.response.getItemResponses();
// 回答データを取得
const data = {};
responses.forEach(function(item) {
data[item.getItem().getTitle()] = item.getResponse();
});
const applicantEmail = data['メールアドレス'] || '';
const applicantName = data['お名前'] || '申込者';
// 1. 申込者に確認メールを送信
sendConfirmEmail(applicantEmail, applicantName, data);
// 2. 管理者に通知メールを送信
sendAdminEmail(applicantName, data);
// 3. Slackに通知
sendSlackNotification(applicantName, applicantEmail, data);
Logger.log('処理完了: ' + applicantName);
}
「メールアドレス」「お名前」の部分は、実際のフォームの質問文に合わせて変更してください。フォームの質問タイトルと完全に一致している必要があります。
STEP3: 確認メール・通知メール送信関数を書く
メイン関数の下に、以下の関数を追記します。
function sendConfirmEmail(toEmail, name, data) {
if (!toEmail) return;
const subject = '【受付完了】お申込みありがとうございます';
const body = name + ' 様
この度はお申込みいただきありがとうございます。
以下の内容で受け付けました。
---
' +
Object.entries(data).map(function(e) { return e[0] + ': ' + e[1]; }).join('
') +
'
---
担当者より3営業日以内にご連絡いたします。
引き続きよろしくお願いいたします。';
GmailApp.sendEmail(toEmail, subject, body);
}
function sendAdminEmail(name, data) {
const subject = '【新規申込】' + name + ' 様';
const body = '新しい申込がありました。
' +
Object.entries(data).map(function(e) { return e[0] + ': ' + e[1]; }).join('
');
GmailApp.sendEmail(NOTIFY_EMAIL, subject, body);
}
STEP4: Slack通知関数を書く
続けて、Slack通知用の関数も追記します。
function sendSlackNotification(name, email, data) {
if (!SLACK_WEBHOOK_URL || SLACK_WEBHOOK_URL.includes('XXXX')) return;
const details = Object.entries(data)
.map(function(e) { return '- ' + e[0] + ': ' + e[1]; })
.join('
');
const message = {
text: '新規申込がありました',
attachments: [{
color: '#36a64f',
title: '申込者: ' + name + ' (' + email + ')',
text: details
}]
};
const options = {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify(message),
muteHttpExceptions: true
};
UrlFetchApp.fetch(SLACK_WEBHOOK_URL, options);
}
STEP5: トリガーを設定して自動実行にする
コードを保存したら、GASのトリガーを設定します。
- エディタ左側のメニューから「トリガー」(時計アイコン)をクリック
- 右下の「トリガーを追加」をクリック
- 以下の設定を選択:
- 実行する関数: onFormSubmit
- イベントのソース: フォームから
- イベントの種類: フォーム送信時
- 「保存」をクリックし、権限の確認画面でGoogleアカウントを選択して許可する
これでフォームに回答が届くたびに onFormSubmit 関数が自動実行されます。トリガー設定後、テスト用の回答を送信して動作を確認しましょう。
うまくいかないときのチェックリスト
- メールが届かない: フォームの質問タイトルとコード内の文字列が完全に一致しているか確認(全角スペースも含む)
- 権限エラーが出る: GASのトリガー設定時に出る権限確認でGmailとフォームへのアクセスを許可したか確認
- Slack通知が来ない: SLACK_WEBHOOK_URLが正しく設定されているか、Slack側でWebhookが有効になっているか確認
- 1日100件以上の申込がある: GASのGmail送信には1日あたり100件(無料アカウント)の制限があります。Google Workspaceなら1,500件まで対応
- トリガーが実行されない: スクリプトエディタではなくフォームまたはスプレッドシートのスクリプトとしてトリガーを設定しているか確認
応用・発展
基本の自動処理が動いたら、以下の拡張も検討できます:
- スプレッドシートへの自動転記と色付け: 申込内容をスプレッドシートの特定シートに転記し、新規申込行を黄色にハイライトする
- Googleカレンダーへの自動登録: セミナー申込などの場合、申込者の名前と日程をカレンダーに自動登録できる
- 回答内容によって送信先を切り替える: 「問い合わせ種別」の回答に応じて、担当部署ごとに異なるメールアドレスへ通知を分岐させる
- Notionデータベースへの自動追加: Notion APIと組み合わせて、申込情報をNotionの顧客管理データベースに自動追加する
まとめ
- GASのフォーム送信トリガーを使えば、申込フォームの対応を完全自動化できる
- 申込者への確認メール・管理者通知・Slack通知が1つのスクリプトで同時に実行される
- フォームの質問タイトルとコードの文字列を一致させることが動作の鍵
- GASは無料で使えるため、初期コストゼロで業務自動化を始められる
- 一度設定すれば、以降は完全に自動で動き続け、手動対応の工数をゼロにできる









