Claude CodeをWindowsとMacBookの2台で分担した日:音声合成の受け渡しと法的リスク監査の依頼、脆弱性28件の片付け

開発eurekapu-nuxt4

Claude Code を Windows と MacBook の2台で分担した日

Windows の Claude Code に「Macに直接送っておいて」と頼んだ。 ファイル5件は Mac に届き、ハッシュも5件とも一致した。 ところが、Mac 側のセッションへ伝言を入れるところで止まった。

この日は Mac で iOS 移行のセッションを回しながら、音声の合成と本番のデプロイを Windows 側に受け持たせた。 2台のあいだで何かを渡すたびに、届いたかどうかを確かめる作業が挟まった。

Mac への伝言が届くまで

Mac は5分前に再起動したばかりだった。 Claude Code のセッションも tmux も、メッセージを受け取るサーバーも動いていなかった。

Mac で tmux のセッションを開き、もう一度送るよう頼んだ。 Windows 側の Claude Code は tmux の claude(eurekapu-ios で Claude Code が起動中)を見つけ、止まっていた受信サーバーを起動した。 それでも届かなかった。 Mac のファイアウォールが、LAN から受信サーバーへの接続を止めていた。

そこで、SSH で Mac に入り、Mac の中から渡す形に切り替えさせた。 今度は 409 が返ってきた。 Mac のセッションが応答を生成している最中で、何も注入されていない状態だった。 空くまで15秒おきに再送させた。

音声は Windows で合成する

まだ送れていない、という報告を受けたところで、音声の担当を変えた。 Windows のメモリが空いていたので、音声は Windows で合成して MacBook に送り、その旨を Mac に伝えるよう頼んだ。 Windows 側の Claude Code は引き継ぎファイルに「音声は Windows 担当」と書き足してから、送信を再開した。

Mac 側のセッションは、私が貼った引き継ぎで Phase 0-1〜0-4 を終えてコミットしていた。 しかも、ちょうど 0-5(「万円」の合成)に自分で手を付けかけていた。 そこへ入力欄への割り込みで「0-5 は Windows が担当」と入れさせ、受け取られたのを画面で確認した。 Mac 側は届いた伝言を受けて、更新された handoff-prompt.md と、nuxt4 に手を加えていないことを確かめていた。

合成するのは、財務諸表ストーリーの導入3〜10(8本)である。 台本59文と字幕から「万円」を外させた。 GPU の空き(6.5GB)とロックを確かめてから、8本で506文を合成させた。 途中で、合成用のツール名を含むコマンドをフックが止めたので、Read ツールで読む形に切り替えさせた。

  • 8本とも、台本と音声の一致とグリッド検査を通過(BPM 約120)
  • 音量は −22〜−23dB
  • Mac へ115ファイルを送り、ハッシュは115件すべて一致

法的リスクの監査は MacBook に頼んだ

音声を送り終えたところで、監査も Mac に回すことにした。 最初は「iPhoneに送っといて」と言いかけて、MacBook に言い直した。 自分のアプリについて6項目の法的リスクを点検し、直すよう依頼した。 依頼文は Windows 側の Claude Code に用意させ、Mac の新しいセッションで監査を始めてもらった。

字幕に漢数字が残っていた

そのあと、iOS 移行を進めている Mac 側のセッションからメッセージが届いた。 それを受けて、導入3〜10の字幕のうち59文を算用数字(例「PLの当期純利益468は」)に直させた。

原因は、「万円」付きの金額だけを数字にする決まりにあった。 この決まりのまま「万円」を外したので、金額が漢数字で残っていた。 Windows 側の Claude Code は、字幕を確かめずに送った自分の見落としだと説明した。 動画データを作り直し、テストが全部通ってから Mac へ送り直させた。

さらに、導入9と10で「万円」を付けずに読んでいた10文も、字幕を算用数字にすることにした。 これは私が Mac 側で判断した内容で、Mac のセッション経由で Windows に届いた。 導入9(fs-basics-08)に1文、導入10(fs-basics-09)に9文を足し、Mac へ送った6ファイルのハッシュはすべて一致した。 「三つ」「一つ」「ステップ三」のような数の言葉は、漢数字のまま残した。

コミットで別セッションとぶつかった

コミットと push を頼むと、同じ作業ツリーで別のセッションが introScenes/* などをステージ済みだった。 そこで、パスを指定して自分の変更だけをコミットさせた。

コミットの途中で、導入8本分のファイルを R2 に上げることになった。 R2 の使用量は 3.67GB で、無料枠の 10GB に収まっていた。 8本分を上げ、75本すべての配信(HTTP 200)を確かめてから、コミットをやり直させた。

そのあと、2つのページ(会計入門ストーリー版の補足と /dev/intro-scene)について尋ねた。 返ってきたのは、このセッションの担当ではないという答えだった。 担当しているのは Windows の別のセッション(iOS アプリの課金とコンテンツ移植)だと思われる、とのことだった。

残りを聞くと、必ずやる作業は終わっていて、判断が要る2件と Mac 側で進んでいる作業だけが残っていた。 作業で使った一時ファイルは、その場で片付けてあった。

Mac からの依頼で本番へデプロイした

もう一つの Windows セッションには、Mac の法的リスクのセッションからメッセージが届いた。 それを受けて、Windows 側の Claude Code が本番へのデプロイに取りかかった。

最初に調べたのは、本番に出ているコミットと origin/main の関係である。 本番のコミットは origin/main の祖先ではなく、未コミットの変更がある作業ツリーからデプロイされていたと判定された。 .env を 1Password から書き出して、worktree の準備をやり直した。

約15分の見込みでデプロイを走らせた。 その後 lint の修正をコミットし(Codex のレビューは指摘なし)、origin/main へ push してから、そのコミットでデプロイし直した。 2回目は13:11に本番へ出て、所要は11.5分だった。 本番の2ページを curl で取得し、初級向けクイズのページが Mac から頼まれたとおりの表示になったことを確かめた。 最後に memo のデプロイ項目を更新した。

片付けと、待ち時間の脆弱性対応

Mac のほうは7割ぐらい終わったらしい、と聞いていた。 進捗を確かめてから、片付いていないものを片付けてほしいと頼んだ。 GitHub に全部 push してあれば、Windows に残すものは無いだろうと考えていた。

Windows 側の Claude Code は、作業ツリーに何が残っているかを調べ、Mac に進捗を問い合わせた。 ところが、デプロイ用 worktree の変更を捨てるコマンドが許可されなかった。 Mac からの返事もまだ届いていなかったので、何も消さずに手を止め、私の了解を求めてきた。 その順番で進めてよいと返した。

別のセッションからは、push のときに GitHub が依存パッケージの脆弱性を警告したと聞いていた。 28件で、うち critical が1件、high が8件ある。 今回の作業とは関係なく前から出ているものだが、待っているあいだに潰しておくよう頼んだ。 28件はこのリポジトリ(eurekapu-nuxt4)のアラートで、別の worktree で直させた。

Mac から返事が来た。 Windows 側に残してほしいものは無い、という内容だった。 デプロイ記録の5行を main に入れて push し、fs-ios ブランチも push してから、worktree とマージ済みのローカルブランチを消させた。

脆弱性のほうは、npm と Python で進み方が違った。

  • npm 側は node-forge 以外がすべて修正版になった。node-forge は修正版がまだ出ていない。全テストとビルドは裏で流させた
  • Python 側の critical は certifi だった。原典のリポジトリと配布用の zip を確かめさせた
  • mcp が 2 系(メジャー更新)まで上がってしまったので、1 系の修正版(1.30 以上)にとどめた
  • 差分の大半は uv の新しい書式(upload-time の項目)で、版が変わったのは certifi と mcp だけだった

テストでは tools/call が isError を返した。 mcp の更新で壊れたのかを切り分けるため、更新前の lock でも同じになるかを比べさせた。 そのうえで、mcp 1.30 でも MCP 経由の呼び出しが成功する(isError: false)ことを確かめた。 原典のリポジトリにコミットして push し、critical の実体がある eurekapu-nuxt4 側のスナップショットにも反映させた。

Python 側はここで終わった。 npm 側は、全テストとビルドの結果を待っている途中だった。

続きは明日やることにした。 引き継ぎのドキュメント、進捗、プロンプトを、ダウンロードフォルダにテキストファイル(eurekapu-handoff-2026-10-26.txt)で出してもらった。 今日の進捗、worktree の削除コマンド、明日の手順、次のセッションに渡すプロンプトが入っている。

コミット時のセキュリティレビュー

この日の eurekapu-nuxt4 では、コミットのたびに自動のセキュリティレビューが走っていた。 ログは25本ある。 応答が記録されている19本は、すべて「脆弱性なし」だった。 残る6本(09:01、11:33、11:50、12:27、13:46、17:09)には、応答の記録が残っていない。 10:08 のログには2回分のレビューが入っている。 どちらも差分の中心は「万円」を外した台本と字幕の変更だと読んでいた。 片方は30ファイルの差分を読み、もう片方はリポジトリの外から入力を受ける箇所は無いと判断していた。

学びメモ

  • ファイルのハッシュが一致しても、伝言が届いたことにはならない。Mac の再起動で、セッションと tmux と受信サーバーがまとめて止まっていた。そのあとも、ファイアウォールと 409 が伝言を止めた
  • 決まりの前提を変えたら、その決まりに頼っている箇所も見る。「万円」付きの金額だけを数字にする決まりは、「万円」を外した時点で字幕の金額を漢数字のまま素通りさせた

振り返り

Windows に残すものは無い、という返事をもらった日の最後に、Windows のダウンロードフォルダへ引き継ぎのテキストを1枚置いた。 npm 側のテストとビルドが通ったかどうかは、まだ見ていない。

明日やること

  • npm 側の全テストとビルドの結果を確認する
  • node-forge の修正版が出ているかを確認する
  • 引き継ぎテキストにある worktree の削除コマンドを確認する
  • Mac で進んでいる法的リスク監査の結果を受け取る
#Claude Code#Windows#macOS#tmux#音声合成#セキュリティ#eurekapu-nuxt4