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

2025年5月12日月曜日

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


質問や選択肢をシャッフルする方法ついては以下のリンク先に書きました

画面上で設定するには上記の 1, 2 を組み合わせるだけですが

今回は Apps Script で実装する方法について書いていきます

上記の 3 と同じくテンプレートのフォームを用意して利用します



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


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


「質問の順序をシャッフルする」をオンにしておきます

設定 > 表示設定 > 質問の順序をシャッフルする

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

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

formName と questions の値も自身の環境にあわせて書き換えて

createQuizesFromShuffledTemplate() を実行すると

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



Code.gs
function createQuizesFromShuffledTemplate() {
const templateFormUrl = 'https://docs.google.com/forms/d/FORM_ID/edit';
const formName = 'New Shuffled Quiz';

const questions = [
{
title: 'What is the capital of Japan?',
options: [
{ text: 'Tokyo', isCorrect: true },
{ text: 'Osaka', isCorrect: false },
{ text: 'Kyoto', isCorrect: false },
{ text: 'Fukuoka', isCorrect: false }
],
correctFeedback: 'Correct!',
incorrectFeedback: 'Incorrect. The correct answer is Tokyo.'
},
{
title: 'What is the capital of Australia?',
options: [
{ text: 'Canberra', isCorrect: true },
{ text: 'Sydney', isCorrect: false },
{ text: 'Melbourne', isCorrect: false },
{ text: 'Brisbane', isCorrect: false }
],
correctFeedback: 'Correct!',
incorrectFeedback: 'Incorrect. The correct answer is Canberra.'
}
];

const templateFormId = FormApp.openByUrl(templateFormUrl).getId();
const templateFile = DriveApp.getFileById(templateFormId);
const copiedFile = templateFile.makeCopy(formName);
const form = FormApp.openById(copiedFile.getId());

form.setTitle(formName);
form.setIsQuiz(true);
form.setPublished(false);

const original = form.getItems(FormApp.ItemType.MULTIPLE_CHOICE)[0];

for (let i = 1; i < questions.length; i++) {
original.duplicate(); // 追加だけしておく
}

// すべてのMultiple Choice項目を取得(duplicateされたものを含む)
const mcItems = form.getItems(FormApp.ItemType.MULTIPLE_CHOICE);

questions.forEach((q, i) => {
const item = mcItems[i].asMultipleChoiceItem();

item.setTitle(q.title)
.setChoices(q.options.map(opt => item.createChoice(opt.text, opt.isCorrect)))
.setRequired(true)
.setPoints(10)
.setFeedbackForCorrect(FormApp.createFeedback().setText(q.correctFeedback).build())
.setFeedbackForIncorrect(FormApp.createFeedback().setText(q.incorrectFeedback).build());
});

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



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

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


フォーム編集画面


「質問の順序をシャッフルする」もオンになっています


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

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


フォームの回答画面



関連記事


Latest post

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

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