財務諸表講座のiOS→PC移植チェックからデプロイまで:ポート3210と3200の取り違えと「完了にする」が遅い原因
財務諸表講座のiOS→PC移植チェックからデプロイまで
2つのURLは重複していたのか
朝、前日に書き出した引き継ぎファイルを Claude Code に渡し、財務諸表ストーリーの移植作業の続きから始めた。 iOS 版で作ったストーリーを、PC 版(Nuxt)へ移植する作業である。 作業ブランチに origin/main を取り込み、push して main へ早送りで入れてもらった。
そのあと、制作画面とストーリー版の2つの URL を貼って、こう打ち込んだ。
今恐ろしいことに気づいたんですけど、これってなんで2つ重複してるんでしたっけ?
/dev/fs-scene と /lessons/financial-statements/story/... が、同じ回を映していた。
Claude Code に見比べてもらうと、重複ではなかった。
台本と画面のデータは1つで、それを「作業台」(制作画面)と「受講者が見るページ」(ストーリー版)の2か所で表示している。
画面の動きは同じだが、ストーリー版の字幕と音声は書き出した時点のものなので、台本とずれることがある。
実際に No02 が1か所ずれていた。
音声が「未作成」と出たのはどの画面か
音声の無い回があるので、Mac 側のセッションに頼めないかと持ちかけた。 返ってきた答えは「Mac に頼まなくても大丈夫」だった。 帳簿なし版の音声は、10-26 に Windows で26本とも合成済みで、メインの作業ツリーに入っている。 音声が無いように見えるのは、いま開いているのが 3210(作業用ワークツリーの dev サーバー)だからだろう、という見立てだった。 音声は git の管理外なので、ワークツリーには自動では入らない。
このやりとりの中で「これiOSでやったやつをPC移植してんのか」と納得した。 PC 版とスマホ版への移植は終わっていて、このセッションに残っているのは iOS 側の後片付け(段6)だけだという。
それでも画面では、音声は再生されず「未作成」と出ている。 スクリーンショットを貼って指摘し、ワークツリー側に音声へのリンクを26本張ってもらった(git の差分は出ない)。 表示は「音声 未作成」から「音声あり 全24文」に変わり、長さも仮の 3:00 から実際の音声の 2:54 になった。
3210 と 3200 の違いは、このあとも何度か私を迷わせた。
SSの欄と表の合計を「-」にそろえる
次に、SS(株主資本等変動計算書)の欄の表記を直してもらった。 実装の前に、影響が分かれる点を4つ挙げて確認された。 私の答えが途中で食い違った(「SS の欄と全部の表の合計を、未計上なら -」を選んだあとに「同じまんまでいい」と書いた)ので、どちらを優先するかを聞き返された。
SSの欄と全部の表の合計を未計上ならば、これをお願いします。これだけをやってください。ここは他とトーンアンドマナーが明らかにずれてるんで。
配当まわりの行や列を減らす案は、ここでやめた。 決まりは「記入がなければ -、記入して 0 になったら 0」で、SS の各欄と BS、CS、PL の合計にそろえた。 画面では、PL の売上総利益と営業利益が「-」になり、経常利益から下は △30 と出ている。
fs 関連のテストは 45ファイル、2,420件がすべて通った。 コミット時の Codex レビューは指摘が続き、4回目で通過した。 途中で 3210 の dev サーバーが落ちた。 エラーの表示はなく、続けて流したテストの負荷によるものと見られる。
3300で動かしていたのか
ここで「これって確か3300でやってたんでしたっけ?」と聞いた。 メインへマージして、3200 でも同じ表示になるかを確かめたかった。
実際の作業場所は 3300 ではなく 3210 だった。 origin/main に入っていた新しい3コミットは依存パッケージの更新だけで、財務諸表のコードには触れていない。 それを取り込んで main へ入れ、メインの作業ツリーも pull して、3200 でも同じ表示で見られるようにした。
段6:iOS用データの書き出し
続いて段6に入った。 まず make-fork が、取引25回、論点2回、説明11回で通った。 No01 を1本書き出して確かめ、残りの取引24回は3本ずつ並べて書き出してもらった(1回あたり約4分)。
この書き出しについて、引っかかって聞いた。
書き出すのって、もしかしてMP4を書き出してるんですか?ちょっとそれ意味ないんで
MP4 ではなかった。 「書き出し」は iOS アプリに同梱するデータを作り直す作業で、中身はコマごとの画面の状態、字幕と時刻、取引の図の SVG である。 それなら問題ないので、続けてもらった。
途中で、SVG が22枚すべて変わるという差分が出た。 Windows の作業ツリーの元の Vue が CRLF で、改行のうち CR だけが SVG に残っていた(前回は LF の環境で書き出されていた)。 読み込むときに LF へそろえてもらうと、変わったのは No06、No14、No17 の3枚だけになった。
あわせて、債権と債務の玉を図の札の位置から飛ばすように直してもらった。 No06 では、¥ の箱(600)のすぐ右に借入債務の札が真横に並び、重なりもなくなった。 あとで No17(短期借入債務の返済)の札と×印も、No06 で借入債務が出る位置(上へ 55、右へ 22)にそろえてもらった。
3200では完了、3210では「再確認」
作業の途中で、私はずっと 3200 で見ていて、3210 は見ていなかったと伝えた。
3200だと、まあ完了にしてるやつ?3210だと、まあその再確認のタグがついてて。ちょっと一瞬迷っちゃった
完了の印は「台本と音声のマニフェスト」の組で照合している。 記録(D1)は 3200 と 3210 で共通だが、3210 のワークツリーにある音声のマニフェストがメインのものと違うので、3210 では「完了したあとに音声が変わった」と判定されていた。 正しい基準は、私が見ている 3200 の表示である。
そこで main へ入れてもらい、3210 の dev サーバーもポート指定で止めてもらった。 直後に「これ音がなくなってるの気のせいですか?」と聞いたら、開いていたタブが止めた 3210 のページだった。 以後は 3200 だけを見ることにして、ワークツリーの dev サーバーとの往復はここで終わった。
台本と音声が合っていない
3200 の画面に「台本と音声が一致しない」という帯が出ていた。 音声をずらした覚えはないので、理由を聞いた。
3200 にある取引25回の音声は、10月5日と15日に作ったものだった。 そのあと台本を、10月23日に改訂し(「万円」を読まない形にして、金額を漢数字にした)、10月26日に創立費の2文を足している。 Mac で作り直した新しい音声が、3200 に届いていなかった。
Mac は私が使っていたので、Mac にある音声は取り込み、足りない分は空いている Windows で合成する方針にした。 Mac から 508件を取り込み(SHA-256 一致)、取引25回の音声を入れ替えた。 帳簿なし版の No13 は Windows で合成し直してもらい(全7拍、124秒、平均 −21.8dB)、3200 で帯が消えたことを確かめた。
ただ、メインの作業ツリーは早送りできなかった。 別セッションがまだ push していない CF精算表のコミットを作っていたので、そこへ merge せずに置いた。
ほかに、「現金変動なし」の回で AFTER の箱を光らせる演出もやめてもらった。
iOSリポジトリのぶつかり
iOS のリポジトリへ push しようとすると、Mac 側が origin に6コミット先へ進んでいた。 Mac 側と私が、同じ iOS 用データを別々に作り直していたので、28ファイルがぶつかった。 Mac 側の版を採り、Windows 対応の3点だけを入れ直す方針にした。
ぶつかったファイルを Mac 側の版にするコマンド(git checkout --theirs)は、権限の設定で止められた。
別のコマンドで回り込まずに確認を求められたので、私が ! を付けて1行で実行した。
結果は 0 で、ぶつかったファイルはすべて Mac 側の版になった。
そのあと縦の iOS 用データを作り直してもらい、テストを通して push した。
No02 だけは iOS 用データを作り直せなかった。 No02 の公開用データが、創立費の2文を足す前のままだったからである。 コンテキストが80%に達したので、計画書を更新し、引き継ぎを Downloads のテキストファイルに書き出してもらった。
帳簿なし版のスマホ版を作る
昼の別セッションで積み残しを聞くと、push 以外は残っていなかった。 そこで、iOS 版へ流すための帳簿なし版スマホ版を作ることにした。
画の形は、上に取引と5つの要素、下に BS と PL(当期純利益まで)を置き、CS と SS はグレーにした。
試すと、退けたあとに財務諸表が左に寄り、右にすき間ができていた。
枠の位置とカメラの基準がずれていたので、直してもらった。
費用の札が3枚ある No20、取引の無い No23 と「はじめに」も画で確かめ、「はじめに」はスマホ版の音声を合成してもらった。
各回で重ねた枠が BS、PL や字幕と重ならないことを、全回で確かめるテストも足してもらった。
tests/unit/fs 全体では1件がタイムアウト(5秒)で落ちたので、変更前のコードでも同じかを切り分けてもらった。
26本の試作ができたので、コミットして push してもらった。 Mac の tmux セッション「claude」には、iOS 版へ取り込むよう指示を送ってもらった。 Mac の eurekapu-ios セッションからは「帳簿なし版の音声26本を LAN で送って、R2 には上げないで」という依頼が届いていた。 そのとおり LAN で送り、Mac 側でもファイル数が一致した(1.5GB、2,801ファイル)。 送り終えた知らせは、5回目の送り直しで受け付けられた。
残りは、スマホ版26本の私の確認、ストーリー版の縦の画、「はじめに」のスマホ版の音声の R2 への上げである。 これも引き継ぎを Downloads に書き出して、明日へ回した。
「完了にする」が遅い原因
午後、朝のセッションの引き継ぎファイルを新しいセッションに渡した。 頼んだのは3つで、No02 の公開データの作り直し、制作画面の「完了にする」が遅い件の調査、デプロイである。
実測してもらうと、wrangler のバージョン表示は 0.7秒で出ていた。
そのあと約5.3秒、何かが終了を引き止めていた。
ログのフォルダを ls するだけで2分を超えた。
見立ては、wrangler のログファイルが大量に溜まっていることだった。
遅さの原因は D1 ではなく、wrangler の起動側にあった。
呼び出し方を変えると、6秒が 1.4〜1.6秒になった。 共有の関数もその形に書き直してもらうと、1回 1.1〜1.3秒、4本同時でも 1.3秒になり、ログのファイルも増えなくなった。 テスト30件が通った。
No02 の公開データは、最初の作り直しで36ファイルすべてに差分が出たように見えた。
比べると差は残っておらず、git の古い表示だった。
revise-trades.ts build を25回分流し直すと、差は No02 と本文の HTML 2枚だけになった。
R2 には No02 の新しい mp3 が8本無かったので上げ、配信 URL で全部 200 が返ることを確かめた。
デプロイと1Password
デプロイは、デプロイ用の worktree に .env が無いところで止まった。
1Password から書き出す手順だが、CLI がサインインしていなかった(account is not signed in)。
1Password のアプリのロックを外して続けてもらい、deploy.ps1 まで進んだ。
デプロイは 10.4分で終わり、前回から60コミットが本番に入った。 本番の No02 をヘッドレスのブラウザで確かめると、38文、4分32秒の新しい版になり、新しい mp3 も 200 で読み込まれた。 計画書の更新を push するとき、別セッションが main を6コミット進めていたので、その上に載せ直してから push した。 デプロイ用の作業ツリーは、ほかのセッションが消そうとしている気がしたので、そのままにした。 最後に、引き継ぎのプロンプトを書いてもらった。
Downloadsに怪しいCLAUDE.mdはないか
夕方、引き継ぎファイルを何本も置いた Downloads に、CLAUDE.md のような怪しいものが紛れていないかを調べてもらった。
CLAUDE.md は無く、Claude Code が勝手に読み込む設定ファイルも無かった。
学びメモ
- ワークツリーごとに dev サーバーを立てると、git 管理外の音声と完了判定のマニフェストがメインとずれ、同じ D1 を見ていても表示が分かれる。見るポートは 3200 の1つに決め、ワークツリーの dev サーバーは止めておく
- 「完了にする」の遅さは D1 ではなく wrangler の起動にあった。ログのフォルダを
lsするだけで2分を超えるほど、ログが溜まっていた