前回は、単語を思い出せないときの段階ヒントについて報告しました。

これまでのVer.2改善は、1回の授業(セッション)をどう安定させるかが中心でしたが、今回は視点を一段上げて、「1日の中で、複数の授業をどう組み立てるか」という、日次単位の設計に取り組みました。
1. きっかけ:3単語で、その日の学習が終わってしまった
ある日、AI家庭教師とのやり取りを見ていると、新出単語をわずか3語練習したところで、その日の学習が終わってしまいました。「もっと続けられるはずでは」と思い、原因をChatGPTに確認してみました。
2. 原因:「1セッションの上限」と「1日の学習量」が分離されていなかった
返ってきた分析は、明快でした。
現在のルールでは、「1セッションの上限」と「1日の学習量」が分離されていないことが主因です。
これまでのプロンプトには、new_words_max: 3 や max_new_words_per_lesson: 3 といった、「1セッションあたりの新出語は3語まで」というルールは存在していました。しかし、「1日に何セッション行うか」という、その上位の単位そのものが存在していなかったのです。
つまり、これまでは
1セッション = 最大3新出語
までしか定義されておらず、
1日 = 3セッション
という積み上げの発想が抜けていました。そのため、AIは3語を一通り終えた時点を「今日の区切り」と早合点しやすくなっていた、というのが原因でした。

3. 設計:「1セッションの上限」と「1日の目標セッション数」を別管理にする
対応方針もシンプルでした。これまでの「1セッション最大3新出語」という制約はそのまま維持しつつ、その上に「1日の目標セッション数(daily_session_target)」という、独立した新しい管理単位を追加するというものです。
Session 1 → 終了前復習 → Session 2 → 終了前復習 → Session 3 → 終了前復習 → その日の授業終了
標準は3セッションですが、これも固定ではなく、保護者が「今日は4セッション」「今後は5セッション」と指定できる設計にしました。セッション数を増やしても、1セッションあたりの新出語上限(3語)という安全弁は維持されるため、「増やしたら急に負荷が跳ね上がる」ということは起きません。理解が追いついていなければ、Adaptive Teaching(理解度に応じて内容を調整する既存のルール)が働き、実際の学習量は自動的に控えめになります。

4. 「セッションの区切り」と「1日の終わり」を、別の言葉として扱う
もう一つ重要な変更が、生徒の発言をどう解釈するかという部分です。これまでは「終わり」という意思表示を一括りに扱っていましたが、これを次のように区別しました。
| 生徒の発言 | 扱い |
|---|---|
| 「セッション終わり」「一区切り」 | 現在セッションの終了前復習 → 次のセッションへ自動的に進む |
| 「今日は終わり」「今日の授業終わり」 | 現在セッションの終了前復習 → その日の学習を終了 |
| AIが3語を終えた(生徒からの意思表示なし) | 自動的に終了前復習 → 目標セッション数に達していなければ、次のセッションを自動開始 |
| 目標セッション数に到達 | 「今日はここまでにする? もう少し続ける?」と確認 |
特に重要なのは、「3語終わっただけで『今日はここまで?』と聞かない」という点です。3語はあくまで1セッションの上限であり、1日の終了条件ではない——この区別を、プロンプトの中で明確に言葉にしました。
5. 追加の疑問:「今日は終わり」の後に「やっぱり続けたい」と言ったら?
設計を進める中で、もう一つ気になる点が出てきました。一度「今日は終わり」と言った後、子どもの気が変わって「やっぱり続けたい」と言ったら、どう扱われるべきかという疑問です。
ChatGPTに確認したところ、「続行扱いに戻せる設計が自然」という回答とともに、具体的なルールが提案されました。
- 「今日は終わり」は、その時点での終了の意思として扱い、現在のセッションの終了前復習を済ませて、その日の学習を一度終える
- 同じ日のうちに「やっぱり続けたい」という明確な意思表示があれば、それまでの完了セッション数はそのまま保持した状態で、新しいセッションとして再開する
- すでに完了したセッションを開き直したり、完了数をゼロに戻したりはしない
例えば、目標3セッションのうち2セッションを終えたところで「今日は終わり」となり、その後「やっぱり続けたい」となった場合は、新しい3セッション目として再開されます。すでに3セッションの目標を達成していた場合でも、「続けたい」と言えば4セッション目(追加セッション)として続けられます。
6. 日次状態を「active / paused / ended」の3値で管理する
この「終了→再開」という行き来を壊れにくく扱うために、最終的には日次の状態そのものを、3つの値で管理する設計に落ち着きました。
- active:その日の学習が進行中
- paused:一時中断中(保護者モードなど、終了ではないが学習を進めない状態)
- ended:生徒の明示的な終了意思を受け、現在セッションの終了前復習まで完了して、その日の学習を一度終了した状態
ポイントは、endedは「その日は二度と再開できない」という意味ではないということです。同じ日付の中であれば、「やっぱり続けたい」「もう少しやる」「授業再開」といった明確な再開意思があれば、endedからactiveへ戻し、完了済みのセッション数を保持したまま新しいセッションを開始します。一方、日付が変われば、この日次進捗は0からリセットされます。

7. バージョン更新
| ファイル | 変更前 | 変更後 |
|---|---|---|
| 01_TeacherSystem | 2.5-project | 2.7-project |
| 05_RuntimeLog/LessonEnd | 2.3-project相当 | 2.5-project |
| 02_StudentStatus | 2.2-project相当 | 2.3-project |
今回は、間に2.6という中間版も存在しましたが(1日3セッションの基本設計まで)、「終了後の同日再開」への対応を経て、最終的に2.7へと更新されています。
8. 主要ファイルの中身
01_TeacherSystem_Project.md(該当箇所抜粋)
日次管理の核となる部分です。
### セッション境界・日次状態・セッション状態
「授業開始」は、その日の学習を開始または再開する合図です。
1日の学習は複数の独立したセッションで構成し、標準の目標セッション数は `daily_session_target = 3` とします。
この数は保護者の最新指示またはStudentStatusで4、5など任意の正の整数へ変更できます。
1セッションの新出単語上限は、従来どおりCurriculum・StudentStatus・最新の保護者指示のうち最も少ない値に従います。
`daily_session_target` は1日のセッション数の目標であり、1セッションの新出単語上限ではありません。
したがって「1セッション最大3新出語」と「1日標準3セッション」は別々に管理します。
### 日次状態 `daily_status`
その日の学習状態は、次の3状態だけで管理します。
- `active`: その日の学習が進行中。次の問題または次セッションへ進める状態
- `paused`: 一時中断中。保護者モードなど、終了ではないが学習問題を進めない状態
- `ended`: 生徒の明示的な日次終了意思を受け、現在セッションの終了前復習まで完了して、その日の学習を一度終了した状態
`ended` は「その日は二度と再開できない」という意味ではありません。
同じ日付内に生徒が「やっぱり続けたい」「もう少しやる」「授業再開」「続けたい」など明確な再開意思を示した場合は、
`daily_status: ended` から `daily_status: active` へ戻し、完了済みセッション数を保持したまま新しいセッションを開始します。
日付が変わった場合は、新しい日の状態として次のように初期化します。
- `daily_sessions_completed = 0`
- `daily_status = active`
- `session_number = 1`
### 各セッション開始時の状態
各セッション開始時に、内部で少なくとも次のセッション専用状態を新規に開始します。
- `session_number`: その日の何セッション目か。`daily_sessions_completed + 1` を基本とする
- `session_errors`: 現在セッションで不正解だった項目
- `session_hint_items`: 現在セッションで「分からない」「忘れた」と表明した項目、またはヒント・説明を使った項目
- `session_immediate_reviews`: 不正解後に行った即時復習とその結果
- `session_end_review_done`: 現在セッションの終了前復習を実施し、回答確認まで完了したか。各セッション開始時は必ず `false`
次の学習状態は最新の `STATUS_SNAPSHOT` から引き継ぎます。
- Mastery、weak_points、review_queue、XP
- `daily_date`、`daily_session_target`、`daily_sessions_completed`、`daily_status`
過去セッションで `session_end_review_done = true` であっても、新しいセッションでは必ず `false` から開始します。
### セッション間の自動継続
セッション終了後、`daily_sessions_completed < daily_session_target` かつ `daily_status = active` の両方を満たす場合は、
別の「授業開始」を要求せず、次セッションを自動的に開始します。
### 日次終了後の再開
生徒が「今日は終わり」などと明示し、終了前復習を完了して `daily_status = ended` になった後でも、
同じ日付内に生徒が明確な再開意思を示した場合は続行扱いに戻します。
再開時は次の処理を行います。
1. `daily_status = active` に変更する
2. `daily_sessions_completed` は減らさず、そのまま保持する
3. 完了済みの過去セッションは開き直さない
4. `session_number = daily_sessions_completed + 1` として新しいセッションを開始する
5. 新セッションの `session_end_review_done = false` とする
6. 新セッションでも、終了時には独立した終了前復習を必ず行う
以前の「今日は終わり」という意思は、新しい明確な再開意思によって解除されたものとして扱います。
### 日次目標は上限ではない
`daily_session_target` は標準学習量であり強制終了数ではありません。
目標到達後、生徒がさらに続ける意思を示した場合は追加セッションを行えます。
一方、生徒が「今日は終わり」と明示した場合は、目標未達でも現在セッションの終了前復習を完了したうえで、
その日の学習を `ended` にできます。
02_StudentStatus_Project.json(該当箇所抜粋)
保護者設定として、日次セッション数のカスタマイズ方法を持たせています。
"daily_session_policy": {
"default_sessions_per_day": 3,
"sessions_per_day": 3,
"customizable": true,
"minimum_sessions": 1,
"session_new_words_max": 3,
"auto_continue_between_sessions": true,
"target_is_not_hard_cap": true,
"student_can_end_day_early": true,
"rule": "1セッションの新出語上限と1日の目標セッション数を別々に管理する。各セッション終了前復習後、daily_status=activeかつ日次目標未達なら次セッションへ自動移行する。生徒が今日は終わりと明示し終了前復習を完了したらdaily_status=endedとするが、同日中にやっぱり続けたい等の明確な再開意思があればdaily_status=activeへ戻し、completed_sessionsを保持したまま新しいセッションを開始する。",
"daily_status_values": ["active", "paused", "ended"],
"same_day_resume_after_end": true,
"resume_creates_new_session": true,
"preserve_completed_sessions_on_resume": true,
"ended_is_reopenable_same_day": true
}
daily_progress(現在の日次進捗そのもの)は、STATUS_SNAPSHOT側で管理し、以下のような形で毎回引き継がれます。
"daily_progress": {
"date": null,
"target_sessions": 3,
"completed_sessions": 0,
"daily_status": "active",
"target_reached": false
}
05_RuntimeLog_LessonEnd_Project.md(該当箇所抜粋)
セッション完了・日次終了の確定条件が、今回一番細かく整理された部分です。
## セッション完了・日次終了の確定条件
### セッション完了条件
現在セッションは次をすべて満たした場合に完了とします。
1. セッション区切りに到達した、または生徒がセッション終了意思を示した
2. 現在セッションについてTeacherSystemで定めた終了前復習を1問実施している
3. 生徒の回答を確認している
4. 必要な間違い直しが完了している
5. 現在セッションの `session_end_review_done = true` である
セッション完了時に `daily_sessions_completed` を1増やします。
その結果 `daily_sessions_completed < daily_session_target` かつ `daily_status = active` の場合は、
日次終了ではなく次セッションへ進みます。
### 日次終了条件
1日の学習終了は次のいずれかで確定します。
1. `daily_sessions_completed >= daily_session_target` となり、生徒が終了を選択した
2. 生徒が目標未達でも「今日は終わり」など日次終了意思を明示し、現在セッションの終了前復習を完了した
`daily_session_target` 到達だけでAIが一方的に終了してはいけません。
到達時は「今日はここまでにする? もう少し続ける?」と確認できます。
3新出語を終えたこと、1つの語彙セットを終えたこと、15分程度経過したことだけでは日次終了条件になりません。
### 日次終了後の同日再開
`daily_status = ended` の後、同じ日付内に生徒が「やっぱり続けたい」「もう少しやる」「授業再開」など
明確な再開意思を示した場合は、次のように更新します。
1. `daily_status = active`
2. `daily_sessions_completed` は保持
3. `target_sessions` は最新設定を保持
4. 新しい `session_number = completed_sessions + 1` を開始
5. 新セッションの `session_end_review_done = false`
6. `completed_sessions < target_sessions` なら `session_kind: target`
7. `completed_sessions >= target_sessions` なら `session_kind: extra`
完了済みセッションの `LESSON_RECORD` は変更しません。
LESSON_RECORDのフォーマットにも、session_number・daily_session_target・daily_sessions_completed_after_this・daily_status_after_this・session_kind(target/extra)が追加され、「その日、何セッション中の何セッション目だったか」が、後から必ず追えるようになっています。
まとめ:「1回の授業」の外側にある設計
これまでの改善は、1回のセッションの中の挙動(進行確認、復習のタイミング、単語のヒントの出し方など)を磨くものでした。今回は、その1回1回のセッションを、どう1日の中に積み上げていくかという、一段上のレイヤーの設計でした。
「3語終わったら、それで区切りにしてよいのか」「終わった後に気が変わったらどうするか」——これらは、実際に子どもと一緒に使ってみなければ気づけなかった問いです。プロンプト設計は、AIの挙動を直すだけでなく、「日々の学習というものを、どう単位で区切るか」という、教育そのものの設計にもつながっているのだと感じています。
これまでの試行錯誤の全体像は、【完全ガイド】塾なしで神奈川県公立高校に合格するためのAI活用法でご覧いただけます。


コメント