Apps Scriptリファレンス: Apps Script Reference |障害・課題追跡: IssueTracker |Google Workspace: Status Dashboard - Summary

2025年5月12日月曜日

Google Formsで選択肢の順番を毎回シャッフルしたい(Apps Script)


Googleフォームの選択肢をシャッフルする方法について


今回は Apps Script での作成方法について書いていきます

上記のリンク先にも書きましたが Apps Script だけでは実現できないため

ここでは事前に「選択肢の順序をシャッフルする」をオンにしたフォームをテンプレートとして用意します

そのテンプレートをコピーして内容を上書きする方法について書きます



テンプレートとして用意するフォーム

右下の︙メニューで「選択肢の順序をシャッフルする」を選択しておく

そのテンプレートフォームの編集画面でURLをコピーして

下記 Coge.gs の templateFormUrl を書き換えます

formName からincorrectFeedback の値も自身の環境にあわせて書き換えて

createQuizFromShuffledTemplate() を実行すると

テンプレートが複製されて指定した内容に書き換えられたフォームが作成されます



Code.gs
function createQuizFromShuffledTemplate() {
const templateFormUrl = 'https://docs.google.com/forms/d/FORM_ID/edit';
const formName = 'New Shuffled Quiz';
const question = 'What is the capital of Japan?'
const optionsWithAnswer = [ // 選択肢と正誤情報
{ text: 'Tokyo', isCorrect: true },
{ text: 'Osaka', isCorrect: false },
{ text: 'Kyoto', isCorrect: false },
{ text: 'Fukuoka', isCorrect: false },
];
const correctFeedback = 'Correct!';
const incorrectFeedback = 'Incorrect. The correct answer is Tokyo.'

const templateFile = DriveApp.getFileById(FormApp.openByUrl(templateFormUrl).getId());
const copiedFile = templateFile.makeCopy(); // テンプレートフォーム全体をコピー
copiedFile.setName(formName);// ファイル名
const form = FormApp.openById(copiedFile.getId());
form.setTitle(formName);// フォーム名
form.setIsQuiz(true);
form.setPublished(false);

// シャッフル設定ONの質問(1問目)を取得して上書き
const item = form.getItems(FormApp.ItemType.MULTIPLE_CHOICE)[0].asMultipleChoiceItem();
item.setTitle(question)
.setChoices(optionsWithAnswer.map(opt => item.createChoice(opt.text, opt.isCorrect)))
.setRequired(true)
.setPoints(10);
item.setFeedbackForCorrect(FormApp.createFeedback().setText(correctFeedback).build());
item.setFeedbackForIncorrect(FormApp.createFeedback().setText(incorrectFeedback).build());

Logger.log('Form created: ' + form.getEditUrl());
}

実行後に出力されたフォームのURLにアクセスすると

以下のように「選択肢の順序をシャッフルする」がオンになったフォームが開きます



フォームの編集画面

プレビューで回答画面を開いてみると

開く度に選択肢の順序がシャッフルされて表示されます


フォームの回答画面



Tips

Latest post

Google Formsでスプレッドシートに用意した質問を読み込んでみる(クイズ対応)

今回はGoogleフォームでスプレッドシートからデータを読み込んでクイズを作ります 事前に「質問・選択肢・フィードバック」をスプレッドシートに入力して それを読み込んでクイズモードのフォームを作ってみます 事前に用意するスプレッドシートの構造 A列に質問 B列に選択肢 先頭が正解...