小学生向け理科教材に熱・光・音の8トピックを一括追加 — 生成・事実チェック・修正のエージェント並列パイプライン
やったこと概要
中学受験向け参考書をベースにした小学生向け理科学習教材のバッチ4を進めた。対象は熱・光・音カテゴリの残り8トピック(物のあたたまり方・熱の伝わり方・熱量・光の直進・反射・屈折・凸レンズ・虹と分散)。トピックごとに Vue SFC のセクション4本+クイズ10問を生成エージェントに書かせ、事実チェック→修正→表示確認→コミットまで一日で通した。
パイプラインの流れ
バッチ3までで固まった手順をそのまま回した。
- 生成: 生成エージェント8体(Sonnet 5)を並列で派遣。各トピック Vue 4本+クイズ10問。原文流用を検出する機械チェッカーに合格するまで書き直させる(大半は書き直し1回、凸レンズは2回)
- 登録: categories.ts と quizDataRegistry への一括登録はメインセッション側で実施。その前に、エージェントに禁止している categories.ts 直編集がないか、生成ファイルが実在するかを確認
- 事実チェック: トピックごとにチェックエージェントを派遣し、物理的な正しさと計算を検算させる
- 修正: チェック結果を修正指示として確定させてから、修正エージェントを並列起動
- 最終検証: チェッカー全体再実行 → テスト → dev サーバーでの表示確認
- 計画書更新とコミット
事実チェックの起動では8体のうち6体が立ち上がらず、30秒待ってリトライしたら全員動いた。完了通知が届くたびに「残り○体」と数えながら、集計表を埋めていく一日だった。
8トピックの成績表
生成時の書き直し回数と事実チェックの結果を並べると、どこで手がかかったかが一目で分かる。
| トピック | 生成(チェッカー) | 事実チェック | メモ |
|---|---|---|---|
| 物のあたたまり方 | 書き直し1回 | critical 1 / minor 2 | ぼう張率の記述が逆に読める |
| 熱の伝わり方 | 書き直し1回 | critical 0 / minor 3 | |
| 熱量 | 1発合格 | critical 0 / minor 3 | 2解法で独立検算・全問一致 |
| 光の直進 | 書き直し1回 | critical 3 / minor 5 | 点光源の定義矛盾・扇状の平行光線 |
| 光の反射 | — | critical 1 / minor 5 | 作図手順の光線が逆向き |
| 光の屈折 | 1発合格 | critical 5 / minor 6 | クイズ11問で上限超え報告 |
| 凸レンズ | 書き直し2回 | critical 0 / minor 3 | レンズ公式で自己検算済み |
| 虹と分散 | 書き直し1回 | critical 0 / minor 6 | 一般知識で補完した箇所を明示 |
生成時に一番粘った凸レンズが事実チェックでは無傷で、1発合格だった屈折が critical 5件と最多。生成時のチェッカー通過状況と物理的な正しさは相関しなかった。
SVG光路図に critical が集中した
事実チェックの集計は critical 10件 / minor 33件。critical の内訳は屈折5・直進3・あたたまり方1・反射1で、光の単元の SVG 図解に集中した。
- 点光源の定義が自己矛盾していて、平行光線のはずの図が扇状に開いていた(光の直進)
- 鏡像の作図手順で、光線の矢印が「目→鏡→物」と逆向きに描かれていた(光の反射)
- ぼう張率の大小関係が逆に読める記述(物のあたたまり方)
テキストと計算はプロンプトの検算義務でほぼ守られる(熱量のクイズは2解法で独立検算して全問一致)のに、SVG の光路や矢印の向きは生成時の検算をすり抜けて破綻する。この傾向がバッチ4ではっきり数字に出た。
修正はバッチ3の知見どおり「レビュー確定済みの修正指示を渡して1周で解消」方式。SVG 幾何の再計算を伴う4トピック(屈折・直進・反射・虹)はメインと同格のモデル、軽量修正は Sonnet に振り分けて9体並列で走らせた。屈折はスネルの法則で26項目を検算させ、凸レンズはレンズ公式で自己検算させて、全件1周で潰れた。
既存トピック2本の書き直しも並走
バッチ4の新規8本と並行して、以前に作った既存トピック2本(状態変化系と音系)の原文混入の書き直しも走らせた。どちらもチェッカー合格まで持っていき、状態変化系はテスト434件 pass、音系は計算の検算まで済ませた状態で完了報告が来た。新規生成と既存の手直しを同じ待ち行列に混ぜても、完了通知ベースで進める運びなら混乱しなかった。
スコープ外の発見: 既存クイズの設定流用
音系の書き直しを任せたエージェントから、担当外の既存クイズ2問が参考書と同一の問題設定(数値までそのまま)を流用しているという報告が上がってきた。機械チェッカーのゲートは通過するが、「数値・設定を必ず変える」というプロジェクトのルールに反する。修正バッチに混ぜて、花火とドローンを使った独自の設定に差し替えさせた。機械ゲートを通ることと、ルールを守れていることは別物だと再確認した。
最終検証でつまずいたところ
- 全テストを回したら31件失敗した。バッチ4起因か既存の失敗かの切り分けに入ったが、Git Bash の変数展開が干渉して確認コマンドが空振り。netstat に切り替えたら、前回セッションの dev サーバー残プロセスが2つのポートを占有しているのが見つかった。PID を指名して kill し、dev を起動し直したらページは全トピック 200 を返した
- 表示確認の途中でセッション上限に当たって強制停止(リセットは13時過ぎ)。再開したら表示確認エージェントも巻き添えで落ちていたので、起動し直した
- 最終的に対象10トピック(新規8本+原文混入で書き直した既存2本)すべてで表示確認が合格。セクション描画・クイズ動作・タブタイトル OK、コンソールエラー0件
計画書は途中経過の時点で一度「現在地」を更新しておいた。セッション上限で切られる日は、この途中セーブが効く。
そのままバッチ5(電気)へ
午後はバッチ4の知見をプロンプトに反映して、次のカテゴリ(電気7トピック)のバッチ5も同じパイプラインで完走させた。反映した知見は「クイズの answerIndex を0〜3に分散させる」明示指示(バッチ4では9問中9問が先頭選択肢に偏った)など。それでもバッチ5の事実チェックでは critical 7件が出て、今度は電流や回転の矢印の向きに集中した。円周上の接線矢印は、検算を義務付けてもまだ破綻しやすい。
一日の締めで dev サーバーを止め、ポート3000が解放されたのを確認してからセッションを閉じた。次のセッションは「dev 未起動」前提のクリーンな状態から始められる。
成果
- コミット5件(バッチ4を内容別に3件+バッチ5)
- 参考書ベースの101トピック中39本が実装済みに。熱・光・音と電気の2カテゴリが完成
学び
- テキストと計算はプロンプトの検算義務で守れるが、SVG の幾何(光路・矢印の向き)は生成時には守れない。「事実チェックで座標まで確定→修正エージェントに1周で適用」の流れを最初から工程に組み込むのが正解だった
- クイズの正解位置の偏りは、生成プロンプトに分散指示を1行足すだけで次バッチから直る。事実チェックの minor 指摘は次バッチのプロンプト改善ネタとして拾う
- 前回セッションの dev サーバー残プロセスがテストの切り分けを混乱させる。セッションの終わりにポートを解放しておくのが次の自分への礼儀