PR

自分では1行もコードを書かずにAIにクイズを作ってもらった話

【広告】

普段は自分で書いたコードをAIに修正してもらっているのですが、今回は自分では1行もコードを書かずにAIにゼロからアプリを作ってもらう実験をしてみました。

今回は競馬の有馬記念に関するクイズをChatGPTに作ってもらいました。
欠点もあるのですが、まずまずの完成度のクイズがあっという間にできましたよ。

もうゼロから作る気力がなくなりそうです。

依頼内容

「有馬記念のクイズを作って」だけでは、理想のものは出てこないと思うので、ある程度細かく指示をしてみました。

競馬の有馬記念に関するクイズを10問作ってください。

  • HTML/CSS/JavaScriptで作る
  • 4択問題
  • 「スタート」ボタンをクリックすると1問目が表示
  • 問題の順番と選択肢の順番はランダム
  • 選択肢の1つをクリックすると正誤判定と「次の問題」ボタンを表示
  • 「次の問題」ボタンをクリックすると次の問題が表示、正誤判定と「次の問題」ボタンは消す
  • 10問答えたら正解数と「最初に戻る」ボタンを表示
  • 「最初に戻る」ボタンをクリックすると最初の画面に戻る

ChatGPTが作ったクイズ

自分で作るなら何時間もかかるものを、ChatGPTは一瞬で作りました。

下記はChatGPTが出したコードです。
クイズの問題におかしなものがありますが、アプリは正常に動いているようです。

自分では使ったことがないコードも書いてあり、意味もはっきりと分かりませんが、想定通り動いているので良しとします。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8" />
  <title>有馬記念クイズ</title>
  <style>
    body {
      font-family: sans-serif;
      max-width: 600px;
      margin: 40px auto;
      text-align: center;
    }
    button {
      padding: 10px 20px;
      margin: 10px;
      cursor: pointer;
    }
    .choice {
      display: block;
      width: 100%;
      margin: 8px 0;
    }
    #result {
      font-weight: bold;
      margin-top: 15px;
    }
  </style>
</head>
<body>

  <h1>有馬記念クイズ</h1>

  <div id="start-screen">
    <button id="startBtn">スタート</button>
  </div>

  <div id="quiz-screen" style="display:none;">
    <p id="question"></p>
    <div id="choices"></div>
    <p id="result"></p>
    <button id="nextBtn" style="display:none;">次の問題</button>
  </div>

  <div id="end-screen" style="display:none;">
    <p id="score"></p>
    <button id="resetBtn">最初に戻る</button>
  </div>

<script>
const quizData = [
  {
    question: "有馬記念が行われる競馬場は?",
    choices: ["東京競馬場", "中山競馬場", "阪神競馬場", "京都競馬場"],
    answer: "中山競馬場"
  },
  {
    question: "有馬記念が開催される月は?",
    choices: ["10月", "11月", "12月", "1月"],
    answer: "12月"
  },
  {
    question: "有馬記念の距離は?",
    choices: ["2000m", "2200m", "2400m", "2500m"],
    answer: "2500m"
  },
  {
    question: "有馬記念は次のうちどのレースに分類される?",
    choices: ["G1", "G2", "G3", "重賞ではない"],
    answer: "G1"
  },
  {
    question: "ファン投票で出走馬が決まることで有名なレースは?",
    choices: ["日本ダービー", "天皇賞(秋)", "有馬記念", "菊花賞"],
    answer: "有馬記念"
  },
  {
    question: "有馬記念の正式名称に含まれる言葉は?",
    choices: ["グランプリ", "チャンピオン", "クラシック", "マスターズ"],
    answer: "グランプリ"
  },
  {
    question: "有馬記念が創設された年は?",
    choices: ["1951年", "1956年", "1961年", "1966年"],
    answer: "1956年"
  },
  {
    question: "次の馬のうち、有馬記念を複数回制覇したことがあるのは?",
    choices: ["オルフェーヴル", "ディープインパクト", "キタサンブラック", "コントレイル"],
    answer: "オルフェーヴル"
  },
  {
    question: "有馬記念が行われるコース形態は?",
    choices: ["右回り", "左回り", "直線", "ダート"],
    answer: "右回り"
  },
  {
    question: "有馬記念の優勝馬に贈られる称号として正しいものは?",
    choices: ["年度代表馬", "最優秀スプリンター", "グランプリホース", "ダービーホース"],
    answer: "グランプリホース"
  }
];

let currentIndex = 0;
let score = 0;
let shuffledQuiz = [];

const startScreen = document.getElementById("start-screen");
const quizScreen = document.getElementById("quiz-screen");
const endScreen = document.getElementById("end-screen");
const questionEl = document.getElementById("question");
const choicesEl = document.getElementById("choices");
const resultEl = document.getElementById("result");
const nextBtn = document.getElementById("nextBtn");
const scoreEl = document.getElementById("score");

function shuffle(array) {
  return array.sort(() => Math.random() - 0.5);
}

document.getElementById("startBtn").addEventListener("click", () => {
  shuffledQuiz = shuffle([...quizData]);
  currentIndex = 0;
  score = 0;
  startScreen.style.display = "none";
  quizScreen.style.display = "block";
  showQuestion();
});

function showQuestion() {
  resultEl.textContent = "";
  nextBtn.style.display = "none";
  choicesEl.innerHTML = "";

  const currentQuiz = shuffledQuiz[currentIndex];
  questionEl.textContent = `Q${currentIndex + 1}. ${currentQuiz.question}`;

  const shuffledChoices = shuffle([...currentQuiz.choices]);
  shuffledChoices.forEach(choice => {
    const btn = document.createElement("button");
    btn.textContent = choice;
    btn.className = "choice";
    btn.addEventListener("click", () => checkAnswer(choice));
    choicesEl.appendChild(btn);
  });
}

function checkAnswer(selected) {
  const correct = shuffledQuiz[currentIndex].answer;
  if (selected === correct) {
    resultEl.textContent = "正解!";
    score++;
  } else {
    resultEl.textContent = `不正解(正解:${correct})`;
  }
  nextBtn.style.display = "inline-block";
}

nextBtn.addEventListener("click", () => {
  currentIndex++;
  if (currentIndex < shuffledQuiz.length) {
    showQuestion();
  } else {
    showResult();
  }
});

function showResult() {
  quizScreen.style.display = "none";
  endScreen.style.display = "block";
  scoreEl.textContent = `正解数:${score} / 10`;
}

document.getElementById("resetBtn").addEventListener("click", () => {
  endScreen.style.display = "none";
  startScreen.style.display = "block";
});
</script>

</body>
</html>

コピペしてカスタマイズすれば完成度をあげることができます。
クイズの問題を変える、デザインを変えるなど、いろいろ試すと面白そうです。

完成アプリ

ChatGPTが出したコードの挙動をチェックしてください。
デザインは地味すぎますが、クイズとしての機能は実装されています。

ChatGPTはクイズ作成が苦手?

ChatGPTが作った問題で微妙なものがいくつかあります。

question: “ファン投票で出走馬が決まることで有名なレースは?”,
choices: [“日本ダービー”, “天皇賞(秋)”, “有馬記念”, “菊花賞”],
answer: “有馬記念”

有馬記念のクイズなのに「有馬記念」が答えの問題を出すのは微妙です。

question: ‘有馬記念の正式名称に含まれる言葉は?’,
choices: [‘グランプリ’, ‘チャンピオン’, ‘クラシック’, ‘マスターズ’],
answer: ‘グランプリ’,

間違いではないようですが、正式名称を確認することができなかったので微妙です。

question: “有馬記念の優勝馬に贈られる称号として正しいものは?”,
choices: [“年度代表馬”, “最優秀スプリンター”, “グランプリホース”, “ダービーホース”],
answer: “グランプリホース”

グランプリ系の問題が2つあるのも微妙です。後から出てきた方は考えなくても答えがわかります。


やり直してもらってもあまりいい問題が出なかったので、ChatGPTはクイズの問題作りが苦手なのではないでしょうか。
指示を工夫すれば、いい問題を作ってくれるかもしれませんが。

問題は自分で考えた方がよさそうですが、AIを使えば作業時間が大幅に短縮できそうです。
それでいいのかは疑問ですが。

タイトルとURLをコピーしました