毎日のレッスンが回る仕組み——データベースを捨てた話
AIドリルキットの技術的な中身を、エンジニアでない人にも追える粒度で書く。設計の結論を先に言うと——この規模の学習システムに、データベースは要らなかった。
構成はこれだけ
- フロント: ブラウザで動くレッスン画面(React)。問題データは事前に作られた静的な JSON ファイルとして配信される
- 記録: 解答はまずブラウザ内(localStorage)に即時保存され、裏でクラウドのストレージ(Cloudflare R2)へ非同期に送られる
- サーバー: API は4つだけ。健康確認、記録の追記、状態の読み出し、そしてスケッチゲートのAI判定。以上
問題を「その場でAIが生成する」のではなく、前日に生成・検証を済ませた問題を静的ファイルで配るのがポイントだ。学習者が解いている瞬間にAIは介在しない。だから表示は速く、AIの気まぐれで本番が壊れることもない。生成と検証は、失敗してもやり直せる「前日の仕事」に隔離してある。
データベースを廃止した
初期にはクラウドのデータベース(Cloudflare D1)を使っていたが、運用の途中で廃止し、追記だけの生ログ(JSONL)一本に切り替えた。
理由は、個人で運用する学習システムの規模ではデータベースの管理コストが利益を上回るからだ。そして生ログには決定的な利点がある。集計や分析のロジックにバグが見つかっても、いつでも原点から作り直せる。加工済みのデータは加工時の間違いを永久に抱えるが、生の記録は裏切らない。
この「生ログを捨てない」という原則は、当初はスキーマ設計をさぼった手抜きだった。結果的に、この仕組みで最も正しかった判断のひとつになった。設計の美しさより、事故からの回復可能性。家庭で運用するものは、特にそうだ。
「昨日の間違い」が「今日の問題」になる
日次の運用はこう流れる。朝、AIエージェントが前日の解答ログを取得し、弱点プロファイルを更新する。どの領域が弱いか、どんな間違い方のパターンがあるか。それに基づいてその日のレッスン構成(復習・本編・弱点の混ぜ込み)を決め、問題を生成し、検証を通し、配信する。
大人がやることは、この仕組みが吐く分析を眺めて、たまに方針を調整することだけだ。毎晩教材をコピーして問題を選ぶ作業は、仕組みに移管された。時間の使い方は「作業」から「判断」に移る——このキットで一番変わるのは、たぶんそこだと思う。