dfejza.com
制作物一覧
Web

ジャパン・メモリー・アトラス

公開中· アルファ

日本の地理を学ぶ間隔反復クイズ。47都道府県と東京23区のすべてに対応。インタラクティブな地図上で解答し、正解するたびに地図に痕跡が残り、習得状況を記録する自分だけの地図になります。適応型レビューが苦手な地域を優先的に出題。

TypeScriptReactNext.jsts-fsrsSVG

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がローディングスピナーで固まらないようにします。