Google フォームはウェブベースのアンケート作成・管理ソフトウェアです。組織内外のアンケートやテスト・クイズの回答を集めたりお問合せフォームの代替としても活用することができます。回答はスプレッドシートに集計されるため、スプレッドシートの機能をうまく活用することで集計作業の効率化が行えます。中にはアドベンチャーゲームを作るといったツワモノもいたりします。
実際に現場で使い込んでいこうとすると、例えばプルダウン項目が多量で手作業で入力(さらには更新)が面倒だとか、ちょこちょこつまづきポイントがでてきます。Google Apps Script(以下、GAS(ガス))を使えばこうした困り事も解決できます。
GASを使ってGoogleフォームを操作するといった場合にどんなことができるのか?、というのが今回のエントリーの趣旨になります。Googleフォームについては以前にも投稿したエントリーがあるのですが、今回は公式リファレンスを確認しつつ動作イメージとともにやれるこをまとめていくといったことをしたいと思います。
Google Apps Scriptを使ってGoogleフォームを使う場合の構造の把握
実際にできることを確認していく前にGoogleフォームの構造についておさらいをしておきたいと思います。
Googleフォームは以下の3つで成り立っています。
- FromApp
 - Form
 - Item
 
それぞれの要素の配置は以下の画像のようになります。
															実際に意識することが多いのはフォーム上の要素であるItem(以下、アイテム)の部分かと思います。アイテムはいわゆる質問に該当します。質問には以下のようなものが使えますね。
- 記述式
 - 記述式(段落)
 - チェックボックス
 - ラジオボタン
 - プルダウン
 
Google Apps Scriptを使ってGoogleフォームを新規作成する
さて、何はともあれ、Googleフォーム自体を作成しないことには始まりません。Google Apps Script(GAS)でGoogleフォームを作ってみます。
ちなみに、今回はスタンドアロン型のスクリプトで開発を進めてみました。Google Apps Scriptの使い方のエントリーにも書きましたが、GAS作成時はスタンドアロン型かコンテナバインド型か(ウェブアプリ型)を決めて作っていくことになりますが、今回は様々なGoogleフォームを作っていくことを主眼にしたので、スタンドアロン型で進めることにした次第です。
話はそれましたが、下記がスクリプトを実行した前後比較です。
															
															今回はとりあえず空のフォームを作成しただけなので、ファイルを開くと下記のように何も設定されていません。
															次にGASを使って様々な選択肢や設定を追加してみます。今回は下記のような内容を反映してみました。
- チェックボックスの質問を任意のテキストで追加
 - ラジオボタンの質問を任意のテキストで追加
 - ページの切り替えの追加
 - 日付入力の質問を追加
 - 記述式の質問を追加
 
上記をGoogleフォーム作成と同時に実行すると下記のように反映されます。
															回答する際のGoogleフォームの方も確認すると下記のような形で表示されています。
															
															Google Apps Scriptを使ってGoogleフォームを作る場合に追加できる質問のまとめ
上記はサンプル的にGASで追加できる質問の一部を使いましたが、他にも下記のような質問を追加することができます(クラス名やメソッドは開発者向けの内容です)。
| 質問の種類 | クラス名 | 追加するメソッド | 
|---|---|---|
| グリッド型のチェックボックス | CheckboxGridItem | addCheckboxGridItem() | 
| チェックボックス | CheckboxItem | addCheckboxItem() | 
| 日付 | DateItem | addDateItem() | 
| 日付と時刻 | DateTimeItem | addDateTimeItem() | 
| 経過時間 | DurationItem | addDurationItem() | 
| グリッド型のラジオボタン | GridItem | addGridItem() | 
| プルダウン | ListItem | addListItem() | 
| ラジオボタン | MultipleChoiceItem | addMultipleChoiceItem() | 
| 記述式(段落型) | ParagraphTextItem | addParagraphTextItem() | 
| 均等目盛 | ScaleItem | addScaleItem() | 
| 記述式 | TextItem | addTextItem() | 
| 時刻 | TimeItem | addTimeItem() | 
Google Apps Scriptを使ってGoogleフォームの質問を変更(更新)する
質問は追加するだけでなく、変更することもできます。上記で作成したGoogleフォームの最後の質問の内容を変えてみます。
- 質問の「タイトル」を変更
 - 質問を「必須」にする
 - 説明テキストを追加
 
といったことをしています。左側がGoogleフォームの編集画面、右側がGoogleフォームの回答画面です。
															
															Google Apps Scriptを使ってGoogleフォームの質問を変更する際に利用する質問の種類のまとめ
今回、変更処理をするにあたっては、フォーム内の質問を全て取得し質問の種類が記述式のものを変更するといったことを行っています。質問の種類については公式リファレンスのEnum ItemTypeのページにまとまっています。
| アイテムの種類 | プロパティ名 | 
|---|---|
| チェックボックス | CHECKBOX | 
| グリッド型のチェックボックス | CHECKBOX_GRID | 
| 日付 | DATE | 
| 日付と時刻 | DATETIME | 
| 経過時間 | DURATION | 
| グリッド型のラジオボタン | GRID | 
| 画像 | IMAGE | 
| プルダウン | LIST | 
| ラジオボタン | MULTIPLE_CHOICE | 
| ページの開始 | PAGE_BREAK | 
| 記述式(段落型) | PARAGRAPH_TEXT | 
| 均等目盛 | SCALE | 
| セクションヘッダー | SECTION_HEADER | 
| 記述式 | TEXT | 
| 時刻 | TIME | 
| 動画 | VIDEO | 
| ファイルアップロード | FILE_UPLOAD | 
質問の変更(更新)は実務的にも利用するシーンが多い部分かと思います。
例えば、Googleスプレッドシートに質問のデータリストを用意して、更新するといったやり方が考えられますね。この場合、質問の種類やアイテムIDを取得して更新したい質問を指定して更新をかけるといったやり方になってくるかと思います。
Google Apps Scriptを使ってGoogleフォームで算数テストを作成する
また、質問ごとの設定は前述した内容以外にも公式リファレンスにあるものが利用できます。その中でも、教育や研修といった文脈ではテストの作成については利用ニーズが高そうです(Googleフォームのテストについては公式のヘルプページを参照いただければ幸いです)。
今回は簡単な足し算のテストを自動で作成するものを作ってみました。A+B = Xの数式について、AとBは1〜50のランダムな数値を生成し、Xについて4択で回答してもらうといったものです。スクリプトを実行すると、毎回異なる問題がでるイメージになります。
比較のために同じスクリプトで2つのフォームを作成それぞれ新規作成してみました。問題が異なっているのを確認できたので、うまくいっていそうですね。
															Google Apps Scriptを使ってGoogleフォームの回答を取得する
Googleフォームの既存の機能として、Googleフォームの回答をGoogleスプレッドシートに集計するというものがあります。これとは別に、新しいGoogleスプレッドシートを作成し、そちらに回答を書き出すといったことをやってみたいと思います。
既存の回答を集約したスプレッドシートを使っていくのでも基本は問題ないのですが、フォームのデータを使ってカスタマイズした分析データを作りたいとか他の処理と組み合わせたいといった場合に使えるのではないかと思います。
以下の画像では、先ほどの算数クイズに回答者2名がそれぞれ回答したという状況を想定しています(画像が長くなるので一部抜粋)
															上記の回答情報を書き出す「GAS_Form_Sample_Data」というGoogleスプレッドシートをGASを使って作成してみます。
															こちらのスプレッドシートを開くと、下記のように質問と回答をそれぞれ回答毎に羅列する形で出力させることができています。
															GASを使えばGoogleフォームのどの回答データをどのように出力させるかを自ら定義できるようになる、というわけです。
いかがでしょうか?この他にもできることは様々にあります。今後も定期的にこのブログでGASでできる様々なことをアップデートしていきます。
なお、上記で紹介したGoogleスプレッドシート/Google Apps Scriptをご利用になれたい方は、以下のメルマガ登録をお願いいたします。メルマガ登録特典としてファイルをシェアいたします!
