Google Apps ScriptとGoogleフォームのシステムを開発する コメントする / Google Apps Script / By Keita Yagi Google フォームはウェブベースのアンケート作成・管理ソフトウェアです。組織内外のアンケートやテスト・クイズの回答を集めたりお問合せフォームの代替としても活用することができます。回答はスプレッドシートに集計されるため、スプレッドシートの機能をうまく活用することで集計作業の効率化が行えます。中にはアドベンチャーゲームを作るといったツワモノもいたりします。実際に現場で使い込んでいこうとすると、例えばプルダウン項目が多量で手作業で入力(さらには更新)が面倒だとか、ちょこちょこつまづきポイントがでてきます。Google Apps Script(以下、GAS(ガス))を使えばこうした困り事も解決できます。GASを使ってGoogleフォームを操作するといった場合にどんなことができるのか?、というのが今回のエントリーの趣旨になります。Googleフォームについては以前にも投稿したエントリーがあるのですが、今回は公式リファレンスを確認しつつ動作イメージとともにやれるこをまとめていくといったことをしたいと思います。Google Apps Scriptを使ってGoogleフォームを使う場合の構造の把握実際にできることを確認していく前にGoogleフォームの構造についておさらいをしておきたいと思います。Googleフォームは以下の3つで成り立っています。FromAppFormItemそれぞれの要素の配置は以下の画像のようになります。 実際に意識することが多いのはフォーム上の要素である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をご利用になれたい方は、以下のメルマガ登録をお願いいたします。メルマガ登録特典としてファイルをシェアいたします! 読み込んでいます…