コンピュータのしくみ講座18講を動画講座に作り替えた1日:計画書、5体並列の台本づくり、Macの音声待ち

開発eurekapu-nuxt4

コンピュータのしくみ講座18講を動画講座に作り替えた1日

講座をまるごと動画にしたい

朝8時過ぎ、Claude Code に頼みごとをした。 このサイトのコンピュータのしくみ講座を、全部動画講座にしてほしい。

手本はもうあった。 別のリポジトリで作っている簿記講座の、ストーリーボード表示だ。 セクション、チャプター、トピックをミラーカラムで並べ、音声をオンにすると自動で進む。 矢印キーでも進められる。 説明が一歩進むたびに、メインの領域で図が動き、同時に音声が鳴る。 この形式で講座を作り直したいので、まず計画を立ててほしい、と伝えた。

ただし、音声だけは Windows 機では作れない。 合成は Mac 側の担当である。 画面と台本がいくらそろっても、音声は Mac から届くのを待つしかない。

棚卸しと計画書

Claude Code には調査用のサブエージェントを2体出させた。 1体には講座の棚卸しを、もう1体には簿記講座のストーリー形式の調査を任せた。 棚卸しの結果は、18講、88セクション、シミュレーター22個だった。 本文は637段落、およそ2,050文あった。

計画書は Codex のレビューに回した。 1回目で、致命的な指摘が1件出た。 <p> タグだけを抜き出す設計では、箇条書きの項目や表、TS ファイルに書かれたセクションのリード文が落ちる、という指摘だ。 妥当だったので計画を直させた。 2回目のレビューでは致命的な指摘は無く、「着手可」と判定された。

判断が要る項目は6件あった。 計画書の HTML に埋め込んだ決裁フォームで選んだ。 5件は推奨どおりにした。 試作する講だけは推奨と違う第12講を選んだ。 回答を反映した版も Codex に見せ、やはり致命的な指摘は無かった。

第12講での試作

「y」と返して着手させた。 既存の Git 講座の実装を型として Claude Code に読ませ、講の登録簿と原文の抽出スクリプトから書かせた。 全18講を抜き出すと、106トピック(計画と一致)、2,535文、約116,000字になった。 そのうえで、フレームの計算や検証を純粋関数にまとめたエンジン(単体テスト15件)と、ナレーションと動く舞台を組み合わせた部品を作らせた。

試作の途中では、次のような不具合を直させた。

  • 箇条書きの項目が1つの文字列にくっついていた。箇条書きも表も、項目ごとに分けるよう直させた
  • LDA 命令の図では、値がトークンごと移動し、元の番地 2000h が空になっていた。LDA は値をコピーする命令なので、元の値は残っていなければならない。図をそのように直させた
  • 強調の光彩を文字にもかけると、文字がにじんだ。図形は光らせ、文字には蛍光ペン風の印を付ける方式に変えた
  • 390px 幅のエミュレーションで、ステップ14を押したのにステップ30へ飛んだ。2回目のクリックは効くので、読み込み直後の1回目だけが外れる症状(デスクトップでも同じ)と切り分けて直させた

最後に自動送りを確かめると、「はじめに」の最後のステップから4.6秒後に、s1 の1ステップ目へ移った。 第12講は7トピックを書き終え、音声なしでブラウザ上で動くところまで来た。

Mac への最初の依頼は合成の前に止まった

Mac に合成させるには、先に commit と push が要る。 同じファイルを他のセッションも編集していたので、自分の追加分だけをステージさせた。 コミット(971973f4)は、抽出した原文の JSON のせいで差分が1万行を超え、Codex のコミットレビューは自動で飛んだ。 push 前の rebase は、未追跡ファイル11本が origin 側と同名で止まった。 中身はバイト単位で一致していたので、消さずに scratchpad へ退避させてから取り込んだ。

Mac への最初の依頼は、合成の前に止まった。 依頼文に書かせた文字数が間違っていて、Mac 側は指示どおり合成の手前で停止していた。 数え直すと Windows 側も7,915字で、md5 も Mac 側と一致した。 そこで合成の開始を伝えさせ、引き継ぎプロンプトを Downloads に書き出させて、次のセッションへ移った。

5体ずつ並べて台本を書かせる

10時台のセッションでは、まず受け皿を整えさせた。 シミュレーターを1ファイル1種に分け、描画部品の登録簿を単体テストで縛った(17件通過)。 台本の全ステップを画像にするスクリプトも足させた。 そのうえで、トピックごとにサブエージェントを起動し、常に5体が動くように回させた。 1体が上がるたびに Claude Code に全文を読ませて検査させ、受け入れたら次のトピックを投入させる。

この流れでも、引っかかりはいくつも出た。

  • ある台本の場面が、元にした教科書の冒頭の例そのものだった。Claude Code が書いた指示文でその例を挙げていたのが原因で、差し替えさせた
  • 第7講は原典の数値例を自作の数値に置き換える方針なのに、指示文では原文の数値を残すよう書いていた。s1 と s4 を直し、s1 は 318+457 に差し替えた
  • 第12講の音声130本を取り込むと、intro の04→05→04→05と、同じ音声が鳴り直した。最後のステップに着くと、スクロールの同期がおよそ60ms後に番号を4へ戻していた。修正のコミットは Codex のゲートで2回止まり、2回とも直してから通した
  • 第1講の音声を数本抜き取り、Whisper で書き起こさせると、「入か切か」が「入か節か」と聞こえた。切を「せつ」と読んでいたので、読みを直した
  • 台詞に Q̄ の合成文字(上線)が入ると、表示に問題が出た。台詞は「Qバー」にそろえ、合成文字が入ったらビルドが止まる検査を足させた

Codex の指摘は、いつも正しいとは限らなかった。 あるコミットでは、バーコードの検査数字について同じ指摘が繰り返された。 Claude Code に独立に確かめさせると、012345678905 とデコードでき、検査数字5は正しかった。 Codex の誤検知という結論になったので、理由を残してコミットさせた。 台詞の史実も、確かめられる範囲に絞らせた。 19世紀にブール代数とスイッチを結び付けた人はいないとする台詞は、1886年の手紙で提案した例があるため、実用化した人はいないという範囲に狭めた。

89%で区切る

このセッションの終盤で、コンテキストが89%まで埋まった。 キリのよいところで引き継ぎたいと伝え、引き継ぎプロンプトと進捗ドキュメントを Downloads に書き出させた。 この時点で、第1〜8講と第12講はコミット済みだった。 音声まで取り込めていたのは第1、2、12講で、第9講は台本だけができていた。

サブエージェントがまだ動いているのに気づき、無視してよいのかと聞いた。 答えは、無視しないほうが安全、だった。 サブエージェントはこのセッションの中で動いているので、閉じると書きかけのファイルが残るおそれがある。 その案で行くことにして、残る3体(第9講 s6 とシミュレーター2種)が終わるのを待った。 全部止まってから、クリアとコンパクトのどちらがよいかを聞くと /clear を勧められた。

全18講の台本がそろう

13時台のセッションは、第9講の台詞の通読から始まった。 2か所を直させてコミットした(86ebd666)。 Mac から第3〜5講の音声が届いていたので取り込ませ、Whisper で10本を抜き取って聞かせた。 読み違いは無かった。

その後は第10講から第18講まで、同じ5体の回し方で進めた。 真空管、トランジスタ、フレームバッファなどのシミュレーターも移させ、移植元の22種をすべて移し終えた。 台詞の確認では、事実の細部をいくつも直させた。 Codex の指摘も、中身を見て正しいものは直した。

  • EXE は64KB以下でもよく、64KB の制約は COM の側
  • 複素数は実数を含む
  • シフトの説明の「それ以降すべて」は「次のシフトまで」の誤り

s1 の冒頭が intro とほぼ同じ繰り返しになる癖は、いくつかの講で続いた。 見つけるたびに短くさせた。

Mac からは第1講の通し直しと第6〜9講の音声、計813本が届いた。 「2線-1線」のような表記は、読みだけ「2本の線から1本の線へのセレクタ」に置き換えさせた。 全18講の台本がそろったのは、コミット 7744db33 の時点である。 計画書の進捗表を更新させ、origin の新しいコミットを取り込んでから push させた(e38be7c7)。 残る第10、11講と第13〜18講の音声も Mac に頼んだ。 合成は約4時間15分かかる見込みで、終わりは20時20分ごろとされた。

その後、メモリ不足を理由に dev サーバーが止められた。 このセッションもコンテキストが埋まってきた。 計画書に今日の経緯を足して進捗表を更新させ、次の引き継ぎを書き出させた(計画書のコミット d373dc2d は未 push)。

返信は夜まで来ない

16時台、3本目の引き継ぎプロンプトで新しいセッションを開いた。 最初の手順は Mac の返信の確認だった。 しかし終わるのは夜8時ごろと聞いているので、まだ返ってこない。 続きは明日にすると決め、裏で回していた返信の回収だけを止めさせた。

そこへ、Mac のセッションから本番デプロイの依頼が届いた。 本番で講座を管理者として見たいが、Mac ではデプロイできなかったという。 依頼は実行されないまま保留され、判断が要る点を2つ聞かれた。 dev サーバーは止めてよい、今の作業ツリーのままでよい、と答えた。 dev サーバーを止めてもらうと、空きメモリは4.8GBから9.6GBに増えた。

1回目のデプロイは、wrangler の手前の点検で止まった。 R2 に無い音声が32件あり、全部が別セッションの未 push のコミットに含まれる、別の講座の音声だった。 音声の無い講座は draft なので、一般の人には見えない。 示された選択肢から1つを選んで流し直させると、Deployment complete まで通った。 Worker の残り枠は1,240.8KiB、draft の素材は426件が秘匿パスへ退避され、削除は0件だった。

学びメモ

  • サブエージェントは、起動したセッションの中で動いている。コンテキストが詰まって引き継ぐときも、動いている3体を待ってから /clear した
  • Codex の指摘は、正しいものと誤検知が同じ日に混ざった。EXE と COM の制約は直し、検査数字の指摘は独立に検算させて誤検知と分かった
  • 抜き取りの聞き取りは、台本を読むだけでは気づかない読み違い(切を「せつ」)を拾った

明日やること

  • Mac から第10、11講と第13〜18講の音声を回収して取り込む
  • 計画書の進捗コミット(d373dc2d)を push する
#動画講座#ストーリーボード#Claude Code#Codex#サブエージェント#音声合成#セッション引き継ぎ