登記簿の教材75節をストーリー版に作り変え、Macで音声合成:ワークフローの並列と判断31件の整理

開発eurekapu-nuxt4

登記簿の教材をストーリー版に作り変えた日

昼前、mdx-playground にある登記簿の教材の URL を貼って、Claude Code に頼んだ。 中身を、Excel 編のようなストーリー調に全部作り変えてほしい。 左のミラーカラムレイアウトと矢印は、ほかのストーリー版と同じにする。 音声は最終的に自分の声で吹き替えるので、いったんは MacBook の音声クローンで作れば足りる。 MP4 の書き出しもまだ要らない。

ゴールは、自分がレビューできる状態にすることだった。 コンテンツの移し替えにはワークフローを使ってよいと伝え、まず実装計画を書かせた。

計画書と「Excel のように」の読み方

調べものは調査役2体に分けた。 1体は教材の中身の棚卸し、もう1体は既存のストーリー版の仕組みの確認である。

棚卸しから、大事な事実が1つ戻ってきた。 本文も記録例も図も、ほぼすべて市販の書籍1冊から作られていて、mdx-playground 側でも「書籍由来のため dev 限定」の扱いだった。 計画には、この扱いを組み込ませた。

計画書は、Codex のレビューを3回受けて承認をもらった。 判断の要る5点は、計画書の中のボタンで答える形になっていた。

Claude Code は「Excel のように」を、ミラーカラム、矢印、← →、音声の自動送りという読み方をそろえる意味だと読んでいた。 推奨は Excel の画面を再現する型ではなく、コンピュータ講座と同じ型だった。 1つの帳票が説明に合わせて1行ずつ現れ、光り、下線で消える。 判断1〜4は推奨どおりにし、判断5では「dev 限定でそのまま使う」を選んだ。

土台づくりの途中で、見せ方を作り直させた

「y」と返すと、段0の準備が終わり、段1の土台づくりが4体のワークフローで裏に回った。

しばらくして、進捗を聞いた。 4体は15時22分に動き始め、約18分たっても4体とも作業中で、完了した体はまだなかった。

その後、見せ方を指摘して作り直させた。 仮の台本は、帳票を全体で見せてから寄る形に変わった。 光らせない欄は、隠すのではなく薄くする。 Chrome で確かめさせると、カメラは1.7倍まで寄り、対象の欄だけがマゼンタで光り、残りは薄くなっていた。 テストは49件通った。

完了の記録を出すパネルだけは、API が 502 を返していた。 dev サーバーを起動し直せば直る見込みだったので、ここでは追わなかった。

第2章をパイロットにすると、指摘が61件出た

「コミットしてどんどん次に進めて」と返した。 パイロットは第2章の表題部で、書き手3体が台本を書き、確かめ役3体が読む流れである。 途中で報告が英語になっていたので、「日本語で教えて」と頼んだ。

9節が書き上がると、確かめ役からの指摘は61件にのぼった。 Claude Code は判断の要るものを先に決めてから、直しを3体に回した。 読み替えの辞書には26語が加わった。

画面では、地目の写真23枚の並びと、分筆の図を確かめさせた。 ステップ33には不具合があったが、直したあとは10㎡以下の行だけが濃く光った。

コミットでは一度つまずいた。 git add が失敗し、ステージには別のセッションのファイルまで載っていた。 このセッションのパスだけを1つずつ add させると、今度は並行のセッションがコミットの途中で、index.lock が残っていた。 ロックが外れるのを待ってコミットした(90b7aeed7)。 Codex のコミットレビューでは、critical と high の指摘は出なかった。

Mac のセッションが「OK」を待っていた

push してよいと返した。 MacBook では tmux のセッションが生きているはずなので、そちらで音声合成をしてもらう。 dev サーバーの再起動はしなくていいのでは、とも添えた。

Claude Code は残り7章のワークフローを起動し、Mac の claude2 セッションへ合成の依頼を送った。 その依頼が、7秒で終わった。 合成にしては早すぎる。 返信を見ると、Mac 側は「ご本人の指示ではない依頼なので、始めてよいか」と確認を求めて止まっていた。 Claude Code は、これは安全のための正しい動きで、こちらから承認の代わりは送れないと説明した。

「オーケーと打っといてください」と頼んだ。 OK の指示があったことを伝えさせると、Mac 側は pull と台本の照合から合成を始めた。

合成は264本、481文で、約47分かかった。 拍の位置の検査は全部 OK だった。 MP3 も264本できた。 Chrome で再生させると、s1-01 から s1-07 までが順に読み込まれて鳴り、自動で次へ進んだ。

残り7章と、2,015ステップの検査

残り7章のワークフローは、48体すべてがエラー0で終わった。 そこから手で直す分を、Claude Code に順に片づけさせた。

  • 1440px の3カラムでは帳票の幅が約409pxしかなく、全体表示の縮小と、右端の欄への寄りを直した
  • 記録例の見出しに残っていた原典の番号を消し、同じ型の番号をビルドの禁止語に足した
  • 1440px で「前へ」「次へ」が右にはみ出していたので、「次へ」の右端を1428pxに収めた
  • 仮の名前に使った A〜D を、それぞれエー、ビー、シー、ディーと読ませた

途中で、Claude Code は自分の置き換えの誤りにも気づいた。 「6月23日は2つ目の相続(7月3日)のあと」は、2つが同じ年なら成り立たない。 順序を言い切らない言い方に直させた。

テスト108件と eslint が通り、呼び名のずれ6項目も直った。 9章すべてが厳しいビルドと検査を通ったので、登記簿のファイルだけ(212ファイル)をコミットして push した。

最後に、全ステップを機械で流して、光らせた欄がカメラの外に出ていないかを調べさせた。 先にわざと不具合を作り、検査がそれを拾えることを確かめてから全章に回した。 1440px では、全2,015ステップのうち1件だけが引っかかった。 乙区の節のステップ14で、光らせた欄がカメラの外にあった。 その欄をカメラの対象に足して直した。

スマホ幅では、完了のパネルが別の場所にあって帯を崩していた。 dev 限定のパネルでスマホには要らないので、スマホ幅では隠した。 途中、Claude Code が開いたタブではエミュレーションが外れなくなったので、タブごと閉じさせた。

これで、はじめにと第1〜8章の全75節、2,015ステップが dev で読める状態になった。 残りの章の音声は Mac で合成中で、終わるのは深夜2〜3時ごろの見込みだった。

午後の別セッション:税効果の判断を保留にした

別のセッションでは、税効果会計講座の計画書を見ていた。 進捗と次の作業を聞き、判断が要るのにリンクが無い所にはリンクを付けようと言った。 走りっぱなしのプロセスの掃除(/procs)も一緒に頼んだ。

記事2本へのリンクは、3-1、6-2、7-6 の台本に足させた(c3e0d05d)。 次の作業は、判断が出た項目の反映と、段6の残りだった。

ただ、その判断はいったん保留にしたかった。 計画書を更新させ、講義ノート一覧の「税効果会計 ストーリー版(ドラフト)」のカードに「計画書を開く →」のリンクを付けさせた(7a6372d4)。 リンク先の /dev は本番に無いので、出すのは dev のときだけにした。 リンクの背景がページの地の色とほぼ同じで見分けにくかったので、少し濃くした。

続けて、制作ダッシュボードにも税効果の行を入れてもらった。 このとき、完了の記録の API が毎回30〜60秒かかっていた。 原因は、進捗の計算に税効果(zk)が入っていなかったことで、税効果のカードは前から「読み込み中…」のままだった。 CRLF のファイルだったので、Edit ツールで直させた(e26b86daf)。 計画書のカードの下に、4つの段が並んだ。

メモリを食っていたのは gcloud だった

3200番の dev サーバーが止まった、という通知が来た。 聞いてみると、止められたのは起動に使ったシェルだけで、サーバー本体は残っていた。 http://localhost:3200/lessons は0.6秒で応答した。 空きメモリは、32GB のうち5.0GB だった。

メモリを使っているのは、ワークフローが走っている Claude Code のセッションではないかと聞いた。 mdx-playground の3000番台は消してよいと伝え、Cloudflare のプロジェクトリストも大きいので消そうと言った。

止めたのは、mdx-playground の3000番と gcloud だった。 その gcloud は Cloudflare ではなく Google Cloud のプロジェクト一覧のコマンドで、前の日から終わらずに1.7GB を使っていた。 空きメモリは5.0GB から10.7GB に増えた。

修正方針の論点14件と、判断31件

同じセッションの後半では、別件の報告書に「有料化は未定」という前提を足させた。 既存の文は消さずに、ロードマップをその前提で並べ直した。

そのうえで、直す方向性はもう決まっているのかを聞いた。 決まっていないなら、方向性も含めて文書に残し、Codex のレビューを受けてほしいと頼んだ。 最初に立ち上がった下書き役は3体だった。 論点が多いと思ったので、サブエージェントは増やしてよい、ワークフローを使ってよいと返した。 論点は14に分かれ、1論点に2体ずつ付いた。 先の3体は途中で止めたが、ファイルを書く前だったので、失った成果物はなかった。

方針書は、論点14件と統合版のすべてで Codex のレビューを受けた。 判断は31件あり、3択フォームで答える形になった。 急ぎで塞ぐべき穴が1件ある、という報告も一緒に届いた。

答え始める前に、ここまでの進捗を progress.md に残させた。 コミットも済んでいるかを聞くと、まだだった。

そのあと、フォームのサーバーがメモリ不足で止まり、回答は届いていない、という報告が来た。 自分では答えたつもりだったので、内容の確認を頼んだ。 実際には31件すべてが届いていた。 止まったという通知とは別に、送信までは受け付けていたのである。 31件とも推奨の選択肢で、自由記述はなかった。

コミットさせ、方針書の31の判断の直後に、それぞれ「決定」を書き込ませた(6415b82d4、62ファイル、push はしていない)。

デプロイ前の .env と、音声の検査

修正の段階1は6コミットになった。 ユニットテストを全部流すと、1回目は8ファイル44件が落ちた(10,572件は通過)。 一覧を取り直して切り分けると7ファイル43件で、どれも Excel の画面再現か伝票の図のテストだった。 今回の修正が原因ではなかった。

出すのは、前回の本番に修正の3コミットだけを足したクリーンな複製にした。 ところが、複製を前回の本番へ切り替えてコミットを足す操作は、権限のチェックで2回止まった。 「Claude がやっていいので進めてください」と返すと、Claude Code はコマンドを分けて通し、複製の上でもテストを通した。

次は .env に触れる操作が、権限で止まった。 示された案のうち、最初のもので進めると返した。 Claude Code は .env に触れられないので、コマンドは自分で打つことになった。

ここで、自分が言い間違えた。 .env を手元に置きたくないと言うつもりで、「.wav ファイル」と言ってしまった。 Claude Code は、音声の検査について説明を返してきた。 本番の画面が鳴らす音声が R2 に上がっているかを見る検査で、手元に要るのは音声ではなく、音声の一覧だという。

言い直した。 聞きたかったのは .env のほうである。 ついでに、WAV は MP3 に置き直したのではなかったか、全部 R2 に上げたのではなかったか、まだ上げていないものが WAV のままなのか、と聞いた。

.env についての答えは、デプロイが読む値は1つだけ、というものだった。 その値はもう Cloudflare Pages の環境変数に入っているが、書き込み専用で、あとから読み出せない。 だから手元にも要る。 音声のほうは、R2 に HEAD で問い合わせるだけで何も書き換えない検査を、手元で流して確かめてもらった。

最後は自分でコマンドを打った。 値は1Password から読み出して環境変数で渡し、音声の検査には未公開を許す指定を付けた。 コマンドは120秒でバックグラウンドへ移り、17時17分47秒にデプロイが完了した。 本番で穴が塞がったことも確かめさせた。

学び

  • Mac 側のセッションは、本人の指示ではない依頼を受けると、確認を求めて止まる。依頼が7秒で「終わった」ら、終わったのではなく止まっていると疑う
  • 「止まった」という通知が、実物と食い違うことが2回あった(3200番の dev サーバーと、3択フォームの回答)。通知を見たら、まずサーバーの応答や回答のファイルを確かめる
#Claude Code#ワークフロー#サブエージェント#ストーリー版#音声合成#計画書