─ どうやって「覚えた」「忘れた」を判断して、次に出す問題を決めているの? ─
このシステムは「長期的に覚える」ことを目的にしています。
ただ点数をつけるだけのミニテストではなく、
その子が今いちばん復習した方がいい問題を自動で30問集めてくる
のが特徴です。
生徒はゲームみたいに遊ぶだけで、実はかなりガチの記憶サポート理論が裏で動いています。
※この配分ロジックは next.php 側で制御しています。 「毎日Aばっかりでしんどい」「新しいのが全然出てこない」みたいな片寄りを防ぐためです。
1問ごとに、サーバーに次の情報が送られます:
その結果は user_progress というテーブル(学習記録)に入ります。
ここにはそのカードの「覚えやすさ」「次に出すべき日時」なども保存されます。
このシステムは「間隔反復(spaced repetition)」という学習法を採用しています。 これは、覚えてからちょうど忘れそうな瞬間にもう一度出すと、記憶が一番定着する という考え方です。
裏でやってることを、ざっくりいうと:
S」を持つ。これは「どれだけ長く覚えていられそうか」の数字。S は下がる。S が上がり、
「次は明日でいいよ」「次は3日後でいいよ」「次は1週間後でいいよ」というふうに間隔がどんどん伸びる。
逆に、間違えると 「またすぐ出すね(数分〜1日以内)」 みたいな短いスパンに戻ります。
各カードには「次に出す予定日時(due_at)」がついています。これは FSRS系アルゴリズム (忘却曲線ベースのスケジューラ)で計算されます。
それを使って「次は何日後にもう一回出すべきか?」を決めます。 めちゃ簡単に言えば、 たやすく正解できたカードは次の復習まで間隔が長くなるし、 怪しかったカードはすぐ戻ってくる。
技術的には、recallProb() で「今、思い出せる確率R」を推定し、
updateSD() で S/D を更新し、
nextIntervalDays() で「じゃ次は○日後」を決め、
それを due_at に保存しています。
たとえば1日サボると、復習タイミング(Aグループ)の問題がたまります。 でもこのシステムは 「今日いきなり200問」みたいな地獄にならないように、Aの出題数に上限をかけます。
つまり、次にログインしたときは 「絶対やらなきゃいけない復習」と「新しい問題」をほどよくミックスして30問だけ出します。 キャパオーバーにならないように設計してあります。
人の記憶は、覚えてすぐはよく覚えているけど、時間がたつと急に落ちます。 でも「忘れかけたタイミングでちょうど復習」すると、落ち方がゆっくりになっていきます。 これをくり返すと、同じ内容でもより長い間キープできるようになります。
これは医学・語学学習・資格試験などでよく使われていて、 「一気に100回見る」より「忘れそうな頃に数回見る」ほうが定着しやすい、という考え方です。 有名な単語帳アプリ(Ankiなど)と同じ系統の考え方です。
クラス全員に同じプリントを配って同じペースで復習させるのではなく、 生徒ごとに“必要そうなタイミング”だけを出すので、ムダ打ちが減ります。 これは家庭学習・すきま時間で特に効果があります。