Git講座の第2〜4部をサブエージェント並列で量産:本物のGitとの照合、Codex指摘の再判定、音声合成をMacからWindowsへ

開発eurekapu-nuxt4

Git講座の第2〜4部をサブエージェント並列で量産した日

第2部の音声合成の依頼が MacBook に届いたのは、16時11分だった。 Windows 側では、届いた音声ファイルを1分おきに数える見張りが回り始めた。 待つ時間は最長4時間にした。 その間に、Windows では第3部と第4部の講義ノートを書き進めた。

第1部(38シーン)は、前日から組んできた画面再現エンジンでできていた(経緯はGit の画面再現と読み上げの記事)。 この日は、それを第2部から第4部まで広げた。

引き継ぎテキストで第2部から始める

14時36分のセッションは、Downloads に置いた第2部の引き継ぎテキスト(git-course-part2-handoff.txt)を渡すところから始めた。

最初の仕事は、エンジンにリモートの操作を足すことだった。 clone、push、fetch、pull の出力は本物の Git 2.50.1 で先に採取してあり、Claude Code にはそれに合わせて実装させた。 足した後で、第1部の38シーンを変更前と比べさせた。 端末の出力も状態も図の座標も、バイト単位で同じだった。

本物との照合は、差を1つ見つけた。 Git 2.48 以降は fetch で origin/HEAD が自動で作られるので、エンジンをそれに合わせた。 わざと入れた未対応の書き方(--allow-empty)は、照合で止まった。 照合が素通りしないことも、ここで確かめられた。

画面には、GitHub 側のグラフを手元のグラフの上に、列をそろえて並べた。 いちばん縦に長い場面も、0.89 倍の縮小ではみ出さずに収まった。

第2部の4回(2-1〜2-4)は、サブエージェント4体に並行で書かせた。 上がってきた原稿は、親のセッションで全数確認した。 2-1 の報告からは、エンジンの不具合が2つ見つかった(素の git branch に追跡ブランチが出る、git switch origin/memo の文言が違う)。 不具合は親のセッションで直した。

第2部は4回(14シーン)で、コミット b9c7dd59 に入れた。

第3部と第4部は音声を待つ間に書く

Mac への依頼を出した後、ローカルで第2部のページを開いて状況を尋ねた。 第2部は見えたが、第3部と第4部の講義ノートはまだ無かった。 そこは Claude Code の側で進められるはずだと伝えて、続けて着手させた。

第3部(merge と rebase)の進め方も、第2部と同じだった。 まず本物の Git で、fast-forward、マージコミット、コンフリクト、status の出力を採取させた。 1回目は成功時の行を取りこぼした(その行は stderr に出ていた)ので、stdout と stderr を同じ順で取り直させた。 照合の途中で、エンジンが元から余計な空行を入れていたことも分かった。 第1部の画面にも出ていた誤りで、これも本物に合わせて直した。

執筆はサブエージェントに任せた。 第3部の4体を走らせている間に、第4部の 4-3(worktree)のためのエンジン拡張を進めさせた。 並列は5体までに抑えた。 3-1 が終わって空いた枠で 4-1 と 4-3 を、3-3 が終わった枠で 4-2 を書かせ始めた。

親のレビューで引っかかったのは、次の4回だった。

  • 3-2:本文の崩れた1文を直した
  • 3-4:報告にあったエンジンの不足のうち4つを直した(置き去りのコミットの親の表示、照合でのコミット ID の読み替えなど)
  • 4-1:git branch -r --contains ID が、絞り込みではなくブランチを作ってしまっていた
  • 4-2:「右側の3つの箱」と書かれていたが、実際の画面では左側の図の下にあった

エンジンを何度か直したので、最後に全シーンを本物の Git とまとめて照合させた。 84シーンのすべてが一致した。 第3部と第4部の7回(32シーン)は、コミット 57ff73b1 に入れた。 push はまだしていない。

ここで次の引き継ぎテキスト(git-course-part3-4-handoff.txt)を書かせ、17時25分のセッションへ渡した。

Codex の重要度をどう扱ったか

コミットのたびに、Codex のレビューが走る。 この日は、Codex が付けた重要度をそのまま採らず、本物の Git で挙動を確かめてから扱いを決めた。

時刻Codex の指摘と重要度扱い
15:43high:上流が別名のブランチでも、引数なしの push が送信される一時シーンで本物と同じ結果になるのを確かめて直した。2回目のレビューは指摘なし
17:23critical 3件と high 1件(autostash の再適用、rebase 先と同名の追跡外ファイル、worktree 間で進行中の merge と rebase が漏れる)4件とも medium と判定した。84シーンのどれも通らない経路で、通るシーンを書けば照合で止まるため。次のセッションの宿題に回した
17:44critical:rebase でコミットを当て直すと、追跡外のファイルが消える本物の Git で確かめて直し、単体テストを1件足した
17:53high:止まった rebase で --skip が対象のコミットを飛ばさないGit 2.50.1 で測ると、本物も飛ばさずに同じエラーで止まった。該当なしと判定した

17時25分のセッションでは、宿題の4件を直して、一時シーンで本物と一致させた。 17:44 と 17:53 の指摘への対応も含めて、コミット 6bdf15ed に入れた。

朝にも、Git 講座がらみの high が1件あった。 8時57分のレビューで、差分の計算が同じ内容の行の削除を見落とす(a\na から a にすると削除が0行と判定される)と指摘された。 この連絡は、マインドマップを作業していた別セッションから、セッション間のメッセージで届いた。 受け取った朝のセッションは Git 講座の担当ではないので、連絡の指示どおり手を出さなかった。 9時04分の第1部のコミット 7ac8ba0f のメッセージには、行の差分を LCS(最長共通部分列)に置き換えて重複行を落とさないようにした、と書かれている。

同じ朝のセッションでは、Dependabot の対応について「自分は何を判断すればいいのか」「Codex にレビューさせると、どういう判断を求められるのか」も尋ねた。 返ってきた答えは、決めてほしいのは1つだけ、というものだった。

Mac に頼んだ音声のゆくえ

17時25分のセッションを始めた時点で、第2部の音声はまだ Mac から届いていなかった。 Mac には、先に入っていた別の講座の合成を終えてから取りかかるよう頼んであった。 そこで、Windows で合成する方針に切り替えた。 Mac には第2部の取りやめを連絡させ、1本(git-p21-clone)を試し合成してから残りを回させた。

合成の裏で、エンジンの宿題も片付けさせた。 合成は1本あたり約1〜2分かかった。

R2 へのアップロードは、1回目でつまずいた。 1本は 8/8 件上がったが、残り13本は上げ直すことになった。 原因は、ファイルの一覧を取る ls が末尾に / を付けていたことだった。 これを外して上げ直させ、第2部の119件について本番 CDN が 200 を返すことを確かめた。

拍の数にも食い違いがあった。 引き継ぎのメモには第2部が「129拍」とあったが、台本の書き出しでは119拍だった。 メモのほうの数え違いだった。 14時36分のセッションが仕掛けた見張りも、129本を待っていた。 119本でそろっていても待ち続け、最後は時間切れで終わった。

最終的に、第2部から第4部の音声46本(383拍)を Windows で合成し、すべて R2 に上げた。 合成の失敗は0本で、メモリの使用率は最高でも約70%だった。 p24-pr-merge は Chrome で再生でき、音声に合わせて画面が進んだ。 ただ、耳ではまだ聞いていない。

開発ダッシュボードの整備

講義ノートの合間に、/dev まわりにも手を入れた。

  • 制作の流れの4列化:「講座ごとの制作の流れ」を、テキスト講座、画面再現、ストーリーボード、動画制作の4列に広げた。ページの最大幅は 1280px から 1680px にした。途中でページが 500 を返したが、原因はコメントの中に書いた **/ がコメントを閉じてしまったことだった
  • 開発ワークフローにストーリーボードの段:/dev/content-workflow の制作フローとシーケンス図に、ストーリーボードを入れるよう頼んだ。7段目に入り、後ろの段は8〜10に繰り下がった。コミット 43fcc367 の1回目は止まった。Codex のレビューは critical も high も無く通ったが、待っている間に別のセッションがコミットしたためだった
  • 戦略ノートを Git へ:壁紙に使っている戦略ノート(10/7 に作ったミラーカラムの論点版、4セクション、19論点)の置き場所を思い出せず、探してもらった。memo/2026-10-07/ にあったので、/dev からリンクを張らせた。そのうえで MacBook でも開けるように、Git に入れて push させた(1f28c4e9)

戦略ノートの要点をダッシュボードに出す変更もした。 そのコミットでは、このセッションの差分だけを切り出す処理でもたついた。 作業ツリーが CRLF で、目印の文字列が見つからなかった。 LF にそろえてから切り出し、途中で二重に入った閉じタグも直して、このセッションの3ファイルだけをコミットさせた(df2d3f17)。

振り返り

  • 書き手は並列にしても、照合とレビューの関所は親に1つだけ置いた。サブエージェントの報告から、エンジンの不具合が何度も見つかった。原稿の確認が、エンジンの検査も兼ねていた
  • Codex の critical と high は、本物の Git で測ってから扱いを決めた。直したもの、宿題に回したもの、該当なしと判定したものが、同じ日に並んだ
  • 重い処理を Mac に投げる分業は、Mac の手が空かなければ止まる。この日は空くのを待たず、Windows で回して46本をそろえた
  • 引き継ぎメモの数字(129拍)と、見張りが待っていた本数(129本)は同じ値だった。数字を書き写す前に、出どころで数え直す

前日の2台運用の作業は、こちらの記事に書いた。 第2部から第4部は、ページと音声までそろった。 本番に出すかどうかは、まだ決めていない。

#Git講座#Claude Code#サブエージェント#Codex#TTS#2台運用