ジャパン・メモリー・アトラス
公開中· アルファ日本の地理を学ぶ間隔反復クイズ。47都道府県と東京23区のすべてに対応。インタラクティブな地図上で解答し、正解するたびに地図に痕跡が残り、習得状況を記録する自分だけの地図になります。適応型レビューが苦手な地域を優先的に出題。
AI生成: この技術解説はプロジェクトのソースコードからAIが作成したもので、不正確な記述を含む場合があります。
ジャパン・メモリー・アトラスは、日本の地理を学ぶための間隔反復クイズです。47都道府県と東京23区のすべてに対応しています。解答はインタラクティブなSVG地図上で行います。地図が地域をハイライトして名前を選ぶか、名前を表示して該当する地域をクリックします。各地域はFSRSアルゴリズムでスケジューリングされるフラッシュカードであり、進捗はすべてブラウザのlocalStorageに保存されます。アカウントもサーバーもありません。現在ライブで利用可能ですが、ステージはアルファです。
アーキテクチャ
2つのデッキ(都道府県と東京23区)は単一の createQuizStore ファクトリから生成され、それぞれが persist ミドルウェアでラップされたZustandストアとして、別々のlocalStorageキーに紐づきます。スケジューリングは ts-fsrs に委ねています。FSRSの Card オブジェクトは JSON.stringify では失われる Date フィールドを持つため、各カードは書き込み時にISO文字列へシリアライズし、読み込み時に再構築します。ストアはデータにバージョンタグを付与し、スキーマ更新時には migrate ステップがカードをリセットします。
インタラクティブSVG地図 ◀── クリック判定 ── 地域ジオメトリ
│
│ 解答(正解 / 不正解)
▼
┌─────────────────────────────────────────────┐
│ クイズストア(Zustand + persist) │
│ 地域別カード · 解答履歴 · 統計 │
└─────────────────────────────────────────────┘
│ │
▼ ▼
ts-fsrs(スケジュール) localStorage(ISOシリアライズ)
│
▼
generateSession: 期限到来 → 新規 → 弱点スケジューリング
評価は二値です。正解はFSRSの Good、不正解は Again にマッピングされ、reviewCard がカードを fsrs.repeat に通して次回の期限日・安定度・難易度を保存します。解答時間は各カードの解答履歴に統計用(平均解答時間、ストリーク)として記録しますが、想起シグナルには意図的に反映していません。FSRSの4段階評価を2段階に集約しているため、遅くても正解ならパス扱いです。
generateSession はセッションを優先度順に並べます。すでにレビュー期限が到来したカードを最初に(期限日順で)配置し、次に未学習の新規カード、そのどちらでもセッションが埋まらない場合に限り、直近10回の正答率で順位付けした弱点カードにフォールバックします。イージーモードでは問題ごとにランダムな誤答選択肢を3つ追加します。出題方向はセッション開始時に選択され、その間は固定されます。
進捗トラッキング
地域ごとに、ストアは上限付きのローリング履歴(正誤、解答時間、モード)を保持します。直近の履歴が5回以上かつ正答率90%以上になると、その地域は「習得済み」と判定されます。これは47都道府県・23区の進捗バー、セッション数、ローカル日付に基づく連続日数(ストリーク)、そしてFSRSの安定度と直近の正答率から描く習得ヒートマップとして表示されます。すべてがクライアントサイドのため、再構築は防御的です。localStorageが破損していてもストアは自身を「ハイドレート済み」とマークし、UIがローディングスピナーで固まらないようにします。