セミナー開催レポートブログ

GASとAIでGoogleフォームの自動返信を作る|claspとCursor

開催日
2025年9月22日(月)21:00–22:00
講師
ケイタロさん
セミナー開催レポートブログ GASとAIでフォーム自動返信を作る 講師ケイタロさん 2025年9月22日開催

Google Apps Script(GAS)と生成AIを組み合わせると、プログラミング経験が少なくても、Googleフォームに回答した人へお礼メールを即時に自動返信する仕組みを短時間で作れます。フォーム作成からclaspでのローカル開発、トリガー設定、返信文をスプレッドシートで編集できるようにする改良までを押さえると、同じ型でほかの通知や連携にも応用できます。

2025年9月22日のProcevoの講座では、講師のケイタロさんがGASとAIを使い、アンケート回答への自動返信を実際に組み立てました。扱ったのは、スタンドアロンとコンテナバインドの違い、claspとCursorの使い方、onFormSubmitトリガー、設定シートへの切り出しまでです。

GASでフォーム自動返信を作る流れの図。フォーム作成、claspでローカル開発、onOpenとプロパティ設定、onFormSubmitトリガーの4ステップ

今後のセミナー予定

GASとは何?

GASは、Googleが提供するJavaScriptベースのクラウドスクリプト環境です。Gmail、スプレッドシート、フォーム、カレンダーなどのGoogle Workspaceのサービスをプログラムでつなぐことができ、すべてGoogleのクラウド上で動くためインストールは不要です。個人のGoogleアカウントでも無料で使え、パソコンを閉じていても時間トリガーで自動実行できる点が特徴です。

GASの特徴のスライド。JavaScriptベース、Googleサービス連携、無料、ブラウザ完結、時間トリガー

講師のケイタロさんは非エンジニアで、有料の自動化ツールの料金が上がったことをきっかけにGASへ移行したと説明しています。AIにコードを書かせる前提であれば、アイデア次第で多くの業務を自動化できるという立場です。

GASで何ができる?

講座で紹介された代表的な用途は次のとおりです。

GASでできることの例のスライド。Gmail、スプレッドシート、フォーム、カレンダー、外部API連携
  • Gmailの自動返信・振り分け・一括送信
  • スプレッドシートの自動集計・レポート生成
  • フォーム回答に応じた自動処理・通知(Gemini APIを組み合わせるとさらに高度になる)
  • カレンダーの自動予約・リマインダー設定
  • Slack、LINE、Discord、Xなど外部サービスとのWeb連携

カレンダーの活用例として、夜に会食の予定が入ったらその後の時間帯を自動でブロックし、翌日になったらブロック用の予定を削除するスクリプトが紹介されました。Discordは Webhook を取得するだけで通知できるため、連携の中でも特に簡単だとされています。

今回のゴールと無料枠の注意点は?

今回のゴールは、Googleフォームの回答者に即時でお礼メールを返信するシステムを完成させることです。処理の流れは「Googleフォーム送信 → スプレッドシートに記録 → GASで自動処理 → メール自動返信」です。

今回のゴールのスライド。フォーム送信からスプレッドシート、GAS、メール自動返信までの流れ

注意点として、無料の個人アカウントではGASから送れるメールの数に1日あたりの上限があります(講座では約70通と説明)。また、1日のリセットのタイミングは日本時間の0時ではないとされています。大量に送る場合は日を分けるなどの工夫が必要です。最新の上限はGoogleの公式ドキュメント「Apps Scriptの割り当て(https://developers.google.com/apps-script/guides/services/quotas?hl=ja)」で確認してください(2026年11月時点)。

無料アカウントのメール送信上限は講座では約70通と説明され、リセット時刻と大量送信時の注意点を示した図。

なお、要件がうまく言語化できない段階では、スライドや手書きのフロー図のスクリーンショットをChatGPTなどに貼り、「Google Apps Scriptで実装したいので、まず要件定義を詳細にしてください」と頼むだけでもかなりの精度で設計してくれると紹介されています。

学ぶポイントは何?

講座で扱った学習ポイントは次の4つです。

学ぶポイントのスライド。スタンドアロンとコンテナバインド、onFormSubmit、clasp、実践的な自動返信
  1. Stand-alone(スタンドアロン)とContainer-bound(コンテナバインド)スクリプトの違い
  2. onFormSubmitトリガーの設定と活用
  3. claspを使ったローカル開発環境
  4. 実践的なフォーム自動返信の構築

スタンドアロンとコンテナバインド

コンテナバインドは、スプレッドシートやフォームの「拡張機能 → Apps Script」から開くエディターで、そのファイルに紐づいています。たとえばスプレッドシートから開いた場合、「アクティブシート」はそのシートを指します。普段多くの人が使っているのはこちらです。

スタンドアロンは、Googleドライブの「新規 → Google Apps Script」などから作る、どのファイルにも紐づかないスクリプトです。講師のケイタロさんは普段はほとんど使わず、Apps Scriptのプロジェクト一覧から「どんなトリガーが動いているか」を確認するときに見る程度だといいます。今回はコンテナバインドで進めます。

スタンドアロンとコンテナバインドの違いの図。コンテナバインドはファイルの拡張機能から開いてそのファイルに紐づき、スタンドアロンはどのファイルにも紐づかない

AIでアンケートフォームを作るには?

フォームは手作業でも作れますが、講座ではAIにGASのコードを書かせて作成しました。プロンプトの例は「AIセミナーのアンケートを取りたい。名前、メール、今日の評価(5点満点)、その他の自由記述を入れ、3分ほどで回答できる内容にしたい。Googleフォームにコンテナバインドされたエディターに書くGASを書いてください」というものです。ChatGPTを使う場合は、キャンバスを明示的に立ち上げるとコードを扱いやすくなります。

AIセミナー参加者アンケートのGoogleフォーム。お名前とメールアドレスの回答欄

出力されたコードをフォームのApps Scriptに貼り付けて実行すると、フォームが自動で作られます。一度で動かないことも多いため、エラーはそのままAIに渡して修正させます。生成コードで var が使われている場合は「const で書いて」と指示すると今風のコードになる、という豆知識も紹介されました。

作成後は手作業で仕上げます。メールアドレス欄には回答の検証で「メールアドレス」形式を設定し、満足度は均等目盛ではなく「評価(星)」形式にすると集計しやすくなります。最後に「回答」タブからスプレッドシートにリンクし、テスト回答を送って記録されることを確認します。

AIにGASのコードを書かせ、Apps Scriptでフォームを作り、回答の検証とスプレッドシートへのリンクを行う手順図。

個人アカウントで承認画面から進めない場合

実行時の権限承認で、個人のGoogleアカウントでは「このアプリはブロックされています」と表示されて先に進めない事例が参加者から挙がりました。Workspaceアカウントでは進めたとのことです。講師のケイタロさんもその場では原因を特定できず、Google Cloudのプロジェクト設定が関係している可能性があると説明しました。対処として、別のGoogleアカウントで試すか、講師のケイタロさんが共有したフォームを自分のドライブにコピーして進める方法が案内されました。

claspとCursorでローカル開発するには?

claspは、Googleが提供するGASのコマンドラインツールで、ローカルの環境でGASのコードを書いて管理できます。講師のケイタロさんは、一時的なコードはChatGPTに書かせてそのまま貼り付け、長く管理するものはclaspで書いていると説明しています。GitHubにもすぐ上げられる点も利点です。

準備の手順は次のとおりです。

  1. 作業用の空フォルダを作る
  2. ターミナルで cd と入力し、フォルダをドラッグ&ドロップしてEnter(pwd で移動を確認)
  3. cursor . でそのフォルダをカレントディレクトリにしてCursorを起動(Cursorの「Open Project」から開いてもよい)
  4. Cursorのエージェントにclaspのインストールを依頼する
  5. ターミナルで clasp login を実行し、ブラウザでclaspに権限を付与する

Windowsではclaspのインストールに管理者権限やPowerShellの設定が必要になる場合があるとされています。

よく使うコマンドは3つだけです。

  • clasp login:最初にログインする
  • clasp clone <スクリプトID>:GAS側のプロジェクトをローカルに取り込み、Cursorと紐づける
  • clasp push:ローカルで書いた変更をGASに反映する

スクリプトIDは、スプレッドシートから開いたApps Scriptエディターの歯車アイコン(プロジェクトの設定)で確認できます。clasp clone すると コード.js がローカルに現れ、ローカルで編集して保存し clasp push すると、エディターを再読み込みしたときに内容が反映されます。以後はエディター上ではコードを書かず、Cursorで書いて clasp push を繰り返すのが基本の流れです。

claspでのローカル開発の流れの図。clasp loginでログインし、clasp cloneでスクリプトIDのプロジェクトを取り込み、Cursorで書いてclasp pushでGASに反映する

なお、紐づけるのはフォームではなく、回答先スプレッドシートにコンテナバインドされたスクリプトです。参加者の中には、フォーム側のスクリプトで作業したためにフォームが二重に作られてしまった例があり、講座内でこの点が補足されました。

onOpenメニューとスクリプトプロパティはどう使う?

自動返信のコードは、スプレッドシートのスクリーンショットを添えて、次のようにAIへ依頼しました。

スプレッドシートのカスタムメニュー。セミナー自動返信設定からフォームIDを設定
  • Googleフォームに回答があったら、お礼のメールを自動返信したい
  • B列に名前、C列にメールアドレスが入っている。B列の名前を使って「〇〇様」宛てに送る
  • 送ったらF列をTRUEにする
  • フォームIDはスクリプトプロパティに入れたいが、手で入れるのは面倒なのでonOpen関数を使ってUIから入れられるようにする

講師のケイタロさんが強く勧めているのが、ユーザーが実行する関数をonOpen関数だけにする設計です。onOpenで独自メニューをスプレッドシートに追加し、「フォームIDを設定」「現在の設定を確認」といった操作をメニューから行えるようにすると、AIが書いたコードのどの関数を実行すればよいか迷わずに済みます。

フォームIDやWebhook URL、LINEのトークンなど他人に見られたくない値は、コードに直接書かずスクリプトプロパティに保存します。スクリプトプロパティはファイルをコピーしても複製されないため安全です。ただし手作業で1つずつ入れるのは手間なので、onOpenメニューからの入力ダイアログで登録できるようにしました。AIが入力値を勝手にエラー扱いした場面では、「ユーザーが入れた値はそのまま受け取り、勝手にエラーと判断しない」と追加で指示して修正しています。

onOpen関数が操作用メニューを追加し、スクリプトプロパティがフォームIDなどを保存する役割を示した図。

onFormSubmitトリガーはどう設定する?

フォーム送信時に処理を走らせるにはonFormSubmitトリガーを使います。このトリガーは、コードやメニューから明示的に作らないと標準では用意されません。講座ではメニューからのトリガー作成がエラーになったため、手動で設定しました。

Apps Scriptのトリガー追加画面。onFormSubmit、スプレッドシートから、フォーム送信時

手動で設定する場合は、Apps Scriptエディターの「トリガー」から「トリガーを追加」を押し、実行する関数(フォーム送信時の処理関数)を選び、イベントのソースを「スプレッドシートから」、イベントの種類を「フォーム送信時」にして保存します。講師のケイタロさんによると、フォームのトリガーはAIが比較的苦手とする部分です。一方、毎朝8時の定期実行のような時間トリガーは、コードから簡単に作成できます。

設定後にフォームからテスト回答を送ると、回答者宛てにお礼メールが届き、F列にTRUEが入ることを確認できました。

返信済みの記録を残すことは、メールの二重送信を防ぐための重要なステップです。未送信の行だけ送信し、送信後に返信済み列をTRUEにする条件分岐を入れておきます。

フォーム送信をきっかけに未送信の行へ返信し、送信後にF列へTRUEを記録する流れの図。

返信文をシートから編集するには?

最初のコードでは返信メッセージがコードに埋め込まれており、文面を変えるたびにコードの修正が必要でした。そこで次のように追加の指示を出しました。

  • onOpen関数で「設定」シートを作成する
  • 設定シートのA1セルにメッセージを入れ、正規表現で「〇〇様」の部分を回答者の名前に動的に置き換える
  • 初回はコード内のサンプルメッセージを設定シートに入れておく
  • 差し込むのはB列の名前だけにし、評価などは文面に入れない

clasp push 後にメニューから設定シートを作成し、A1セルの文面にSNSのフォローやnoteへの案内などを書き加えて再度テスト回答を送ると、新しい文面でメールが届きました。これで、コードに触れずに返信文を変更できるようになります。

最初はコード内にあった返信文を設定シートのA1セルへ移し、コードに触れず変更できるようにした比較図。

AIの返信案を人が確認してから送るには?

質疑では、問い合わせ内容に応じてAIが返信文を作り、そのまま自動送信できないかという質問が出ました。講師のケイタロさんの提案は次のような半自動の構成です。

  • Gemini APIなどでAIに「自動返信案」を作らせ、シートに書き出す
  • 人が内容を確認し、問題なければ「最終チェック」のチェックボックスを入れる
  • 15分に1回の時間トリガーで、チェック済みの行だけを送信する
AIが作った返信案を人が確認し、最終チェック済みの行だけを15分ごとの時間トリガーで送る構成図。

自動で送ると不適切な文面が出てしまうリスクがあるため、確認を挟む構成が安全です。過去の回答を読み込ませて返信案を作らせる、受け取った内容をDifyに投げて結果をセルに返す、といった発展も考えられるとしています。また、フォームトリガーが難しいと感じる場合は、15分ごとの時間トリガーで「F列が未チェックの行に送ってTRUEにする」ロジックにする方法もあります。ただし即時性がなくなり、トリガーの実行回数が増える点がデメリットです。

AIにコードを書いてもらうときの頼み方はAI疲れを減らす6つの方法|Claude Codeの並列作業で認知負荷を下げる工夫、定型の作業をAIに任せる考え方はAIエージェントの使い方|フォルダ整理から見積もり・動画マニュアルまでで扱っています。

まとめ

  • GASはGoogle Workspaceのサービスを無料でつなげるクラウドスクリプト環境で、AIにコードを書かせれば非エンジニアでも自動化ツールを作れる
  • フォームの作成から自動返信までは「フォーム → スプレッドシート → GAS → Gmail」の流れで構築する
  • claspを使うと、Cursorなどローカルのエディターでコードを書き、clasp push で反映できる。使うコマンドは login・clone・push の3つ
  • ユーザーが実行する関数をonOpenメニューに集約し、秘密の値はスクリプトプロパティに入れると、運用しやすく安全になる
  • onFormSubmitトリガーはAIが苦手なため手動設定も選択肢。返信済み列で二重送信を防ぐ
  • 返信文は設定シートに切り出すと、コードを触らずに変更できる

よくある質問

GASは無料で使えますか?

個人のGoogleアカウントでも無料で使えます。ただしメール送信数など1日あたりの割り当て(上限)があり、無料アカウントでは大量の送信には向きません。最新の上限はGoogleの公式ドキュメントで確認してください(2026年11月時点)。

claspとは何ですか?

GoogleがGAS向けに提供しているコマンドラインツールです。ローカル環境でGASのコードを書いて管理でき、clasp clone でプロジェクトを取り込み、clasp push で変更を反映します。Gitでの履歴管理やGitHubへのアップロードもしやすくなります。

clasp cloneにはどのIDを使いますか?

フォームの回答先スプレッドシートにコンテナバインドされたApps ScriptのスクリプトIDです。エディターの歯車アイコン(プロジェクトの設定)から確認できます。フォーム側のスクリプトと取り違えると、フォームが二重に作られるなどの不具合の原因になります。

権限の承認画面で先に進めないときは?

個人アカウントで「このアプリはブロックされています」と表示されて進めない事例がありました。講座では原因は特定されず、別のGoogleアカウントで試すか、共有されたフォームをコピーして進める方法が案内されました。

onFormSubmitトリガーがコードから作れない場合は?

Apps Scriptエディターの「トリガー」画面から手動で追加できます。イベントのソースを「スプレッドシートから」、種類を「フォーム送信時」にします。時間トリガーはコードから簡単に作れるので、即時性が不要なら定期実行で未送信行を処理する方法もあります。

アーカイブ動画はProcevoで見られます

Procevoでは、毎週1回、専門家によるセミナーを開いています

  • 毎週1回のセミナー
  • 動画は見放題
  • いつでも参加できる
  • いつでも退会できる
  • 入会金0円
  • オフラインイベントは無料
  • オンライン交流会
  • 情報の共有

今後のセミナー予定

その他のおすすめアーカイブ

セミナー開催レポートブログ一覧へ