カウントダウンから振り返りへ:JLPT Sprint Desk の学習ループ設計
JLPT 直前期の学習を、計画・記録・分析・バックアップまでつながる軽量な学習ダッシュボードとして設計したプロジェクト記録。
JLPT の直前対策で崩れやすいのは、「今日勉強したかどうか」だけではありません。勉強したあとに、時間はどこへ使われたのか、弱点は本当に補強されたのか、試験日が近づくなかで今日の計画はまだ妥当なのかを判断しにくいことです。
JLPT Sprint Desk は、その問題を中心に作った学習コックピットです。単なる todo list ではなく、「目標設定 → 自動計画生成 → 毎日の記録 → 振り返り分析 → バックアップ出力」をひとつのループにつなげ、感覚だけの努力を、データを見ながら調整できる状態に近づけます。

今日やるべきことを一目で見る
総覧ページの目的は、機能を並べることではありません。次の三つの質問にすぐ答えることです。
- 試験まであと何日あるのか
- 今日どれくらい勉強するべきか
- 次にどのページを開くべきか
スクリーンショットのサンプルでは、N1 試験まで残り 25 日、今日の目標は 120 分、最近の累計学習時間は 12.5 時間です。右側には 7 日間の傾向として、学習日数 6 日、投入時間 750 分、平均完了率 87% が表示されています。数字が学習そのものを代替するわけではありませんが、リズムが安定しているかはすぐ見えるようになります。
下部の「今日の学習ループ」は、昨日の復習、漢字・語彙、文法、読解、聴解、ミス原因の記録といった実行可能な単位に分けています。それぞれに時間予算があるので、一日の計画が「もっと勉強する」という曖昧な指示で終わりません。
計画はカレンダーではなく予算
計画ページでは、レベル、試験日、毎日の学習時間、弱点モジュール、教材の好みをもとに、14 日分を見渡せる学習計画を生成します。

このページで特に重要なのは「合理性チェック」です。サンプルでは、残り 25 日、平日 120 分、週末 210 分、読解・聴解・文法が弱点という条件から、次のような点を確認します。
- 一日の平均目標は足りているか
- 語彙と文法の完了まで何日必要か
- 復習期間が圧迫されていないか
- モジュール別の時間配分が偏っていないか
右側の学習予算グラフでは、聴解、読解、文法の割合が高くなっています。このプロフィールの弱点設定と一致しているため、配分の意図が一目で分かります。下には忙しい日や調子が悪い日のための最低実行版もあり、一日崩れただけで計画全体が壊れないようにしています。
記録は速く、あとで分析できる粒度にする
毎日の記録ページは、二分程度で入力できることを目標にしています。追うのは重要な項目だけです。モジュール別の時間、完了度、正答率、ミス原因、時間超過の理由、明日の最初の一歩。
この記録は、きれいな打刻を残すためではありません。後続の分析ページに材料を渡すためです。たとえば同じ 120 分の学習でも、80 分が読解の設問定位で消えていたなら、必要なのは「もっと頑張る」ではなく、「読解タスクを小さくして、時間制限つきの定位練習を入れる」という判断です。
振り返りで努力を判断に変える
振り返り分析ページは、このプロジェクトのなかで最もコックピットらしい画面です。先に結論を出し、そのあとでグラフを見せます。

サンプルデータからは、次のことが読み取れます。
- 直近 7 日のうち記録ありは 6 日で、1 日分の欠落がある
- 7 日間の投入時間は 750 分で、目標 840 分には少し足りない
- 平均完了率は 87%、計画健康度は 86
- 平日の平均は 134 分で、120 分目標を上回っている
- 週末の平均は 80 分で、210 分目標を大きく下回っている
ここから出る判断は明確です。平日はよいペースですが、週末が想定した増量を担えていません。実際の試験対策では、「最近まあまあ」という感覚より、この具体性のほうがずっと役に立ちます。
本当に時間を使っているモジュールを見つける
モジュール投入の分析では、最近の記録を漢字、語彙、文法、読解、聴解ごとに集計します。

スクリーンショットでは、750 分のうち読解が 220 分で最も多く、文法が 175 分、聴解が 160 分と続きます。弱点に時間を使えていることが分かる一方で、漢字は 50 分しかなく、長期的には新しい弱点になり得ることも見えてきます。
ミス原因の分布では、「なぜ間違えたのか」を別軸で見ます。サンプルでは「定位が遅い」が 4 回、「キーワードの聞き漏れ」が 3 回、「接続形式」が 2 回出ています。次の計画修正は記憶に頼らず、頻度の高い原因から直接組み立てられます。
技術は軽く保つ
技術スタックはかなり抑えています。
- React 19 + TypeScript + Vite
- 静的デプロイに向いた React Router Hash Router
- UI フレームワークなしの CSS 変数ベース
- 重いチャートライブラリではなく SVG の自作グラフ
- React Context + localStorage によるローカル保存
- 必要な場合だけ Supabase でクラウド同期
この取捨選択が気に入っています。デフォルトではデータがブラウザの localStorage に保存されるので、アカウントを作らなくてもすぐ使えます。複数端末で同期したいときだけ、自分の Supabase プロジェクトにつなげればよい。学習ツールとしては、この「ローカル優先、クラウド同期は任意」という形がちょうどよく感じます。
解いているのは学習不安ではなく、フィードバックの遅れ
JLPT の直前期で怖いのは、フィードバックが遅すぎることです。何セットも問題を解いたあとで聴解が補強されていないと気づいたり、試験一週間前になって新規学習が復習枠を押し出していると分かったりします。
JLPT Sprint Desk の考え方は、フィードバックを毎日に近づけることです。今日記録し、明日調整する。今週の偏りを見つけ、来週修正する。合格を代わりに約束するものではありませんが、準備過程の見えにくい部分を明るくし、それぞれの学習時間を見えるもの、説明できるもの、修正できるものにします。
私がいちばん価値を感じているのもそこです。学習を複雑にするのではなく、複雑な準備状態を、行動できるいくつかの判断へ圧縮することです。
この記事を楽しんでいただけましたか?
役に立った場合は、私の活動を支援することをご検討ください。