簿記3級コンテンツ全18セクション一括移行
朝、セクション2の商品売買からデータファイルを1つずつ手で確認していた。夕方にはサブエージェント6本が並列で走り、全18セクションの移行が完了していた。移行ガイドのmarkdownが3回書き換わり、BSPLページにMiller Columnsが載った。
セクション2: 商品売買の移行(手動で手順確立)
最初のセクションは手探りだった。旧プロジェクトのディレクトリ構造を開き、スライドデータの形式をひとつずつ読み取るところから始めた。
移行の4ステップ:
- コンテンツ調査: 旧プロジェクトのディレクトリを走査し、スライドJSONの構造・画像パス・メタデータの形式を特定
- データファイル作成: TypeScriptの型付きデータファイルに変換。スライドの配列、画像参照、解説テキストを1ファイルにまとめた
- TOC更新: 目次データにセクションを追加し、ナビゲーションツリーに反映
- ページ作成: Vue単一ファイルコンポーネントとして表示ページを作成
この4ステップが以降のセクション全てのテンプレートになった。最初に手で動かして型を決めておいたことが、後半の並列化につながった。
セクション3〜4: 画像欠損と空プレースホルダーの発見
セクション3(現金と預金)は67スライドを移行。画像の存在確認を走らせたところ、_2 サフィックス付きの画像ファイルが見つからなかった。旧プロジェクトまで遡って確認したが、そもそも旧環境にも存在しなかった。参考書の該当ページと照合して、欠損していても表示に支障がないことを確認した。
セクション4(手形)は93スライド。旧プロジェクトのデータファイルを開くと、中身が空のプレースホルダーが混ざっていた。移行時にそのまま持ち込むと表示が壊れるため、空エントリを除外するフィルタを追加した。
セクション5〜7: まとめセクションの分割パターン確立
セクション5(電子記録債権・債務)とセクション6(借入れ・貸付け)は、セクション2で確立した4ステップをそのまま踏襲してスムーズに移行が進んだ。
セクション7(土地・建物の賃貸借)で手が止まった。まとめセクションに複数グループの内容が1つに詰め込まれていた。そのまま移行すると、ナビゲーション上で「まとめ」をクリックしたときに異なるトピックが混在した長大なページが表示されてしまう。
解決策として、グループごとに分割して個別のセクションとして扱うパターンを採用した。旧プロジェクトの1まとめ = 新プロジェクトの複数セクション、という対応関係を移行ガイドに明記し、以降のセクションにも同じルールを適用した。
セクション8〜10: サブエージェント並列3本の初回バッチ
手動移行で手順が固まったので、サブエージェントによる並列実行に切り替えた。3本のサブエージェントが同時にセクション8・9・10を処理した。
各サブエージェントに渡した指示:
- 旧プロジェクトからスライドデータを読み取る
- 新環境用のデータファイルを生成する
- TOCを更新する
- ページコンポーネントを作成する
3セクションが同時に完了し、手動でやっていた頃の3倍の速度が出た。
セクション11〜18: 6本並列で一気に完走
残り8セクションは一気に片づけた。サブエージェントを6本起動し、セクション11〜16を並列処理した。
| バッチ | セクション | サブエージェント数 |
|---|---|---|
| 第1波 | 11〜16 | 6本 |
| 第2波 | 17〜18 | 2本 |
第1波の6本が走り終わったあと、残りのセクション17・18を2本追加で起動した。前半の手動移行で例外パターンを洗い出し済みだったため、サブエージェントが迷う場面はなかった。
全18セクションの移行が完了したとき、ターミナルのログに成功メッセージが18行並んだ。セクション2から数えて、手動3 → 並列3 → 並列6+2という段階的なスケールアップだった。
BSPLページのMiller Columns化
全セクション移行後、BSPLページ(貸借対照表・損益計算書)のナビゲーションをMiller Columns形式に変更した。
Miller Columnsは、macOSのFinderでカラム表示を選んだときの操作感と同じ。左のカラムで章を選ぶと中央にセクション一覧が現れ、セクションを選ぶと右にスライド一覧が表示される。3階層のカラムレイアウトで章→セクション→スライドと掘り下げていけるため、18セクション分のコンテンツを迷わず探索できる。
移行ガイドドキュメントの継続更新
セッション間で作業を引き継ぐための移行ガイドmarkdownを整備した。セクションが進むたびに、発見した例外パターンや注意事項を追記していった。
記録した主な知見:
_2画像の欠損は旧環境由来であること- 空プレースホルダーのフィルタ処理
- まとめセクションのグループ分割ルール
- サブエージェントへの指示テンプレート
次のセッションで別の作業者(あるいは未来の自分)が読んでも、同じ品質で移行を再現できる状態にした。
worktreeを使った並列セッション検討
今回のサブエージェント並列は同一ディレクトリ内で動かしたが、ファイル競合のリスクがある。gitのworktree機能を使えば、同一リポジトリの複数ブランチを物理的に別ディレクトリへチェックアウトできる。それぞれのディレクトリで独立したClaude Codeセッションを走らせれば、ファイルロックを気にせず並列作業ができる。
今回は検討のみで、実際の適用は次回以降に持ち越した。移行作業のように「触るファイルが重ならない」ケースではサブエージェント並列で十分だが、同じファイルを複数人で同時に編集するケースではworktreeが有効になりそうだ。
ずんだもん/VOICEVOX連携シナリオのドラフト
簿記3級チャプター3の概要を、ずんだもんが対話形式で解説するVOICEVOX台本のドラフトを作成した。2人のキャラクターが掛け合いで仕訳の流れを追う構成にした。
台本の構成:
- 導入: チャプターのテーマを1分以内で紹介
- 本編: 取引→仕訳→帳簿記入の流れを、質問と回答の往復で追う
- まとめ: つまずきやすいポイントを復習し、次のチャプターへつなげる
音声合成で再生したときのテンポを意識して、1セリフを2〜3文に収めた。長いセリフは聞いていて視線(意識)が迷子になるため、区切りを多くしてリズムをつけた。コンテンツ移行と組み合わせることで、スライド教材 + 音声解説のマルチチャネル展開が見えてきた。
振り返り
朝は1セクション移行するのに30分かかっていた。昼にはサブエージェント3本で3セクションを同時に処理し、夕方には6本並列で8セクションをまとめて流した。手を動かして手順を固め、繰り返しが見えた時点で並列化する。このリズムが1日で全18セクションを走りきれた理由だと思う。
旧プロジェクトの画像欠損や空プレースホルダーの発見は、移行作業の副産物だった。既存コンテンツの品質を棚卸しする機会にもなった。