AI・マーケトレンド
Writer /
この記事の著者
Webのアンケートフォームを作る作業は、地味に時間を食います。項目を並べ、選択肢を用意し、必須設定を入れ、セクションを分ける。中身を考える時間より、フォームを組み立てる作業のほうが長くなることも珍しくありません。
この記事では、ChatGPTとGoogle Apps Script(GAS)を組み合わせて、Googleフォームを一撃で生成する方法を解説します。あわせて、同じ内容を紙で配れる印刷用シートにする手順もまとめました。慣れれば10分で、Web版と紙版の両方が揃います。
30秒で分かる結論
ChatGPTに「このアンケートをGASで作って」と頼むと、フォームを生成するコードが返ってくる
そのコードをGoogle Apps Scriptに貼って実行するだけで、Googleフォームが自動で出来上がる
実行ログにフォームURLと編集URLの2つが出る。回答用と修正用で使い分ける
同じチャットで「紙で印刷する用の画像も作って」と続ければ、印刷版のヒアリングシートも作れる
プログラミングの知識は不要。コードは読まずにコピーして貼るだけでよい
なぜフォーム作成は時間がかかるのか
フォーム作成が面倒なのは、1つひとつの操作が単純なわりに、数が多いからです。設問を追加し、回答形式を選び、選択肢を打ち込み、必須のトグルを入れる。この繰り返しが10問、20問と続きます。
さらに、社内で使うアンケートは「Webで集めたいが、現場には紙で配りたい」というケースが多く、同じ内容を2つの形式で用意する手間が上乗せされます。ここをまとめて短縮できるのが、今回の方法です。
用意するもの
ChatGPT … アンケートの設計と、フォームを生成するコードの作成
Google Apps Script … 受け取ったコードを実行する場所
Googleフォーム … 生成物。自分で開く必要はなく、自動で作られる
いずれも追加の契約は不要です。Googleアカウントがあれば始められます。
ステップ1:ChatGPTにGASのコードを作らせる
最初にやることは、作りたいアンケートの中身をChatGPTに伝えることだけです。設問と回答形式を書き出し、「GASで作って」と添えます。
たとえば1on1の事前ヒアリングシートなら、次のような依頼になります。
以下の内容でGoogleフォームを作成するGAS(Google Apps Script)のコードを書いてください。
【フォーム名】1on1 事前ヒアリングシート
【設問】
・氏名(記述式・必須)
・所属部署(記述式・必須)
・現在担当している業務内容(段落)
・業務状況について近いもの(ラジオボタン/余裕がある・ちょうどよい・やや厳しい・かなり厳しい)
・感じている課題(チェックボックス/業務量・スキル・人間関係・評価・キャリア・その他)
・詳細があれば記入してください(段落)
・うまくいったこと、うまくいかなかったこと(段落)
※コードのみを出力してくださいポイントは、回答形式(記述式・ラジオボタン・チェックボックス・段落)まで指定しておくことです。ここを省くと形式が想定と変わり、あとから直す手間が増えます。必須にしたい項目も、この時点で書いておきます。
送信すると、GASのコードが返ってきます。中身を理解する必要はありません。次の工程でそのまま貼るだけです。
最小限の依頼でも作れる。精度を上げたいときの追加指示
設問をすべて書き出す時間がない場合は、フォームのタイトルだけを伝える依頼でもコードは作れます。解説動画の中でも、次の2行だけで1on1向けの設問一式が入ったフォームを作らせています。設問の中身はChatGPTが補うため、出来上がった設問は必ず編集URLから見直してください。
Googleフォームを自動作成するGAS(Google Apps Script)のコードを書いてください。
フォームタイトルは「1on1 事前ヒアリングシート」です。反対に、社外に出すアンケートや毎回同じ形で作りたいフォームは、条件を細かく書いたほうが修正が減ります。次のテンプレートは、回答形式・セクション・送信後のメッセージに加えて、コード側の条件まで指定する形にしています。とくに「FormAppだけを使う」「メール送信や外部通信を入れない」という条件は、後述する権限承認のときに、承認する範囲を必要最小限にとどめるためのものです。
以下の条件で、Googleフォームを自動作成するGAS(Google Apps Script)のコードを書いてください。
【フォーム名】(フォーム名)
【フォームの説明文】(回答者に表示する説明。回答の目安時間も入れる)
【設問】
・(設問文)(記述式/段落/ラジオボタン/チェックボックス/プルダウン/均等目盛 のいずれか・必須かどうか・選択肢)
・…
【セクション】(○問目の前でページを分ける。不要なら「なし」)
【送信後のメッセージ】(例:ご回答ありがとうございました)
【コードの条件】
・FormAppだけを使う。メール送信や外部サイトへの通信のコードは入れない
・関数名は createForm にする
・最後に、回答用のURL(getPublishedUrl)と編集用のURL(getEditUrl)をLogger.logで出力する
・回答をためるスプレッドシートも新規作成し、回答の保存先に設定する
・コードのみを出力する(説明文やコードブロックの記号は付けない)回答形式の名前は、ChatGPTにそのまま伝えて通じる言い方にそろえておくと迷いません。Googleフォーム上の呼び名と、GASで使われる命令(メソッド)の対応は次のとおりです(Apps Script リファレンス:Form クラス)。
記述式(1行)… addTextItem
段落(複数行)… addParagraphTextItem
ラジオボタン … addMultipleChoiceItem
チェックボックス … addCheckboxItem
プルダウン … addListItem
均等目盛(1〜5の評価など)… addScaleItem
セクション(ページ)の区切り … addPageBreakItem
貼る前に30秒で確認したい、コードの見どころ
コードを理解する必要はありませんが、「何をするコードか」だけは貼る前に目で確認しておくと安心です。次は、編集部が作成した最小構成のサンプルです。ChatGPTが返すコードも、おおむねこの形になります。
function createForm() {
// フォームを作る(タイトルは必須)
const form = FormApp.create('1on1 事前ヒアリングシート');
form.setDescription('面談の前日までにご回答ください。所要時間は5分程度です。');
// 記述式(1行)・必須
form.addTextItem().setTitle('氏名').setRequired(true);
// ラジオボタン(1つだけ選ぶ)
form.addMultipleChoiceItem()
.setTitle('業務状況について近いもの')
.setChoiceValues(['余裕がある', 'ちょうどよい', 'やや厳しい', 'かなり厳しい'])
.setRequired(true);
// ここでページを分ける(セクション)
form.addPageBreakItem().setTitle('課題について');
// チェックボックス(複数選べる)
form.addCheckboxItem()
.setTitle('感じている課題')
.setChoiceValues(['業務量', 'スキル', '人間関係', '評価', 'キャリア']);
// 段落(複数行の自由記述)
form.addParagraphTextItem().setTitle('詳細があれば記入してください');
// 回答用URLと編集用URLを実行ログに出す
Logger.log('フォームURL: ' + form.getPublishedUrl());
Logger.log('編集URL: ' + form.getEditUrl());
}確認するのは次の3点だけです。
FormApp.create( ) の中が、作りたいフォームの名前になっているか(このメソッドはタイトルが空だとエラーになります。FormApp リファレンス)
setChoiceValues( [ ] ) の中に、依頼した選択肢が漏れなく並んでいるか
フォームと関係のない命令が入っていないか。たとえば MailApp・GmailApp(メール送信)、UrlFetchApp(外部への通信)、DriveApp(ドライブ全体の操作)は、フォームを作るだけなら通常は不要です。入っていたら、何のためのコードかChatGPTに説明させてから実行してください
ステップ2:Google Apps Scriptに貼って実行する
手順は4つです。
検索で「GAS」と調べ、Google Apps Script(Google for Developers)を開く
「新しいプロジェクト」をクリックする
最初から書かれているコードをすべて消し、ChatGPTのコードを貼り付けて保存する
「実行」を押す
初回は、Googleアカウントへのアクセス許可を求める確認が出ます。自分のアカウントで自分のフォームを作る操作なので、内容を確認したうえで許可すると実行に進みます。
実行が終わると、画面下の実行ログにURLが2つ表示されます。ここまでで、Googleフォームはもう完成しています。
初回の権限承認で表示される画面と、許可してよいかの判断
初回の実行で出る確認画面は、スクリプトがあなたのGoogleアカウントの権限で動くことを許可するためのものです。Googleの公式ガイドでは、Apps Scriptはコードを読み取って使うサービス(FormAppやSpreadsheetAppなど)を特定し、必要な権限(OAuthスコープ)をまとめて、まだ許可されていなければ承認ダイアログを出す仕組みだと説明されています。以前に承認したスクリプトでも、コードの変更で新しいサービスが追加されると、もう一度承認を求められます(Google サービスの承認|Apps Script)。
承認画面で確認したいのは、表示される権限の一覧です。フォームを作るだけのコードなら、求められるのはGoogleフォームの権限(回答をスプレッドシートにためる設定を入れた場合はスプレッドシートの権限も)が中心になります。メールの送信やドライブ全体へのアクセスなど、依頼していない権限が並んでいたら、いったんキャンセルしてコードを確認してください。
「Google で確認されていません」と表示された場合
自分で作ったスクリプトでも、Googleの審査を受けていないアプリとして警告画面が表示されることがあります。公式の説明では、オーナーと利用者が同じGoogle Workspaceの組織に属するプロジェクトは確認(検証)が不要で、検証していない場合は組織外のユーザーが承認しようとすると未確認アプリの画面が出るとされています(OAuth クライアントの確認|Apps Script)。
自分がChatGPTに作らせ、自分のプロジェクトに貼ったコード … 内容を確認したうえで、詳細を開いて進めてよい場面です
他人から送られてきたコードや、出どころの分からないスクリプトのリンク … 承認しないでください。承認すると、そのスクリプトはあなたの権限でデータにアクセスできるようになります
許可した権限は後から取り消せます。Googleアカウントの「セキュリティ」から「サードパーティ製のアプリとサービスへの接続」を開き、対象のスクリプトを選んで接続を削除します(手順は前出の公式ガイドに記載があります)。試しに作っただけのプロジェクトは、使い終わったら取り消しておくと管理が楽です。
ステップ3:出てきた2つのURLを使い分ける
実行ログには、フォームURLと編集URLが並んで出力されます。役割が違うので、混同しないようにしてください。
フォームURL … 回答者が開く画面。社内や取引先に配るのはこちら
編集URL … 設問を修正する画面。自分だけが開く
フォームURLを開くと、依頼した設問がそのまま並んだアンケートが出来上がっています。編集URLを開けば、後から文言や形式を調整できます。「所属部署」を「所属部署(正式名称で入力してください)」に書き換える、選択式をプルダウンに変える、といった微調整はこちらで行うほうが早いです。
ChatGPTに何度も作り直させるより、細かい表現の詰めは編集画面でやったほうが確実です。大枠をAIに作らせ、仕上げを手で整える、という分担が現実的です。
ステップ4:紙の印刷版も同じチャットで作る
現場に紙で配りたい場合は、コードを作らせたチャットの続きで「紙で印刷する用の画像も作ってください」と依頼します。同じ会話の中なので設問を貼り直す必要はありません。
記入日、氏名、所属部署、業務内容、選択式の設問、自由記述までを含んだヒアリングシートが画像で出てきます。右上のダウンロードボタンから保存して印刷すれば、そのまま使えます。
Web版と紙版の設問がずれないのが、この作り方の利点です。別々に作ると、どちらかを直したときにもう一方の修正が漏れます。
つまずきやすいところ
コードを貼る前に、元から入っているコードを消していない … 全選択してから貼り付ける
実行しても何も起きない … 保存を押していないことが多い。保存してから実行する
設問の形式が想定と違う … 依頼文で回答形式を書いていない。形式まで指定して作り直す
選択肢を後から増やしたい … ChatGPTに戻さず、編集URLから直接足すほうが速い
なお、この方法で自動化できるのは作成までです。配布と回収、集計の呼びかけは人の仕事として残ります。作成が10分で終わる前提に立って、空いた時間を回収の設計に回すのが実務的な使い方です。
三森の実務メモ:この手順で効いたのは、時間短縮そのものより「アンケートを作るハードルが下がったこと」でした。以前は、思いついても作るのが面倒で見送っていた社内アンケートが、いまは思いついたその場で形になります。1on1の事前ヒアリング、施策の振り返り、研修後のアンケート。作るのが軽くなると、実施する回数が増えます。結果として溜まる情報量が変わってくるので、時短の効果は分単位の削減より大きいと感じています。
実行時にエラーが出たときの対処
実行ログに赤字のメッセージが出た場合は、次の順で確認すると多くが解決します。
SyntaxError(構文エラー)… 貼り付けの途中でコードが欠けたか、ChatGPTの説明文やコードブロックの記号(```)まで一緒に貼っていることが多い原因です。コード部分だけをコピーし直して貼ります
実行ボタンを押しても目的の処理が動かない … 画面上部の「実行する関数」のプルダウンで、フォームを作る関数(例:createForm)が選ばれているか確認します。関数が複数あるコードでよく起きます
TypeError で「〜 is not a function」と出る … ChatGPTが存在しない命令(メソッド)を書いた可能性があります。メソッド名をForm クラスのリファレンスで検索し、載っていなければ、次のプロンプトで作り直させます
権限に関するエラーで止まる … 会社のアカウントでは、管理者の設定でApps Scriptの利用やアクセスできる範囲が制限されている場合があります。個人で回避しようとせず、情報システム部門に確認します
設問が数百問ある、画像を大量に入れるなど処理が重い … Apps Scriptには1回の実行時間の上限(公式の割り当て表では6分/実行)があります(割り当てと上限|Apps Script)。フォームを分けるか、設問を減らして作り直します
原因が分からない場合は、エラーメッセージをそのままChatGPTに貼って直させるのが最短です。そのとき、存在しないメソッドを作り直しで繰り返さないよう、使ったメソッドの一覧も出させておくと確認が楽になります。AIの誤りを前提にした確認の仕組みは、AIのハルシネーション対策でも解説しています。
先ほどのGASのコードを実行したところ、次のエラーが出ました。
原因を1〜2行で説明したうえで、修正後のコード全文を出してください。
存在するかどうか自信のないメソッドは使わず、使ったメソッド名を最後に一覧にしてください。
【エラーメッセージ(実行ログの赤字をそのまま貼る)】
(ここに貼り付け)
【エラーが出た行のコード】
(ここに貼り付け)フォームは出来たのに、回答者が開けない場合
Apps Scriptのリファレンスでは、回答者がフォームにアクセスするにはフォームが公開されている必要があり、公開状態は setPublished で切り替えられると説明されています。新しいフォームの既定値は公開(true)です(Form クラス:setPublished)。回答者から「開けない」と言われたら、編集URLを開き、フォームが公開されているか、回答の受け付けが止まっていないかを確認してください。社外の人に送る場合は、回答できる人の範囲が組織内に限定されていないかもあわせて確認します。
また、このコードは実行するたびに新しいフォームを1つ作ります。エラーを直しながら何度も実行すると、Googleドライブに同名のフォームが複数残ります。配布する前に、最後に作ったフォームのURLを使っているか確認し、不要なものは削除しておきます。
回答をスプレッドシートで集計する手順
回答はフォームの「回答」タブでも確認できますが、件数が増えると、スプレッドシートにつないで集計したほうが扱いやすくなります。つなぎ方は、画面から設定する方法とコードで設定する方法の2つです。
方法1:フォームの画面からスプレッドシートにつなぐ
Googleのヘルプでは、次の手順で回答の保存先を選べると案内されています(フォームの回答の保存先を選択する|Google ドキュメント エディタ ヘルプ)。
編集URLでフォームを開き、上部の「回答」をクリックする
「概要」を開き、右上のその他アイコンから「回答の送信先を選択」を選ぶ
「新しいスプレッドシートを作成」か「既存のスプレッドシートを選択」を選び、「作成」または「選択」をクリックする
同じヘルプには、スプレッドシートはGoogleドライブに別ファイルとして作られること、スプレッドシートを削除してもフォームは消えず、その逆も同じであること、フォーム側で回答を削除すると元に戻せないことが書かれています。回答の削除はフォーム側で行わないよう、運用ルールにしておくと安全です。
方法2:コードで回答の保存先を設定する
フォームを作るたびに毎回つなぐなら、コードに含めてしまうほうが確実です。Apps Scriptでは setDestination で回答の保存先にスプレッドシートを指定できます。保存先を設定していないフォームでも、回答のコピーはフォーム側の回答ストアに保存されます(Form クラス:setDestination)。すでに作ったフォームにあとからつなぐ場合は、次のような関数を追加して実行します(編集部が作成したサンプルです)。
function linkSpreadsheet() {
// 編集URLの /d/ と /edit の間の文字列がフォームID
const form = FormApp.openById('(フォームID)');
const ss = SpreadsheetApp.create('1on1 事前ヒアリングシート(回答)');
form.setDestination(FormApp.DestinationType.SPREADSHEET, ss.getId());
Logger.log('回答シート: ' + ss.getUrl());
}新しく作る場合は、前出のテンプレートの「回答をためるスプレッドシートも新規作成し、回答の保存先に設定する」の1行を依頼に入れておけば、ChatGPTが同じ処理をフォーム作成のコードに組み込みます。
集計でつまずきやすいのはチェックボックスの列
スプレッドシートには、1行目に設問、2行目以降に1回答ずつ並びます。ラジオボタンの設問はセルに1つの回答が入るので数えるだけですが、チェックボックスの設問は、選ばれた選択肢が1つのセルにカンマ区切りでまとめて入ります。そのため、選択肢ごとに数えるときは「その語を含むセル」を数える式にします。列の位置は自分のシートに合わせて読み替えてください。
ラジオボタンの集計(D列が「業務状況について近いもの」の場合)
=COUNTIF(D:D, "やや厳しい")
チェックボックスの集計(E列が「感じている課題」の場合)
=COUNTIF(E:E, "*業務量*")
回答数(A列のタイムスタンプが入っている行の数)
=COUNTA(A2:A)選択肢ごとの件数を別シートに並べておけば、グラフの挿入で棒グラフにでき、回答が増えると自動で更新されます。
自由記述をAIでまとめるときの注意
自由記述が多いアンケートは、AIに分類させると読み込みが速くなります。ただし、回答シートには氏名・メールアドレス・所属など個人を特定できる情報が入りがちです。株式会社スリスタの調査では、業務でAIを使った際の事故・ヒヤリハットのうち、最も多かったのが「機密情報・個人情報をAIに入力してしまった」で37.3%でした(出典:株式会社スリスタ『企業の生成AI活用実態調査2026』(n=400)、業務AI事故・ヒヤリハット実態2026)。AIに渡す前に、個人を特定できる列を削除したコピーを作り、そのコピーだけを渡してください。
表データをAIで集計・検算する詳しいやり方は、ClaudeでExcel・CSVを分析する方法で解説しています。
動画で学ぶ
実際の操作画面つきで、ChatGPTへの依頼からGASの実行、出来上がったフォームの確認までを通しで解説しています。
【ChatGPT×GAS】Googleフォームを一撃で作る方法|アンケート作成を自動化
あわせて読みたい関連記事
ChatGPTに業務用のコードや指示文を作らせる場面では、指示の書き方と誤りの確認方法を押さえておくと、フォーム作成以外にも応用できます。
仕事で使えるプロンプトの書き方:再現性を上げる6要素と業務別テンプレートを解説しています。
ChatGPTでシフト表を作る指示文:希望休を反映させる書き方を解説しています。
ClaudeでExcel・CSVを分析する方法:集計とグラフのプロンプト、検算のやり方を解説しています。
AIのハルシネーション対策:業務で誤情報を出さないための7つの仕組みを解説しています。
おすすめの無料ドヤAIサービス
フォームの作成や集計のように、ChatGPTで手順を作れる業務はほかにもあります。記事作成・資料作成・営業リストなど用途別のAIツールは、ドヤAIのツール一覧から無料プランで試せます。
よくある質問(FAQ)
Q. プログラミングの知識がなくても大丈夫ですか?
大丈夫です。コードは読まずにコピーして貼り付けるだけで動きます。ただし、貼り付ける場所(Google Apps Scriptの新しいプロジェクト)と、保存してから実行するという順番だけは覚えておいてください。
Q. 会社のGoogleアカウントで使えますか?
組織の設定によってはGoogle Apps Scriptの利用や外部連携が制限されている場合があります。実行時にエラーが出る場合は、情報システム部門に利用可否を確認してください。
Q. 作ったフォームの回答はどこに溜まりますか?
通常のGoogleフォームと同じで、フォームの回答タブとスプレッドシートに蓄積されます。この作り方をしたからといって、回答の扱いが変わることはありません。
Q. 社外の相手に送るアンケートにも使えますか?
使えますが、個人情報を集める場合は通常どおり利用目的の明示や社内規程の確認が必要です。フォームの作り方が変わっても、収集する情報の扱いに関するルールは変わりません。
Q. 設問を大幅に変えたくなったら作り直しですか?
数問の修正なら編集URLから直すほうが速く、構成ごと変えるならChatGPTに依頼し直して新しいフォームを作るほうが速いです。目安として、半分以上の設問を入れ替えるなら作り直しをおすすめします。
Q. ChatGPT以外の生成AIでも同じことはできますか?
できます。この方法でAIが担うのは、設問からGASのコードを書く部分だけです。GeminiやClaudeなどに同じ依頼文を渡しても、Apps Scriptに貼って実行する手順は変わりません。どのAIを使う場合も、存在しないメソッドが混ざることがあるので、エラーが出たら公式リファレンスで確認してください。
Q. 実行するたびにフォームが増えてしまうのはなぜですか?
コードの中の FormApp.create が、実行のたびに新しいフォームを作る命令だからです。既存のフォームを直したいときは、もう一度実行するのではなく編集URLから直します。誤って複数できた場合は、Googleドライブから不要なものを削除してください。
まとめ:作成を10分にして、回収に時間を使う
ChatGPTにアンケートの中身とGASでの生成を依頼し、返ってきたコードをGoogle Apps Scriptに貼って実行する。これだけでGoogleフォームが出来上がります。同じチャットで印刷用の画像も作れば、Web版と紙版が同時に揃います。
フォーム作成は、時間はかかるのに成果に直結しない作業の典型です。ここを10分に圧縮して、浮いた時間を「どう回収するか」「集まった声をどう使うか」に回してください。アンケートの価値は、作る速さではなく、集まった後の使い方で決まります。


