0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GASでGoogleフォームの回答を自動でメール&Slackに通知する

0
Posted at

はじめに

Googleフォームで問い合わせや申込みを受け付けているとき、こんな不満はないでしょうか。

  • スプレッドシートを毎回開いて確認しないといけない
  • 回答に気づくのが遅れて対応が後手になる
  • 複数人で共有したいのに全員がスプレッドシートを開くのは非効率

Google Apps Script(GAS)を使えば、フォームに回答が届いた瞬間にメールとSlackへ自動通知できます。 コードは合計30行程度で、設定時間は10〜15分です。

完成イメージ

フォームに回答が送信されると、以下が自動で実行されます。

  1. 指定したメールアドレスに回答内容が届く
  2. SlackのチャンネルにBotが回答内容を投稿する

どちらか一方だけでもOKです。

前提条件

  • Googleアカウントがあること
  • 通知したいGoogleフォームがすでに存在すること
  • Slack通知する場合:Slackワークスペースの管理者権限(またはWebhook作成権限)があること

手順

Step 1:フォームのApps Scriptを開く

  1. 通知したいGoogleフォームを開く
  2. 右上のメニュー(点3つ)→「スクリプトエディタ」をクリック
  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を取得する

  1. Slack API → 「Create New App」→「From scratch」
  2. アプリ名(例:フォーム通知)を入力してワークスペースを選択
  3. 左メニュー「Incoming Webhooks」→ 有効にする
  4. 「Add New Webhook to Workspace」→ 通知したいチャンネルを選ぶ
  5. 生成された https://hooks.slack.com/services/... をコピーして webhookUrl に貼る

Step 5:トリガーを設定する

コードを保存しただけでは動きません。フォームが送信されたときに自動実行するトリガーを設定します。

  1. Apps Scriptの左メニュー「トリガー(時計アイコン)」をクリック
  2. 右下「+トリガーを追加」
  3. 以下のように設定する
項目 設定値
実行する関数 onFormSubmit
イベントのソース フォームから
イベントの種類 フォーム送信時
  1. 「保存」→ 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.sendEmailhtmlBody プロパティを追加すると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システム開発の受託開発を行っています。「もっと複雑な処理をやりたい」「自社の業務フローに合わせてカスタマイズしたい」などのご相談はお気軽にどうぞ。

🌐 https://datarou.com

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?