学習ドリル設計の教訓 — 「測定」と「練習」を分けないと数字が嘘をつく

学習ドリル設計の教訓 — 「測定」と「練習」を分けないと数字が嘘をつく

この記事について

資格試験のために単一HTMLの想起ドリルを自作した——その実装で踏んだ設計の落とし穴を、資格の中身から切り離して一般化する。

想起ドリルや間隔反復(SRS)を自作しようとしている人向けだ。結論を先に言う。「測定」と「練習」を同じ数字に混ぜると、その数字は嘘をつく。 自分の習熟度を見誤らせる罠が、素直に作ると3か所に仕込まれる。

罠その1: 解き直しを集計に混ぜると正答率が水増しされる

一番わかりやすい罠がこれだ。間違えた問題をもう一度解く。今度は正解する。この正解を、全体の正答率にそのまま足すとどうなるか。

答えを見た直後の正解は、「実力で解けた」のか「さっき見た答えを覚えていた」のか区別できない。区別できない正解を集計に入れると、正答率は実力より高く出る。80%あるように見えて、初見での実力は60%かもしれない。

対策はシンプルだ。「初見の回答」と「復習の回答」を別のカウンタで持つ。習熟度の指標にするのは初見のほうだけ。復習は練習として回すが、成績評価には混ぜない。

カウントの種類用途習熟度に使うか
初見の正誤実力の測定使う
復習の正誤定着のための練習使わない

罠その2: 出題と記録が別システムだと周回が数えられなくなる

次の罠は、出題を担うロジックと、成績を記録するロジックを別々に作ったときに起きる。両者が同じ「1周」の定義を共有していないと、こういう矛盾が出る。

320問解いたのに、システム上は「まだ1周していない」

理由は、出題側は「苦手だけ優先」で同じ問題を何度も出しているのに、記録側は「全問を1回ずつ通過したか」で周回を数えていたからだ。片方は延べ回数、片方はユニークな到達数を見ている。同じ言葉(1周)で違うものを数えていると、進捗が信用できなくなる。

教訓は「周回」「達成」「残り」といった指標を、出題と記録の両方が参照する単一の定義に寄せること。定義がシステムをまたいで二重化した瞬間、数字は静かにずれ始める。

罠その3: 減衰の無いフラグは「同じ問題ばかり」を生む

苦手フラグを「間違えたら付く/自分で克服ボタンを押すまで残る」で実装すると、真面目に苦手モードを回すほど、苦手プールに残った問題だけが延々と出続ける。飽きるし、他の問題に触れる機会が減る。

ここで効くのが連続正解による減衰=簡易SRSの考え方だ。

  • 苦手フラグを0/1のフラグではなく、優先度スコアとして持つ
  • 正解するたびにスコアを下げる(例: 連続正解でスコアを半減させる)
  • スコアが閾値を切ったら出題頻度を落とす

こうすると、まだ身についていない問題は高頻度で、克服しつつある問題は低頻度で出るようになる。「同じ問題ばかり出る」問題が、手動の卒業判定を待たずに自然に解消する。ただしフラグ自体の手動卒業は残しておく価値がある(罠その1と同じで、機械の判定を甘くしすぎない安全弁になる)。

まとめ

学習ツールを自作するときの一番の敵は、バグではなく自分を安心させる方向に嘘をつく数字だ。3つの教訓を一行ずつにするとこうなる。

  1. 復習の正解を実力の正答率に混ぜない(測定と練習を分ける)
  2. 「1周」の定義を出題側と記録側で1つに統一する
  3. 苦手は0/1フラグでなく減衰するスコアで持つ

測定を甘くすれば数字は気持ちよくなる。だが試験本番は、その水増しの分だけ容赦なく牙をむく。道具は自分に厳しく作れ、というのが今回の教訓だ。

更新履歴

  • 2026-07-05: 初稿