はじめに
Googleフォームで問い合わせや申込みを受け付けているとき、こんな不満はないでしょうか。
- スプレッドシートを毎回開いて確認しないといけない
- 回答に気づくのが遅れて対応が後手になる
- 複数人で共有したいのに全員がスプレッドシートを開くのは非効率
Google Apps Script(GAS)を使えば、フォームに回答が届いた瞬間にメールとSlackへ自動通知できます。 コードは合計30行程度で、設定時間は10〜15分です。
完成イメージ
フォームに回答が送信されると、以下が自動で実行されます。
- 指定したメールアドレスに回答内容が届く
- SlackのチャンネルにBotが回答内容を投稿する
どちらか一方だけでもOKです。
前提条件
- Googleアカウントがあること
- 通知したいGoogleフォームがすでに存在すること
- Slack通知する場合:Slackワークスペースの管理者権限(またはWebhook作成権限)があること
手順
Step 1:フォームのApps Scriptを開く
- 通知したいGoogleフォームを開く
- 右上のメニュー(点3つ)→「スクリプトエディタ」をクリック
- 新しいタブでApps Scriptが開く
注意: フォームに紐づいたスプレッドシートのスクリプトではなく、フォーム本体のスクリプトから作成してください。
Step 2:コードを貼り付ける
デフォルトで書かれている function myFunction() {} を削除して、以下のコードをそのまま貼り付けます。
// ─── 設定 ───────────────────────────────────────
const CONFIG = {
email: {
enabled: true,
to: 'info@datarou.com', // ★ 通知先メールアドレス
subject: '【新着】フォームに回答がありました',
},
slack: {
enabled: true,
webhookUrl: 'https://hooks.slack.com/services/xxx/yyy/zzz', // ★ Webhook URL
username: 'フォーム通知Bot',
icon: ':memo:',
},
};
// ────────────────────────────────────────────────
/**
* フォーム送信時に呼ばれるメイン関数
* ※ この関数名でトリガーを設定します
*/
function onFormSubmit(e) {
const message = buildMessage(e);
if (CONFIG.email.enabled) sendEmail(message);
if (CONFIG.slack.enabled) sendSlack(message);
}
/** 回答内容を文字列に整形する */
function buildMessage(e) {
const timestamp = new Date().toLocaleString('ja-JP', { timeZone: 'Asia/Tokyo' });
let msg = `📋 新しいフォーム回答\n送信日時: ${timestamp}\n${'─'.repeat(30)}\n\n`;
const responses = e.namedValues;
for (const [question, answers] of Object.entries(responses)) {
msg += `■ ${question}\n${answers.join(', ')}\n\n`;
}
return msg;
}
/** メール送信 */
function sendEmail(body) {
MailApp.sendEmail({
to: CONFIG.email.to,
subject: CONFIG.email.subject,
body: body,
});
}
/** Slack通知 */
function sendSlack(body) {
UrlFetchApp.fetch(CONFIG.slack.webhookUrl, {
method: 'POST',
contentType: 'application/json',
payload: JSON.stringify({
text: body,
username: CONFIG.slack.username,
icon_emoji: CONFIG.slack.icon,
}),
});
}
Step 3:設定を書き換える
コード上部の CONFIG の中を自分の環境に合わせて変更します。
| 項目 | 内容 |
|---|---|
email.to |
通知を受け取るメールアドレス |
slack.webhookUrl |
SlackのIncoming Webhook URL(次のStepで取得) |
email.enabled |
メール通知が不要なら false に |
slack.enabled |
Slack通知が不要なら false に |
Step 4:Slack Webhook URLを取得する
- Slack API → 「Create New App」→「From scratch」
- アプリ名(例:
フォーム通知)を入力してワークスペースを選択 - 左メニュー「Incoming Webhooks」→ 有効にする
- 「Add New Webhook to Workspace」→ 通知したいチャンネルを選ぶ
- 生成された
https://hooks.slack.com/services/...をコピーしてwebhookUrlに貼る
Step 5:トリガーを設定する
コードを保存しただけでは動きません。フォームが送信されたときに自動実行するトリガーを設定します。
- Apps Scriptの左メニュー「トリガー(時計アイコン)」をクリック
- 右下「+トリガーを追加」
- 以下のように設定する
| 項目 | 設定値 |
|---|---|
| 実行する関数 | onFormSubmit |
| イベントのソース | フォームから |
| イベントの種類 | フォーム送信時 |
- 「保存」→ Googleアカウントの権限許可を求められたら許可する
Step 6:動作確認
フォームのプレビュー画面でテスト送信してみてください。数秒以内にメールとSlackに通知が届けばOKです。
コードのポイント解説
e.namedValues で質問と回答を取得
const responses = e.namedValues;
// 例: { "お名前": ["山田太郎"], "メール": ["example@mail.com"] }
e.namedValues はフォームの質問文をキー、回答を配列として返します。質問が増えてもコードの変更なしで自動的に対応します。
メール送信は MailApp で1行
MailApp.sendEmail({ to: '...', subject: '...', body: '...' });
GASには MailApp というメール送信サービスが組み込まれており、SMTPの設定不要で使えます。1日の送信上限は100通(無料)です。
カスタマイズのポイント
HTML形式のメールにしたい
MailApp.sendEmail に htmlBody プロパティを追加するとHTMLメールを送れます。
特定の回答内容があったときだけ通知したい
buildMessage の前に条件分岐を入れることで実現できます。
// 例:「お問い合わせ種別」が「緊急」のときだけSlack通知
const category = e.namedValues['お問い合わせ種別']?.[0];
if (CONFIG.slack.enabled && category === '緊急') sendSlack(message);
複数の宛先にメールを送りたい
to をカンマ区切りにするか、cc / bcc プロパティを追加します。
MailApp.sendEmail({ to: 'a@example.com', cc: 'b@example.com', ... });
まとめ
GASを使えばGoogleフォームの通知を簡単に自動化できます。今回のコードは:
- ✅ 設定箇所が
CONFIGにまとまっていて管理しやすい - ✅ 質問が増えても自動対応
- ✅ メール・Slackを個別にON/OFFできる
業務の自動化・効率化をもっと本格的に進めたい方へ
GASを使った業務自動化・データ活用・Webシステム開発の受託開発を行っています。「もっと複雑な処理をやりたい」「自社の業務フローに合わせてカスタマイズしたい」などのご相談はお気軽にどうぞ。