Googleフォーム×スプレッドシートをAIで自動分類・通知まで一気通貫|GAS+ChatGPT実録で非エンジニアが作った顧客情報収集フロー
当サイトはアフィリエイトプログラムを利用しており、紹介リンク経由での申込により報酬を得る場合があります。記事内で紹介するサービスには筆者が実際に使用しているものと、客観情報として比較掲載しているもの(未使用・PR表記あり)が含まれます。
結論:フォーム→転記は「自動化の入口」、分類まで回すと別次元の業務が生まれる#
先に結論を書きます。
Googleフォームの回答をスプレッドシートに自動転記するだけなら、設定5分で誰でも終わります。この記事はその話ではありません。
ポイント
本記事が扱う「一気通貫フロー」の全体像:(1) フォーム回答をGASでトリガー取得 → (2) ChatGPT APIで顧客タイプを自動分類 → (3) スプレッドシートに色分けで書き込み → (4) YoomでSlack担当者通知。GAS未経験でもAI補助でコードを生成する手順をカバーし、つまずきポイントも実体験から列挙しています。成果を保証するものではなく、あくまで個人の体感です。
私が実際に作ったのは「問い合わせフォームの回答が届いた瞬間に、ChatGPTが顧客タイプ(見込み客・既存客・業者・その他)を判定し、スプレッドシートに色付きで記録、Slackへ担当者通知が飛ぶ」という流れです。
設定に費やした時間は正味3時間ほど。GASのコードは1行も書いたことがない状態から始め、ChatGPTにコードを生成してもらいながら組み立てました。完成後の運用で気づいたつまずき(APIの課金設計・レート制限・フォームの入力パターン崩れ)も包み隠さず書きます。
全体フローの設計図#
作り始める前に、まず何を使って何をつなぐかを整理することが重要です。私が最初に図を書かずに着手して2回やり直したので、ここを先に共有します。
| ステップ | 担当ツール | 役割 |
|---|---|---|
| フォーム回答の受け取り | Google フォーム | 顧客に入力させる入口 |
| トリガー発火・API呼び出し | Google Apps Script(GAS) | 回答をChatGPT APIへ渡す橋渡し |
| 顧客タイプの判定 | ChatGPT API(GPT-4o) | 自由記述を読んで分類タグを返す |
| 色分け書き込み | GAS(スプレッドシート操作) | 分類結果に応じてセルを色付け |
| 担当者へのSlack通知 | Yoom | ノーコードで通知フローを組む |
ポイントは「GASが中継役を担い、ノーコード(Yoom)とAPIの両方をつなぐ」構造です。GASだけで全部やろうとするとSlack連携が複雑になるため、Slack通知はYoomに任せました。
ステップ1:Googleフォームとスプレッドシートの準備#
まずフォームを作ります。このときフィールド設計が後の分類精度を左右します。私が試した結果、自由記述を1問だけ入れるより、選択肢と自由記述を組み合わせた方がChatGPTの判定が安定しました。
手順
- Googleフォームを新規作成し、「お問い合わせ内容(自由記述)」と「ご用件(ラジオボタン:製品について/料金について/その他)」の2フィールドを最低限設置する
- フォームの「回答」タブから「スプレッドシートにリンク」→「新しいスプレッドシートを作成」
- スプレッドシートが生成されたら、1行目(ヘッダ行)の右端に「顧客タイプ」「処理ステータス」の2列を手動で追加しておく(GASが後でここに書き込む)
- スプレッドシートのURL欄からスプレッドシートIDをコピーしてメモ帳に保存(後のGAS設定で使う)
メモ
フォームの自由記述欄は「できるだけ詳しくご記入ください」という案内文を追加すると、後のAI分類精度が上がります。私の場合、案内文を付けない運用では「その他」判定が全体の約40%でしたが、案内文追加後は約15%まで下がりました(あくまで私の環境での体感値)。
ステップ2:GASコードをAIに生成させる(GAS未経験者向け)#
GASは書いたことがない、という方がほとんどだと思います。私もそうでした。ここではChatGPTにコードを生成させる手順を実録で紹介します。
ChatGPTへのプロンプト設計#
スクリプトエディタ(スプレッドシートのメニュー「拡張機能」→「Apps Script」)を開いたら、まずコードを書かずにChatGPTへ依頼します。
依頼文の例:
「Googleフォームに回答が来るたびに自動実行されるGoogle Apps Scriptを書いてください。やりたいこと:(1) フォームの最新回答行を取得する (2) お問い合わせ内容の列をChatGPT APIに送り、見込み客・既存客・業者・その他の4択で分類させる (3) 返ってきた分類をスプレッドシートの"顧客タイプ"列に書き込む (4) 分類に応じてそのセルに色をつける(見込み客=青、既存客=緑、業者=黄、その他=グレー)」
このプロンプトを渡すと、ChatGPTはほぼそのまま動くコードを出してきます。私が受け取ったコードのポイント部分は次の構造です(実際の内容は生成ごとに変わります):
function onFormSubmit(e) {
// 回答行の取得
// ChatGPT API呼び出し(fetch + APIキー)
// 分類結果の書き込み
// セル色設定
}
APIキーの設定(ここが最初の課金ポイント)#
注意
ChatGPT APIを使うにはOpenAIのAPIキーが必要で、使った分だけ課金されます。GPT-4o miniなら入力1,000トークンあたり約0.015円(税抜・2026年6月時点のレート換算目安)で、フォーム回答1件あたり0.01〜0.05円程度になりますが、必ずOpenAIのダッシュボードで月額上限を設定してから本番稼働させてください。上限なしで大量テストすると意図せず費用が発生します。
GASのスクリプトエディタで「プロジェクトの設定」→「スクリプトプロパティ」から OPENAI_API_KEY という名前でキーを登録します。コード内に直書きすると他の人がスクリプトを見たときに漏洩するリスクがあるため、必ずプロパティ経由で読み込む形にします(ChatGPTに依頼するときも「APIキーはスクリプトプロパティから読み込む形で」と指示に入れると安全なコードが出てきます)。
トリガーの設定#
スクリプトエディタの「トリガー」→「トリガーを追加」で、実行関数を onFormSubmit、イベントソースを「スプレッドシートから」、イベントの種類を「フォーム送信時」に設定します。これでフォームに回答が来るたびにGASが自動で動きます。
ステップ3:スプレッドシートへの色分け書き込み確認#
設定後、テスト用のフォーム回答を3〜5件送って動作を確認します。
確認するポイント:
- 「顧客タイプ」列に「見込み客」「既存客」「業者」「その他」のいずれかが入っているか
- セルの背景色が分類ごとに変わっているか
- スプレッドシートのタイムスタンプ列と、GASの実行ログのタイムスタンプが近い値か(大きくズレている場合はトリガー設定を確認)
ステップ4:YoomでSlack担当者通知を追加する#
GASでスプレッドシートへの書き込みが動いたら、次は通知です。GASからSlackに直接送ることも技術的には可能ですが、Webhook URLの管理が煩雑になるため、私はYoomに任せました。
Yoomの無料プランでも「スプレッドシートの新規行追加をトリガーに、Slackへメッセージ送信」というフローが組めます。
設定の骨格:
- Yoomにログイン→「+新しいフロー」
- トリガー:「Googleスプレッドシート」→「行が追加されたとき」→対象シートを指定
- アクション:「Slack」→「メッセージを送信」→通知チャンネルと本文(顧客タイプや回答内容を動的に差し込む)
メモ
Yoomの無料プランにはフロー実行回数の上限があります(2026年6月時点で月200回まで・変更される可能性あり)。フォーム回答が月200件を超える場合は有料プランへの切り替えを検討してください。
実際につまずいた3つのポイント#
設定の手順は以上ですが、ここからが本記事の核心です。実際に動かしてわかった落とし穴を正直に書きます。
つまずき1:APIのレート制限で一部の回答が無視される#
フォームへの回答が短時間に集中したとき(例:Xでシェアされて一気に30件届いた)、GASが複数回連続でChatGPT APIを呼び出し、レート制限エラーが返ってきて分類処理がスキップされました。
対策:GASの中で Utilities.sleep(1000) を呼び出し(1秒待機)を入れること。また、エラーが出た行のIDをスプレッドシートの「処理ステータス」列に「エラー」と書き込むロジックをChatGPTに追加してもらいました。翌日エラー行だけをまとめて再処理するフローも作れます。
つまずき2:フォームの入力パターン崩れで分類が「その他」に集まる#
「ご用件」の選択肢を後から変更したとき、変更前に届いた回答の選択肢文字列と、GASが想定している文字列が一致しなくなりました。ChatGPTへ渡すプロンプト内に「以下の選択肢から分類せよ」と書いていたのに、実際の入力値が異なるためAIが判断できず「その他」が急増。
対策:フォームの選択肢を変更したらGASのプロンプト文字列も同時に更新する、というルールをチームに共有しました(変更履歴をスプレッドシートのシート2に記録する運用に変えた)。
つまずき3:GASの実行時間上限に引っかかる#
GASは1回の実行で最大6分という制限があります(2026年6月時点)。通常の1件処理では問題ありませんが、過去分の一括再処理をしようとしたとき、100件を超えると途中で処理が打ち切られました。
対策:一括処理は「1回20件まで」に分けてループを回し、処理済みのIDをシートに記録してから次のトリガーへ渡す形に変更しました。この構造もChatGPTに依頼すれば実装してもらえます。
GASとノーコード(Yoom/Make)の選択基準#
メリット
GASを選ぶべき状況
- Google Workspace内で完結させたい(データを外部サービスに渡したくない)
- 月のフロー実行回数が多く、ノーコードツールの無料枠を超える見込み
- ChatGPT APIなど外部APIと直接通信したい
- 柔軟なエラーハンドリングを自分で設計したい
デメリット
ノーコードツール(Yoom/Make)を選ぶべき状況
- GASのコード生成・修正をAIに頼ってもデバッグが追いつかない場合
- 複数のSaaS(Slack・Notion・kintoneなど)を組み合わせる接続が多い
- フローの変更頻度が高く、GUIで即日修正したい
- エラー通知やリトライをGUI上で管理したい
私の結論は「GASとYoomの役割分担」でした。処理ロジック(API呼び出し・書き込み)はGAS、通知・外部SaaS連携はYoom、というすみ分けが最もトラブルが少なかったです。
Value AI Writerを補助ツールとして組み合わせた話#
フォーム分類のフローが動き始めると、次に欲しくなるのが「分類された顧客タイプごとに返信文を自動下書き」する仕組みです。私はここでValue AI Writerを組み合わせました。見込み客には丁寧な提案文、業者には定型の取り次ぎ文、と顧客タイプに応じたテンプレートをAIが補完してくれるため、返信の品質が安定します。
PRAIライティングを返信業務に活用するValue AI Writerよくある質問#
Q. ChatGPT APIを使わずに無料で分類できますか?#
A. GASだけで「選択肢の値によって分岐する」単純な条件分岐は無料で作れます。ただし自由記述の意味を読んで分類する処理は、生成AIのAPIなしでは難しいです。Google Gemini APIも現時点(2026年6月)では無料枠がありますが、精度は用途によって異なります。完全無料で始めるなら、まず選択肢フィールドを増やして条件分岐で分類し、後からAPI連携を追加する段階的な設計をおすすめします。
Q. GASのコードをChatGPTに生成させたとき、セキュリティ上の注意点はありますか?#
A. 主な注意点は2つです。(1)APIキーはスクリプトプロパティに格納し、コード内に直書きしない。(2)フォームに個人情報(氏名・住所など)が含まれる場合、ChatGPT APIに送信することになるため、プライバシーポリシーへの記載と利用規約の確認が必要です。OpenAIのAPIはデフォルトでデータをモデルの学習に使用しないオプトアウト設定になっていますが、念のため自社のポリシーと照合してください。
Q. フォームの回答件数が増えたとき、GASは月額費用がかかりますか?#
A. GAS自体は無料です。費用が発生するのはChatGPT APIの使用量のみ。GPT-4o miniで回答1件あたり0.01〜0.05円(税抜・目安)程度なので、月1,000件でも数十円レベルです。ただしGPT-4oを使う場合は単価が上がるため、OpenAIのダッシュボードで使用量を定期的に確認する習慣をつけてください。
まとめ:「転記の自動化」から「分類の自動化」へ#
GoogleフォームとスプレッドシートのAI連携は、単純な転記ではなくAIによる判定まで組み込んではじめて業務効率の本質的な改善につながります。
今回紹介したフローのポイントをまとめると:
- GASはAI補助でコード生成すれば非エンジニアでも1日で動かせる
- APIレート制限・フォーム入力崩れ・GAS実行時間上限の3つは必ず先に対策を入れる
- Slack通知はYoomに任せると構成がシンプルになる
- APIコストはGPT-4o miniなら月数十円〜数百円レベル(規模による目安)
次のステップとして、蓄積した分類データをAIでさらに分析する方法はフォーム回答のAI分析やノーコード自動化ガイドも参考になります。エンジニアなしで自動化を積み上げていく全体像は非エンジニアのAI自動化入門で整理しています。
文章生成・返信下書きのAI補助にはValue AI Writerが実務でそのまま使える選択肢です。
PRValue AI Writerを無料で試すValue AI Writer