テスト用のGoogleフォームをGASで自動生成できるコードを書きました。
資格の勉強会を行うにあたり、googleformを使ったテスト問題を作成していました。問題数が多く、手動でググールフォームをつくるのが大変でしたので、効率よく自動で生成できないか試行錯誤しました。イメージに近いものをつくることができました。その「Google Apps Script を使って、スプレッドシートから4択問題のgoogle formを自動で作成する方法」を紹介していきます。
#やりたいこと
・問題文と選択肢、解答などが入力されたスプレッドシートをもとにGoogleフォームを自動で生成すること
・配点、答え、必須チェックもフォームに登録すること。
#完成品
まず、完成形を紹介します。こちらです!
##スプレッドシート
問題文や選択肢など問題作成に関わる情報をまとめました。
##Googlgleフォーム(全体)
フォーム名、説明文、問題文、選択肢などスプレッドシートにまとめ情報が入ってますね!これを自動で生成しました。
###Googleフォーム(問題文選択肢の詳細部分)
細かく見ていきましょう。スプレッドシートの問題文・選択肢だけでなく、解答・配点・必須チェックの設定がされていますね!また、問題番号と選択肢番号も入れました。
###Googleフォーム(問題文選択肢の詳細部分 解答2つある場合)
解答が2つある場合もバッチリです!ラジオボタンでは、解答を1つしか設定できません。ので、解答が2つあるときは「チェックボックス」で問題を作成するようにしました。
###Googlgleフォーム(解答を設定する詳細部分 解答2つある場合)
配点・解答・フィードバック(?)の設定もでてきますね!
では、次から作成手順を見ていきましょう。
#作成手順
おおまかにまとめると、以下の通りです。
①スプレッドシートにテーブル構造を記述する
②GASでコードを書く
スプレッドシートと連動しているため、セルの指定を正しく行うことがポイントです。
##①スプレッドシートにテーブル構造を記述する
スプレッドシートに問題データを書いていきましょう。
セル | 記入内容 | 備考 |
---|---|---|
A列 | 問題番号 | |
B列 | 問題文 | |
C列 | 配点 | |
D列 | 正解数 | 1または、2が入る |
E列・D列 | 解答①・解答② | 正解の選択肢の番号が入る |
G~J列 | 選択肢 | |
K列 | フィードバック | 解答後に表示される文 |
C1 | フォームタイトル | |
C2 | フォームの説明文 |
2行に列の見出しが入ります。見やすいように色も変えました。また、シート名を付けましょう。今回は「第1回勉強会」とつけました。(シート名をもとにデータを取得するので、忘れずに!)
##②GASでコードを書く
①で記入したスプレッドシートから、コードを書くエディタを開きます。
「ツール」→「スクリプトエディタ」を押下します。
↓のような画面になればOKです。この画面にGASを記入していきます。
以下のコードを記入しましょう!(コードの解説をすると長くなってしまうので、参考にしたサイトを参照してください)
function makeForm() {
//シートの読み取り
var activeSheet = SpreadsheetApp.getActive().getSheetByName('第1回勉強会');
//フォーム名と説明文を取得し、フォームを作成
var formTitle = activeSheet.getRange(1,3).getValues();
var formDescription = activeSheet.getRange(1,4).getValues();
var form = FormApp.create(formTitle);
form.setDescription(formDescription);
//クイズモードに設定
form.setIsQuiz(true);
//問題データを読み取り
var lastRow = activeSheet.getLastRow();
var lastColumn = activeSheet.getLastColumn();
var qestionList = [];
qestionList = activeSheet.getRange(3,2,lastRow-2,lastColumn-1).getValues();
//問題文・選択肢を作成
for(var i = 0 ; i < qestionList.length ; i++){
var choices ;
var type = qestionList[i][2];
//正解の数によってラジオボタンまたは、チェックボックスに形式を変える
switch(type){
case 1:
//ラジオボタンの作成
var item = form.addMultipleChoiceItem();
//選択肢と解答の番号を取得
choices = [
item.createChoice('1.' + qestionList[i][5],qestionList[i][3]==1),
item.createChoice('2.' + qestionList[i][6],qestionList[i][3]==2),
item.createChoice('3.' + qestionList[i][7],qestionList[i][3]==3),
item.createChoice('4.' + qestionList[i][8],qestionList[i][3]==4)
];
break;
case 2:
//チェックボックスの作成
var item = form.addCheckboxItem();
//選択肢と解答の番号を取得
choices = [
item.createChoice('1.' + qestionList[i][5],qestionList[i][3]==1 || qestionList[i][4]==1),
item.createChoice('2.' + qestionList[i][6],qestionList[i][3]==2 || qestionList[i][4]==2),
item.createChoice('3.' + qestionList[i][7],qestionList[i][3]==3 || qestionList[i][4]==3),
item.createChoice('4.' + qestionList[i][8],qestionList[i][3]==4 || qestionList[i][4]==4)
];
break;
default:
break;
}
//問題文・選択肢・配点・必須をセットする
item.setTitle( (i+1) + '.' + qestionList[i][0]);
item.setChoices(choices);
item.setPoints([qestionList[i][1]]);
item.setRequired(true);
//フィードバックをセット
item.setFeedbackForCorrect(FormApp.createFeedback().setText(qestionList[i][9]).build());
item.setFeedbackForIncorrect(FormApp.createFeedback().setText(qestionList[i][9]).build());
}
}
エディタに記入すると、以下のようになりますね!(一部抜粋+説明付き)
エディタにコードを記入したら、「保存ボタン」で保存し、「実行ボタン」を押して動かしてみましょう!
「権限の確認」を押下後、「アカウント選択」画面でスプレッドシートの持ち主のアカウントを選択します。
「Googleアカウントへのアクセスをリクエストしています。」という画面が表示されたら、「許可」を押しましょう。
無料のGmailアカウント(~@gmail.com)を使っている方は承認のフローが異なるので注意しましょう。以下のサイトを参照してください。
【初心者向けGAS】スクリプト実行時の「承認」でびっくりしないために
コード実行後、エディタに「実行完了」と実行ログが表示されればOKです!
エラーが発生している場合は、エラー文が表示されます。
エディタで「実行」すると、「マイドライブ」直下に作成したGoogleFormが表示されます!自動で生成されていますね!!(一部抜粋↓)
#おまけ
スプレッドシートから、GoogleFormを自動生成しましたが、このフォームで実際にテストを行うので行うのであれば、追加設定を行うと良いかもです!
私のおすすめの設定は以下の4つです!
①「メールアドレスを収集する」
②「別の回答を送信するためのリンクを表示」
③成績の表示>「送信直後」
④回答者が表示できる項目>「不正解だった質問」「正解」「点数」
設定方法は以下のサイトを参照してください。
Google フォームでテストを作成、採点する
#おわりに
最初は手動で行っていたフォーム作成もコードを書いて、時短できました。どうやったら、効率よくできるかという視点も大事ですね。正解を設定する部分の実装がうまくできず苦戦しましたが、イメージに近いものを表現することができました。この記事が参考になったという方がいらっしゃいましたら、うれしいです。
最後まで読んでいただいた方、ありがとうございました。
#参考文献
【SpreadSheetからGoogleForm作成】四択問題をGASで自動生成できるようにしたい。
GASでSpreadsheetを操作する自分的ベストプラクティス
Googleスプレッドシートに並べた二択クイズをGoogleフォーム化する
GAS(GOOGLE APPS SCRIPT)で スプレッドシートからフォームを作る③
GASでGoogleフォームにラジオボタンの質問を追加する方法
Google Apps Scriptで、小テストをぼこぼこ作る①
GASでGoogleフォームを作成する最も簡単なスクリプト