開発日誌

AIと見直した電気工事士クイズ開発記1:同じ問題が出る理由を検証した

📅 2026年5月15日⏱ 読了約5分✍️ 資格トレイン編集部

第二種電気工事士アプリを作っていて、最初に気になったのは「同じ問題が出てくる」という感覚でした。システム上は別の問題として扱っていても、学習者から見れば同じ問題に見える。ここを放置すると、問題数を増やしても学習体験は良くなりません。

そこでAIと対話しながら、単に「問題を増やす」のではなく、まず重複の正体を調べることにしました。

最初の違和感

「クイズを始める」を押すと、20問のランダムクイズが出ます。理屈としては、過去に出た問題を避けながら次の20問を出すようにしたい。しかし実際に解いていると、同じような問題が何度も出てくる感覚がありました。

最初は、履歴の保存ができていないのではないかと疑いました。ブラウザを閉じると記録が消えるのか、localStorageに残るのか、同じ問題IDを避けているのか。このあたりをAIに確認しながら、コードを追っていきました。

AI的には違うが人間には同じ

調べていくと、問題は単純なID重複ではありませんでした。問題文が少し違う、数値が違う、選択肢の順番が違う。データとしては別物です。

しかし学習者の感覚では、問われている論点が同じなら「また同じ問題だ」と感じます。たとえば、同じ公式を使う計算問題で数値だけが違う場合や、接地抵抗の数字を問う問題が何度も出る場合です。

ここで重要だった気づき:アプリにとっての重複と、学習者にとっての重複は違う。問題IDだけでは、体感重複は防げない。

出題履歴の扱い

出題履歴はブラウザのlocalStorageに保存する方針にしました。つまり、ブラウザを閉じても通常は残ります。ただし、別端末・別ブラウザ・プライベートブラウズ・ユーザーがストレージを削除した場合は別です。

この仕様は、ログインなしの無料学習アプリとしては現実的です。サーバー側に履歴を保存しないのでコストを抑えられますし、個人情報を扱う範囲も小さくできます。

duplicateGroupという考え方

そこで導入したのが、duplicateGroupという考え方です。完全に同じ問題ではなくても、同じ学習論点の問題には同じグループ名を付ける。ランダム20問では、同じグループができるだけ近くに出ないようにする。

これにより、選択肢の順番だけが違う問題、数字だけが違う問題、表現だけが違う問題を「同じ論点」として扱えるようになります。

学んだこと

この検証で、問題品質は「問題数」だけでは決まらないと分かりました。200問あっても、同じ論点ばかりなら学習者は飽きます。逆に、数が少なくても論点が整理されていれば、学習効果は高くなります。

AIとの対話で良かったのは、私が感じた違和感を「仕様の問題」と「データ品質の問題」に分解できたことです。ここから、アプリの改善方針ははっきりしました。問題を増やす前に、まず重複を見える化する。これが最初の一歩でした。

続きでは、過去問アプリを作るうえで避けて通れない著作権リスクについて整理します。

第2回を読む