[{"data":1,"prerenderedAt":548},["ShallowReactive",2],{"content-/2026-09-25-diary":3,"all-pages-for-dir":528,"related-/2026-09-25-diary":529,"og-image-/2026-09-25-diary":547},{"id":4,"title":5,"body":6,"category":508,"concepts":509,"description":510,"extension":511,"meta":512,"navigation":449,"ogImage":509,"path":513,"project_name":514,"published":515,"publishedAt":516,"seo":517,"source":518,"stem":519,"tags":520,"todo":509,"unpublished":515,"updatedAt":509,"__hash__":527},"pages/2026-09/2026-09-25/diary-2026-09-25.md","2026年9月25日の開発日記 - 並行セッションがメモリを取り合い、関数の章をMacへ送った",{"type":7,"value":8,"toc":491},"minimark",[9,14,18,21,25,32,35,40,43,49,62,73,76,80,83,87,98,106,108,112,115,119,130,138,140,144,152,156,171,179,181,185,195,199,219,227,229,232,414,416,419,433,435,438,464,466,469],[10,11,13],"h1",{"id":12},"_2026年9月25日の開発日記","2026年9月25日の開発日記",[15,16,17],"p",{},"朝、講座動画の合成とテストを流していた裏の作業が、メモリ不足で次々に止められた。\n同じ PC で並べて走らせていたセッション同士が、メモリを取り合っていた。\nこの日は、どのセッションを止め、どの作業を後に回すかを決め直すことに多くの時間を使った。",[15,19,20],{},"タイムラインで見ると、講座アプリのリポジトリで11セッションが合計17時間52分、このブログのリポジトリで10セッションが合計7時間54分動いている。\n講座アプリ側の数字は、同じ時間帯にセッションを並べて走らせたぶん、壁時計の時間を大きく超えた。",[22,23,24],"h2",{"id":24},"今日のタイムライン",[15,26,27],{},[28,29],"img",{"alt":30,"src":31},"タイムライン","/2026-09/2026-09-25/timeline-2026-09-25.png",[22,33,34],{"id":34},"今日やったこと",[36,37,39],"h3",{"id":38},"_1-並行セッションのメモリの取り合いとmacへの引き継ぎ","1. 並行セッションのメモリの取り合いと、Macへの引き継ぎ",[15,41,42],{},"メモリ不足で裏の作業が止められたので、3000番台と3200番台の dev サーバーを全部止めてよいと指示した。\n08:36 に Step 7 のセッションで全ポートを止めさせ、ほかのセッションにも立てないよう伝えてもらった。\n08:42 には 3200 番だけを許可し、MP4 は自分がプレビューで確認して直したあとの最終版だけ書き出すと決めた。\n重い回帰テストは「修正したところだけ流せばいい」と範囲を絞らせた。\n関数の章の引き継ぎ6は、Windows だとメモリが落ちるので、テキストファイルにして Mac の Claude Code へ送った。",[15,44,45],{},[46,47,48],"strong",{},"主な成果:",[50,51,52,56,59],"ul",{},[53,54,55],"li",{},"CF精算表 Step 6 を main に合流させ、6a（3:08）と 6b（3:54）が 3200 番のプレビューに映った",[53,57,58],{},"関数の章の再現動画は、37本すべてが台本、実物の Excel での一致、本人の声の3段まで済んだ",[53,60,61],{},"止めたポートは 3000、3001、3200、3204、3206、3207 の6つ",[15,63,64,67,68],{},[46,65,66],{},"詳細:"," ",[69,70,72],"a",{"href":71},"/course-parallel-sessions-memory-mac-handoff","Claude Codeの並行セッションがメモリを取り合った日：devサーバーの停止、テストの絞り込み、Macへの引き継ぎ",[74,75],"hr",{},[36,77,79],{"id":78},"_2-レッスン画面のミラーカラム化とcf精算表-step-7-のカメラ調整","2. レッスン画面のミラーカラム化と、CF精算表 Step 7 のカメラ調整",[15,81,82],{},"excel-scene の開発用ページのサイドバーを分けてほしいと頼んだ。\nClaude Code が最初に出した3階層の入れ子に「違う違う、ミラーカラムにしてほしいんですよ」と返し、サイドバーは3列を経て、講座と同じ「2列に閉じるボタン」の形に落ち着いた。\nチャプターを押すと1本目を開く動き、矢印キーでの移動、「自動で次へ」ボタンも付けてもらった。\n午後の Step 7 では「集計対象の列はすべて画面に表示する」というルールを出し、カメラ位置の4つの値を数値で直せるようにしてもらった。",[15,84,85],{},[46,86,48],{},[50,88,89,92,95],{},[53,90,91],{},"サイドバーの作り直しは2回（3階層、3列、2列）",[53,93,94],{},"dev 限定の2ページを、トップページの「開発環境のみ」の見出しの下にカード2枚でまとめ、excel-scene にヘッダーを付けてコミットさせた（push なし）",[53,96,97],{},"カメラの手直しの共通点の確認は、翌日の Google タスクに回した",[15,99,100,67,102],{},[46,101,66],{},[69,103,105],{"href":104},"/excel-scene-mirror-column-autoplay-step7-camera","Excel操作動画のレッスン画面をミラーカラムに直す：自動再生とdev限定カード、CF精算表Step 7のカメラ調整",[74,107],{},[36,109,111],{"id":110},"_3-毎朝の統計取得を-cloudflare-workers-の-cron-へ移す計画","3. 毎朝の統計取得を Cloudflare Workers の cron へ移す計画",[15,113,114],{},"make-diary のうち公開統計の取得を Cloudflare Workers の cron へ移す計画を立て、Codex のレビュー（指摘、修正、再レビュー、承認）を通した。\n「CLI 使えるはずなんで」と頼み、wrangler の CLI で Phase 0 を進めてもらった。\n1回の実行で取るソースを1つに絞れば無料プランで動くことを、実測で確かめられた（残ったのは KDI の新号検知の調査だけ）。\nただ、前日のログを測らせると、この計画の範囲ではメインのコンテキストは1%も減らないと分かった。",[15,116,117],{},[46,118,48],{},[50,120,121,124,127],{},[53,122,123],{},"無料プランの枠は、cron 1回あたり CPU 10ms、外部リクエスト50本。cron トリガーの上限5本は予定表の数の上限で、この計画で使うのは1本",[53,125,126],{},"韓国の統計は4系列が新号判定できたが、tradedata.go.kr はウェブファイアウォールに遮断され、値の取得は手元に残る",[53,128,129],{},"金融データサービスAからの取得は移さないと決めた",[15,131,132,67,134],{},[46,133,66],{},[69,135,137],{"href":136},"/make-diary-cloudflare-workers-cron-plan","Cloudflare Workers無料プランのcronで毎朝の統計取得は動くか：wranglerでPhase 0を実測した",[74,139],{},[36,141,143],{"id":142},"_4-無料の-tts-api-で自分の声を合成し音声透かしを調べた","4. 無料の TTS API で自分の声を合成し、音声透かしを調べた",[15,145,146,147,151],{},"Google タスクの「TTS を試す」から着手し、Fish Audio の無料モデル ",[148,149,150],"code",{},"s2.1-pro-free","（2026年11月30日まで）を、1Password に登録した API キーで Claude Code に叩かせた。\n聞き比べると、Irodori-TTS のほうが自分の録音に近いと感じた。\nIrodori には SilentCipher の透かし「IRDTS」が入っていたが、AudioSeal と WavMark では Fish からも Irodori からも透かしは出なかった。\nシードについては「Fish の API にシード指定はない」「Irodori の差し替えは語単位ではなく文単位」と確認した。",[15,153,154],{},[46,155,48],{},[50,157,158,165,168],{},[53,159,160,161,164],{},"Drama 3（",[148,162,163],{},"drama-3-preview","）は HTTP 402 で弾かれた",[53,166,167],{},"1回目の合成は23文",[53,169,170],{},"透かしの有無を、陽性と陰性の対照つきで確かめた",[15,172,173,67,175],{},[46,174,66],{},[69,176,178],{"href":177},"/fish-audio-free-api-watermark-seed-check","Fish Audioの無料APIで自分の声を合成し、音声透かしをAudioSealとWavMarkで調べた記録（Irodori-TTSとの比較）",[74,180],{},[36,182,184],{"id":183},"_5-プロンプトの棚卸しとフックのタイムアウトと-pc-の空き容量","5. プロンプトの棚卸しと、フックのタイムアウトと PC の空き容量",[15,186,187,190,191,194],{},[148,188,189],{},"/claude-api prompt-audit"," で Claude Code にプロンプト面を監査させると、差分付きの指摘が12件、flag が7件出た。\n止めてある学習ゲートの実行を促す文が、5ファイルに残っていた。\n学習ゲートを使わない前提と、モデル表記を Opus 5.5 にそろえる方針を決め、18ファイルを直させてコミットと push まで済ませた。\n午後は、UserPromptSubmit フックの30秒タイムアウトが Store 版 ",[148,192,193],{},"python3.exe","（ダミー）の固まりで起きていることを突き止めてもらい、PC の空き容量も測ってもらった（消せるのは約21GB）。",[15,196,197],{},[46,198,48],{},[50,200,201,204,216],{},[53,202,203],{},"make-diary も Opus 5.5 で回すことにした",[53,205,206,207,210,211,215],{},"朝の相談からクラウド会計2社の料金改定を追う記事を1本書き、",[148,208,209],{},"9df40a09"," でコミットした（",[69,212,214],{"href":213},"/cloud-accounting-price-hikes-mf-freee","会計ソフトAと会計ソフトBの料金改定の記事","）",[53,217,218],{},"ディスク分析ツールの片方は、アンインストーラーのエラー（1603）で消えず、削除は自分が引き取った",[15,220,221,67,223],{},[46,222,66],{},[69,224,226],{"href":225},"/prompt-audit-opus55-and-pc-cleanup","Claude CodeのプロンプトをOpus 5.5前提で棚卸しした日。フックの30秒タイムアウトとPCの空き容量も調べた",[74,228],{},[22,230,231],{"id":231},"今日の試行錯誤",[233,234,235,257],"table",{},[236,237,238],"thead",{},[239,240,241,245,248,251,254],"tr",{},[242,243,244],"th",{},"#",[242,246,247],{},"テーマ",[242,249,250],{},"試したこと",[242,252,253],{},"結果",[242,255,256],{},"気づき",[258,259,260,278,295,312,329,346,363,380,397],"tbody",{},[239,261,262,266,269,272,275],{},[263,264,265],"td",{},"1",[263,267,268],{},"CF精算表 Step 6（07:58）",[263,270,271],{},"3200 番で Step 6 を見られないかと提案し、全コマハッシュのテスト（前回23分）を流させた",[263,273,274],{},"3200 番は main 配信でブランチの Step 6 は映らなかった。テストは関数の章のセッションに譲って止め、許可を出して main に合流させると映った",[263,276,277],{},"プレビューに映るのは main だけだった",[239,279,280,283,286,289,292],{},[263,281,282],{},"2",[263,284,285],{},"関数の章 引き継ぎ5（10:38）",[263,287,288],{},"合成と全単体テストがメモリ不足で止められた",[263,290,291],{},"変えたエンジン2ファイルの単体テストと、組3b 4本の全コマの指紋の確認に絞らせてコミットした",[263,293,294],{},"重いテストは担当分だけ流せば足りた",[239,296,297,300,303,306,309],{},[263,298,299],{},"3",[263,301,302],{},"Mac への引き継ぎ（13:31）",[263,304,305],{},"状態をチャット本文に出させたが、「Macに貼るの難しい」と訂正した",[263,307,308],{},"指示書をテキストファイルで Mac の受け取りフォルダに置かせた。入力欄の文字は Claude Code の予測だと指摘し、ブリッジを直させて依頼が届いた",[263,310,311],{},"別の機体へ渡すなら、ファイルのほうが扱いやすい",[239,313,314,317,320,323,326],{},[263,315,316],{},"4",[263,318,319],{},"CF精算表 Step 7（17:46）",[263,321,322],{},"MP4 の書き出しが始まっていた",[263,324,325],{},"止めさせた（7a、7b、7c の3本まで書き出し済み）",[263,327,328],{},"「最終版だけ MP4」の指示を、別のセッションにもう一度言うことになった",[239,330,331,334,337,340,343],{},[263,332,333],{},"5",[263,335,336],{},"サイドバー（06:19）",[263,338,339],{},"「セクション → チャプター → 動画」の3階層に組み直させた",[263,341,342],{},"「違う違う、ミラーカラムに」と訂正し、3列を経て2列に閉じるボタンの構成になった",[263,344,345],{},"頭にあったのは講座の「2列に閉じるボタン」だった",[239,347,348,351,354,357,360],{},[263,349,350],{},"6",[263,352,353],{},"カメラの手直し（12:23）",[263,355,356],{},"範囲を丸いつまみのドラッグで直そうとした",[263,358,359],{},"微修正がしづらく、4つの値を入力欄に常に出し、−/＋ で1ずつ直せる形にしてもらった",[263,361,362],{},"手直しは数値で指定するほうが速い",[239,364,365,368,371,374,377],{},[263,366,367],{},"7",[263,369,370],{},"Workers の実測（07:19）",[263,372,373],{},"メモリ価格の公開ページをパーサーに通させた",[263,375,376],{},"パース結果は0件。既存スクリプトの呼び方を確かめさせ、R2 の HTML をそのまま読ませると DRAM の4グループ、19品目が取れた",[263,378,379],{},"クラウドで動かす前に、手元の呼び方を写すほうが早い",[239,381,382,385,388,391,394],{},[263,383,384],{},"8",[263,386,387],{},"透かしの検証（09:59）",[263,389,390],{},"AudioSeal と WavMark の検出器を当てさせた",[263,392,393],{},"10分を超えてバックグラウンドに回り、GPU 版 torch で動かし直した。どちらからも透かしは出なかった",[263,395,396],{},"検出器を知らない透かしは確かめようがない",[239,398,399,402,405,408,411],{},[263,400,401],{},"9",[263,403,404],{},"プロンプト監査（06:52）",[263,406,407],{},"prompt-audit の patch を当てさせた",[263,409,410],{},"CRLF が崩れ、切り出し処理を作り直させた。記事の「103行減った」は「100行削除、3行追加」に直させた",[263,412,413],{},"patch は修正前の状態から作るので、直したあとは使えない",[74,415],{},[22,417,418],{"id":418},"今日の学び",[50,420,421,424,427,430],{},[53,422,423],{},"同じ重いテストを、セッションの数だけ流す必要はない。変えたファイルの単体テストと、既存動画の全コマの指紋で影響が無いことを示せば足りた",[53,425,426],{},"作業を別の機械へ移すと、成果物もそちらに残る。Mac で合成した音声は、取り寄せるまで Windows のプレビューで「音声なし」と出ていた",[53,428,429],{},"「クラウドに移せば make-diary が軽くなる」という見立ては、前日のログを測ると外れた。統計チェーンの伸びはサブエージェントの側で起きていた",[53,431,432],{},"音声入力で固有名を言うと、別の語に化けることがある。この日は「Wrangler」がディスク分析ツール2本のことだった",[74,434],{},[22,436,437],{"id":437},"明日やること",[50,439,442,452,458],{"className":440},[441],"contains-task-list",[53,443,446,451],{"className":444},[445],"task-list-item",[447,448],"input",{"disabled":449,"type":450},true,"checkbox"," CF精算表 Step 7 のカメラの手直しの共通点を確認して答える（判断3件）",[53,453,455,457],{"className":454},[445],[447,456],{"disabled":449,"type":450}," CF精算表 Step 7 総合演習の動画の確認の続き（7b 5:19〜、7a、7c〜7f、講義ノート）",[53,459,461,463],{"className":460},[445],[447,462],{"disabled":449,"type":450}," 関数の章の再現動画をプレビューで確認し、最終版の MP4 と Web への組み込みへ進める",[74,465],{},[22,467,468],{"id":468},"関連記事",[50,470,471,475,479,483,487],{},[53,472,473],{},[69,474,72],{"href":71},[53,476,477],{},[69,478,105],{"href":104},[53,480,481],{},[69,482,137],{"href":136},[53,484,485],{},[69,486,178],{"href":177},[53,488,489],{},[69,490,226],{"href":225},{"title":492,"searchDepth":493,"depth":493,"links":494},"",2,[495,496,504,505,506,507],{"id":24,"depth":493,"text":24},{"id":34,"depth":493,"text":34,"children":497},[498,500,501,502,503],{"id":38,"depth":499,"text":39},3,{"id":78,"depth":499,"text":79},{"id":110,"depth":499,"text":111},{"id":142,"depth":499,"text":143},{"id":183,"depth":499,"text":184},{"id":231,"depth":493,"text":231},{"id":418,"depth":493,"text":418},{"id":437,"depth":493,"text":437},{"id":468,"depth":493,"text":468},"diary",null,"講座動画づくりの並行セッションがメモリ不足で止まり、devサーバーの停止、テストの絞り込み、Macへの引き継ぎで乗り切った。レッスン画面のミラーカラム化、毎朝の統計取得をCloudflare Workersへ移す計画、無料TTS APIの検証、プロンプトの棚卸しも記録する。","md",{},"/2026-09-25-diary","daily-log",false,"2026-09-25T00:00:00.000Z",{"title":5,"description":510},"make-diary","2026-09/2026-09-25/diary-2026-09-25",[521,522,523,524,525,526],"日記","Claude Code","並列セッション","Excel講座","Cloudflare Workers","TTS","1hvF9qy4tvRStX6BYpXS2Yk-80EKaWeKMCzP7FExmFU",[],[530,534,538,541,544],{"title":531,"path":532,"publishedAt":533},"2026年9月24日の開発日記 - Excel講座とCF精算表の動画化を並列セッションで進め、TTSの読みを台本側で決めた","/2026-09-24-diary","2026-09-24T00:00:00.000Z",{"title":535,"path":536,"publishedAt":537},"2026年9月26日の開発日記 - 再現動画のレビュー画面づくりと、メモリで落ちるdevサーバー","/2026-09-26-diary","2026-09-26T00:00:00.000Z",{"title":539,"path":540,"publishedAt":537},"Nuxtのdevサーバーがheap out of memoryで落ちた原因：再現動画のシーン分割読み込みと終わらない回帰テスト","/excel-scene-dev-memory-split-loading",{"title":542,"path":543,"publishedAt":533},"Claude Codeの並列セッションでExcel操作動画を作る：CF精算表講座をStep 2〜5まで進めた一日","/cashflow-worksheet-video-parallel-sessions",{"title":545,"path":546,"publishedAt":533},"Excel講座の動画化：TTSの読み替えルールを決め、Excel操作の再現シーンで関数の章を組み直す","/excel-course-video-tts-and-functions-restructure","https://log.eurekapu.com/og/blog/2026-09-25-diary.png?v=2026-09-25T00%3A00%3A00.000Z&title=2026%E5%B9%B49%E6%9C%8825%E6%97%A5%E3%81%AE%E9%96%8B%E7%99%BA%E6%97%A5%E8%A8%98%20-%20%E4%B8%A6%E8%A1%8C%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%8C%E3%83%A1%E3%83%A2%E3%83%AA%E3%82%92%E5%8F%96%E3%82%8A%E5%90%88%E3%81%84%E3%80%81%E9%96%A2%E6%95%B0%E3%81%AE%E7%AB%A0%E3%82%92Mac%E3%81%B8%E9%80%81%E3%81%A3%E3%81%9F&author=Kei%20Komatsu&sig=98a73e2ba5942160",1790469281537]