GASでGoogleフォームを自動化する方法まとめ|4つの実装例で解説

GASでGoogleフォームを自動化する方法まとめ|4つの実装例で解説のアイキャッチ画像 AI自動化

Googleフォームの回答を、GAS(Google Apps Script)でもっと自由に処理したい——。そう思って調べ始めた方に向けた記事です。

標準機能では、通知の宛先も文面も細かくは変えられません。自動返信も「回答のコピー」が届くだけです。毎回スプレッドシートを開いて、新しい回答が来ていないか確認している方も多いはずです。

この記事では、GASでGoogleフォームを自動化するとできることを全体像で整理し、メール・LINE・Slack/Discordへの通知回答者への自動返信という4つの実装例を一望できるようにまとめます。さらに、4つすべてに共通する「骨組み」と、実際に手を動かして踏んだつまずきどころも先にお伝えします。

なお、GASでのフォーム作成や関数リファレンスには踏み込みません。あくまで「受け取った回答をどう自動処理するか」に絞ります。自分がやりたい自動化がどれかを見つけて、各手順記事へ進むための地図として使ってください。

GASでGoogleフォームは何を自動化できるのか

まず、標準機能とアドオン、GASでできることの違いを整理します。

やり方 通知先の自由 文面のカスタマイズ 費用
標準機能 メールのみ・簡素 できない 無料
アドオン ものによる ある程度 無料枠あり
GAS 自由(メール/LINE/Slack/Discord等) 自由 無料

GASの強みは、「誰に・何を・どう届けるか」をすべて自分で決められる点です。ここが Googleフォーム GAS で検索してたどり着く人の求めているところだと思います。

できることは、届け先で3つに分けると整理しやすいです。

  • 自分が受け取る=通知:回答があったことをメール・LINE・Slack・Discordで受け取る
  • 回答者に返す=自動返信:回答してくれた相手に、自分の文面でお礼や案内を返す
  • データを扱う=集計・転記:回答を別シートにまとめる、整形する(この記事の後半で触れます)

この記事で扱う4つの実装例は、上の「通知」と「自動返信」にあたります。

4つの自動化に共通する「骨組み」

先に、いちばん大事なことをお伝えします。これから紹介する4つは、別々の技術ではありません。 骨組みは1つで、最後の「送り先」を差し替えているだけです。

どの実装も、次の流れでできています。

  1. onFormSubmit(フォーム送信時トリガー)で送信を検知する
  2. イベントオブジェクト e から回答を取り出すe.namedValues
  3. 通知/返信用に整える
  4. 送り先へ送る

コードにすると、共通部分はこれだけです。

function onFormSubmit(e) {
  // 2. 回答を取り出す(キーは質問文そのまま。値は配列なので [0] が要る)
  var name = e.namedValues['お名前'][0];
  var text = e.namedValues['お問い合わせ内容'][0];

  // 3. 通知/返信用に整える
  var message = name + ' 様からお問い合わせがありました。\n' + text;

  // 4. 送り先へ送る(★ここを差し替えるだけで通知先が変わる)
  //   メール             → GmailApp.sendEmail(...)
  //   LINE/Slack/Discord → UrlFetchApp.fetch(...)
}
GASでGoogleフォームを自動化する4つに共通する骨組みのフロー図
4つの実装は「送り先」を差し替えているだけ(共通の骨組み)

①〜③はどの実装でも同じで、変わるのは④の送り先だけです。この構造さえ掴めば、「メール通知ができたから、次はSlackにも送りたい」というときに、送信部分だけ差し替えればいいと分かります。逆に言えば、1つ作れば残りは応用です。

以降の4つは、この「④の差し替えパターン」として読んでください。

GASでGoogleフォームを自動化する4つの実装例

① 回答をメールで自分に通知する

問い合わせや申込みを見逃したくないときの基本形です。GmailApp.sendEmail で、回答を整形して自分宛に送ります。try-catch で囲めば、失敗したときにエラー内容を自分に送ることもできます。

いちばんシンプルで、GASの入口としておすすめです。

→ 手順の詳細:GASでフォーム回答をメール通知する方法

② 回答をLINEに通知する

メールだと埋もれてしまう、スマホですぐ気づきたい——そんなときはLINEです。LINE Messaging APIを使い、UrlFetchApp でメッセージを送ります。送り先が「LINE」に変わるだけで、①と骨組みは同じです。

→ 手順の詳細:GASでフォーム回答をLINEに通知する方法

③ 回答をSlack/Discordに通知する

チームで受けたいときは、SlackやDiscordのチャンネルに流します。どちらもIncoming Webhookに UrlFetchApp でPOSTするだけで、ほぼ同じコードで両対応できます。

ここでは私も1つ踏みました。Discordは初回のPOSTで 4291015 が返ることがあり、リクエストにUser-Agentを1行足すだけで解決しました。この手のクセは、SaaSの解説記事には載っていないことが多いです。

→ 手順の詳細:GASでフォーム回答をSlack/Discordに通知する方法

④ 回答者に自動返信メールを送る

①〜③は「自分が受け取る」通知でした。④は逆で、回答してくれた相手に返す自動返信です。送り先が「回答者本人」に変わります。

標準機能の自動返信は回答のコピーが届くだけですが、GASなら件名も本文も差出人名も自由です。「お問い合わせありがとうございます」「3営業日以内にご返信します」といった案内を、自分の言葉で返せます。

→ 手順の詳細:GASでフォーム回答者に自動返信メールを送る方法

GASでフォーム自動化するとき「必ず」つまずくポイント

ここが、この記事でいちばんお伝えしたい部分です。4つを実際に作る中で、私が繰り返し踏んだ罠をまとめます。どれもコードの書き間違いではなく、GASの仕組みを知らないと気づけないものです。

1. コードを書くだけでは動かない。トリガーの手動登録が必要。
onFormSubmit は、関数を書いて保存しただけでは実行されません。Apps Scriptの時計アイコンから、「フォーム送信時」のトリガーを手動で登録して初めて動きます。ここを忘れると、コードは正しいのに何も起きません。

2. 機能を足すと、権限を承認し直す必要がある。しかもトリガー経由は無言で失敗する。
これがいちばんはまりました。トリガー登録時に権限を承認済みでも、あとから GmailApp.sendEmail のような新しい機能を足すと、その分の権限が足りなくなります。厄介なのは、トリガー経由の実行では承認ダイアログが出ない点です。画面には何も起きず、回答者からは「答えたのにメールが来ない」としか見えません。対処は、エディタから関数を手動実行して承認を通すことです。

3. 回答の取り出しは e.namedValues を使う。
値は配列で返るので、e.namedValues['お名前'][0] のように [0] が要ります。付け忘れると宛先や本文が壊れます。一方 e.values(配列)は、質問の順番と並びが一致しません。メールアドレスを収集していると、それが列の2番目に割り込みます。e.values[1] を名前だと思って書くと、エラーも出ずにメールアドレスが名前として差し込まれます。だから質問文をキーにできる e.namedValues が安全です。

4. 「送れたか」の確認方法は、送り先で違う。
SlackやDiscordは外部Webhookなので、応答コード(Discordは204、Slackは200)で成否を判定できます。ところが GmailApp.sendEmail成功したかを表す値を返しません(戻り値は GmailApp オブジェクトです)。つまりメールの場合、確認手段は実行ログとトリガー履歴しかありません。「まず実行ログを見る」が鉄則になるのは、この技術的な理由からです。

5. 実行ログは数分遅れることがある。プレビューでは送信できない。
実行の行はあるのに「この実行に関するログはありません」と出ることがあります。これは表示が数分遅れているだけで、実行ステータスが「完了」で、スプレッドシートに行が増えていれば処理は動いています。ログが空=失敗、と決めつけないでください。また、フォーム編集画面のプレビューからは送信できません。テストは「送信」→リンクのURLから行います。

これらは、それぞれの記事で実際に手を動かして確認した内容です。詳しい再現手順や実ログは、各記事にまとめています。

次の一手:集計・転記、AIでの仕分けへ

通知と自動返信ができるようになると、次は「回答そのものを扱う」自動化に広がります。たとえば、回答を条件ごとに別シートへ振り分ける/整形して集計する、あるいはAIで内容を自動仕分け・要約するといった方向です。骨組みは同じで、④の送り先の代わりに③の整える部分を厚くしていくイメージです。このうちAIで内容を自動仕分けする方法は、Googleフォームの回答をAIで自動分類する方法で具体的に解説しています。

「自分のフォームに合わせて実装してほしい」「まずは動くコードをまとめて手元に置きたい」という方は、こちらもご覧ください。

フォーム自動化を「頼みたい」「自分で全部そろえたい」方へ

🛠️ 作ってほしい:あなたのフォームに合わせて、通知や自動返信の仕組みをまるごと構築します。ココナラで相談する

📦 自分でやる:フォーム自動化のコードをまとめたテンプレ集です。note「GAS自動化テンプレ集」を見る

まとめ

GASでGoogleフォームを自動化する方法を、4つの実装例でまとめました。

  1. 標準機能では通知先も文面も自由が効かない。GASなら「誰に・何を・どう届けるか」を自分で決められる
  2. 骨組みは1つonFormSubmitで検知し、回答を取り出し、整えて、送り先へ送る。変わるのは送り先だけ
  3. 4つの実装例(メール/LINE/Slack・Discord通知+回答者への自動返信)は、送り先違いの兄弟
  4. 必ずつまずくポイント(トリガー登録・権限の再承認・e.namedValues・確認方法・ログの遅延)を先に知っておく

まずは自分の「届け先」に合う記事から、1つ作ってみてください。1つ動けば、残りは送り先を差し替えるだけです。

最後までお読みいただきありがとうございました。

コメント

タイトルとURLをコピーしました