[{"data":1,"prerenderedAt":382},["ShallowReactive",2],{"content-/excel-course-narration-mac-windows-split":3,"all-pages-for-dir":360,"related-/excel-course-narration-mac-windows-split":361,"og-image-/excel-course-narration-mac-windows-split":381},{"id":4,"title":5,"body":6,"category":338,"concepts":339,"description":340,"extension":341,"meta":342,"navigation":343,"ogImage":339,"path":344,"project_name":345,"published":346,"publishedAt":347,"seo":348,"source":349,"stem":350,"tags":351,"todo":339,"unpublished":346,"updatedAt":339,"__hash__":359},"pages/2026-09/2026-09-22/excel-course-narration-mac-windows-split.md","Excel講座のナレーションを本人の声で一括合成した日：Irodori-TTSをWindowsとMacで分担する",{"type":7,"value":8,"toc":327},"minimark",[9,14,18,21,26,34,37,40,43,46,53,60,64,67,70,73,76,79,83,86,97,108,111,133,137,140,143,146,269,272,275,278,285,288,291,294,297,304,307,324],[10,11,13],"h1",{"id":12},"excel講座のナレーションを本人の声で一括合成した日","Excel講座のナレーションを本人の声で一括合成した日",[15,16,17],"p",{},"Excel基礎講座（eurekapu-nuxt4）のナレーションは、台本を書き、本人の声で合成し、R2 へ上げるという3工程で作る。\nこの日は、章2と章3、さらに残りの7ページまでをこの3工程で回した。",[15,19,20],{},"途中で、Mac にも合成を分担させることにした。\nMac の速度は Windows の半分くらいだったはずだ、という記憶が頭の隅に残っていた。",[22,23,25],"h2",{"id":24},"台本は5体ずつ下書きさせて全文を読ませてから差し込む","台本は5体ずつ下書きさせて、全文を読ませてから差し込む",[15,27,28,29,33],{},"章2は、動画3本の画面変化の時刻を測るところから始めた。\n書式設定の動画は、止める位置（",[30,31,32],"code",{},"holdAt","）が4.5秒、8.0秒、16.3秒、18.4秒に決まった。\n章2の25区間のうち、動画のない22区間は台本を JSON にまとめてスクリプトで講座データへ差し込み、動画つきの3区間（検算、書式設定、列幅1）は手で編集させた。",[15,35,36],{},"章3は、サブエージェント5体に66区間の下書きを分けて書かせた。\n内訳は、絶対参照が13区間、SUMIFS と INDIRECT が12区間、VLOOKUP が10区間、INDEX/MATCH が13区間、残りの1体が18区間である。",[15,38,39],{},"下書きが戻るたびに、親セッションの Claude Code に全文を読ませてから、講座データへ差し込ませる。\n差し込んだあとは静的検査と、ブラウザでのセレクタ検査を通す。\nこの順番を崩さなかった。",[15,41,42],{},"レビューで引っかかった点もある。\n絶対参照の担当が「演習 c01-s00 は動画が2本ある」と申し送ってきた。\n差し込みスクリプトは1区間に動画1本の前提で書いていたので、スクリプトを拡張し、作業中の3体にも同じ形で書くよう伝えた。\n2拍を直したときは、同じ落とし穴を残りの下書きで機械的に拾えるよう、差し込みスクリプトの検査に1条件足した。",[15,44,45],{},"章3の拍つき24区間の111拍は、どれも見えている要素ちょうど1つに当たった。\n53区間まで入った時点で、289クリップ、44,128字になっていた。",[15,47,48,49,52],{},"1回目の学びは共通ルール（BRIEF.md）に書き足し、2回目の5体を残り7ページの86区間に向けて起動した。\n2回目もほぼ同じ流れで進んだ。\nただ、最後の演習の3区間は動画が 404（",[30,50,51],{},"aaa.mp4","）を返したため、未完のまま残した。",[15,54,55,56,59],{},"コミット ",[30,57,58],{},"48120003"," では、差分が 3,274 行あり、Codex レビューは今回もタイムアウトした。",[22,61,63],{"id":62},"_1区間に10分かかっていた","1区間に10分かかっていた",[15,65,66],{},"合成は Irodori-TTS で、参照音声には本人の声を使う。\n先に合成したⅡページは、6本で通し4分50秒だった。\n47文を717秒、1文あたり約15秒で合成したことになる。",[15,68,69],{},"章3の合成を回していると、完了数が9分ほど14のまま動かなくなった。\n止まっていないか確かめてもらうと、GPU は 99% で、最新の生成ファイルは 09:44:33 に書かれていた。\n動いてはいた。\n文数の多い区間で10分ほどかかっていて、常駐している音声入力と NVIDIA Broadcast が GPU を取り合っていた。",[15,71,72],{},"NVIDIA Broadcast はその場で自分で終了した。\n自分では気づかないときがあるので、音声を生成するときは Claude Code が Broadcast を止めてよい、と許可も出した。\n合成スクリプトが自動で止めるように変えてもらい、許可したことも記録に残させた。",[15,74,75],{},"もっとも、その直後に測ってもらうと、遅さの主因は別にあるという答えが返ってきた。\nBroadcast を止めただけで片づく話ではなかったらしい。",[15,77,78],{},"章3は、10:02 に17区間、10:21 に21区間、11:19 に41区間まで進んだ。\n完了した区間は、すべてグリッド検査を通っていた。",[22,80,82],{"id":81},"参照音声は-irodori-tts-のフォルダに入っていなかった","参照音声は Irodori-TTS のフォルダに入っていなかった",[15,84,85],{},"Mac に合成を分担させるには、Mac 側にも参照音声（本人の声の元データ）がそろっていなければならない。\nそこで、ローカルの Irodori-TTS に参照音声が入っているかを確かめさせた。",[15,87,88,89,92,93,96],{},"入っていなかった。\n",[30,90,91],{},"C:\\Users\\numbe\\Git_repo\\Irodori-TTS"," は作者（Aratako）の公開リポジトリをクローンしただけのもので、remote も ",[30,94,95],{},"Aratako/Irodori-TTS"," だった。\n自分の GitHub にフォークもない。\n参照音声は untracked のファイルとして置かれているだけだった。",[15,98,99,100,103,104,107],{},"このフォルダごと自分の private リポジトリとして push する案も出た（ライセンスは Apache-2.0）。\n最終的には、参照音声だけを入れた private リポジトリ ",[30,101,102],{},"keikomatsu/irodori-refs"," を ",[30,105,106],{},"Git_repo"," 直下に置き、これを正本にした。",[15,109,110],{},"8月に Mac で録音した分もここに入れた。\n合成のキャッシュの鍵にファイルの更新時刻が入っているため、更新時刻を保ったまま入れ直してもらった。\nIrodori-TTS の中のフォルダをリンクに置き換える作業は、合成がそこを読んでいる最中だったので後回しにした。",[15,112,113,114,117,118,103,121,124,125,128,129,132],{},"Mac 側からは、",[30,115,116],{},"record.sh"," と ",[30,119,120],{},"読み上げ台本.md",[30,122,123],{},"refs-mac-2026-08/"," に足して push した（",[30,126,127],{},"master"," ",[30,130,131],{},"53c4c03","）という報告が届いた。\nMac が報告してきたハッシュと Windows の原本を突き合わせ、GitHub 上の中身も直接見て、渡せていることを確かめた。",[22,134,136],{"id":135},"mac-は本当に半分の速さなのか","Mac は本当に半分の速さなのか",[15,138,139],{},"Windows から Mac へは、cross-machine-message の LAN 直送で指示を送る。\n最初に送ったときは Mac 側のブリッジが応答せず、タイムアウトした。\n11:31 に Mac から疎通テストが届き、ここから経路がつながった。",[15,141,142],{},"分担は、Mac が donts 以降のページを合成して R2 へ上げ、Windows はその到着を監視して取り戻す形にした。\nMac の速度は Windows の半分くらいではなかったか、と聞いたときの答えは、半分でも248クリップなら2〜3時間で終わるので割り振る価値はある、というものだった。\nMac 用のアップロードと、Windows 用の取り戻しのスクリプトを1本ずつ書いてもらった。",[15,144,145],{},"Mac からの完了報告は、ページごとに届いた。",[147,148,149,168],"table",{},[150,151,152],"thead",{},[153,154,155,159,162,165],"tr",{},[156,157,158],"th",{},"ページ",[156,160,161],{},"区間",[156,163,164],{},"クリップ",[156,166,167],{},"合計",[169,170,171,186,200,214,228,242,255],"tbody",{},[153,172,173,177,180,183],{},[174,175,176],"td",{},"donts",[174,178,179],{},"24",[174,181,182],{},"105",[174,184,185],{},"48分06秒",[153,187,188,191,194,197],{},[174,189,190],{},"readable-sheets",[174,192,193],{},"26",[174,195,196],{},"143",[174,198,199],{},"3144.0s",[153,201,202,205,208,211],{},[174,203,204],{},"naming-rules",[174,206,207],{},"10",[174,209,210],{},"51",[174,212,213],{},"872.0s",[153,215,216,219,222,225],{},[174,217,218],{},"Stream Deck",[174,220,221],{},"9",[174,223,224],{},"52",[174,226,227],{},"24分12秒",[153,229,230,233,236,239],{},[174,231,232],{},"hardware",[174,234,235],{},"3",[174,237,238],{},"22",[174,240,241],{},"604.0s",[153,243,244,247,250,252],{},[174,245,246],{},"ai-tools",[174,248,249],{},"4",[174,251,238],{},[174,253,254],{},"9分38秒",[153,256,257,260,263,266],{},[174,258,259],{},"exercises",[174,261,262],{},"7",[174,264,265],{},"47",[174,267,268],{},"1666.0s",[15,270,271],{},"どのページもグリッド検査の NG は0件だった。\nWindows 側で取り戻したあと、通し時間が manifest の秒数と一致するか（Stream Deck なら 3:04 と184秒）を確かめ、再生位置が進むことまで見てもらった。",[15,273,274],{},"Stream Deck の時点で出た Mac の速度は、1文5.5秒だった。\n朝のⅡページは Windows で1文約15秒だったので、数字の上では半分どころではない。\nただ、Ⅱページは GPU の取り合いがあった時間帯の値で、条件がそろった比較ではない。",[22,276,277],{"id":277},"連鎖スクリプトが止められた",[15,279,280,281,284],{},"分担を決める前、Windows では、章3のあとに残りのページも続けて合成する chain-synth.sh を走らせていた。\n章3の完了後に R2 へ上げるだけの縮小版 chain-functions-only.sh は、11:48 から動かしてあった。\nMac に donts 以降を任せたので、古い連鎖は自分で ",[30,282,283],{},"kill 40311"," して止めた。",[15,286,287],{},"その縮小版が、システムのメモリ不足を理由に Claude Code 側で停止された。\n処理自体が失敗したわけではない。\n章3の合成自体は exit code 0 で終わっており、R2 へのアップロード（436 ファイル、979MB）はその後に進めてもらった。",[15,289,290],{},"章3の実測は 370 クリップ、2時間57分44秒で、推定の2時間56分とほぼ一致した。",[22,292,293],{"id":293},"字数と長さを表にまとめる",[15,295,296],{},"計画書の表に「字数」と「長さ（実測・推定）」の2列を足してもらった。\n合計は 161,140 字、約7時間44分である。\n表が狭かったので、表だけ max-width を外してもらい、幅は 812px から 1100px に広がった。\n11列が横 1076px に収まることを Chrome で確かめた。",[15,298,299,300,303],{},"完成した音声は、Stream Deck の時点で 948 本、ai-tools の時点で 992 本になった。\n最後の exercises が届いて、Mac 担当の7ページはすべて R2 に上がった。\n記録のコミットでは、197 区間の本数にⅡページの6本が混ざっていると Codex に指摘され、集計範囲を分けて書き直した（",[30,301,302],{},"d8d01448","）。",[22,305,306],{"id":306},"学びメモ",[308,309,310,314,321],"ul",{},[311,312,313],"li",{},"台本の下書きは5体ずつに分けても、差し込む前に親セッションへ全文を読ませる手順を外さなかった。申し送りで動画が2本ある区間が見つかれば差し込みスクリプトを拡張し、レビューで直した落とし穴は検査条件に足して、残りの下書きでも機械的に拾えるようにした。",[311,315,316,317,320],{},"ローカルの Irodori-TTS は公開リポジトリのクローンで、自分の声はそこに入っていなかった。コードは借り物として置き、参照音声だけを private の ",[30,318,319],{},"irodori-refs"," に集めたので、Mac は clone するだけで同じ声を使える。",[311,322,323],{},"9分動かない進捗は、止まっていたのではなく1区間に10分かかっていた。GPU の使用率と最新ファイルの時刻を見れば、止まったかどうかは判断できる。",[15,325,326],{},"Mac は半分の速さだという記憶は、1文5.5秒という数字の前でぐらついた。\nただ、同じ条件で両機を測った値はまだない。",{"title":328,"searchDepth":329,"depth":329,"links":330},"",2,[331,332,333,334,335,336,337],{"id":24,"depth":329,"text":25},{"id":62,"depth":329,"text":63},{"id":81,"depth":329,"text":82},{"id":135,"depth":329,"text":136},{"id":277,"depth":329,"text":277},{"id":293,"depth":329,"text":293},{"id":306,"depth":329,"text":306},"dev",null,"Excel基礎講座の台本をサブエージェント5体ずつで下書きし、全文レビューして講座データへ差し込んだ。Irodori-TTSで本人の声を合成し、GPUの取り合い、参照音声の置き場、Macとの分担、メモリ不足での停止を経て、全ページの音声がそろうまでの記録。","md",{},true,"/excel-course-narration-mac-windows-split","eurekapu-nuxt4",false,"2026-09-22T00:00:00.000Z",{"title":5,"description":340},"make-diary","2026-09/2026-09-22/excel-course-narration-mac-windows-split",[352,353,354,355,356,357,358],"Irodori-TTS","音声合成","Excel講座","Claude Code","サブエージェント","Mac","Windows","58BssYDM_DeCJLYepU3zMF_XZMrnS0UaWkhLKfNvYUo",[],[362,366,370,374,377],{"title":363,"path":364,"publishedAt":365},"Irodori-TTSでExcel講座のナレーションを本人の声に：読み替え辞書を削ったら、残ったのはセル番地の数字だけ","/excel-course-narration-reading-dictionary","2026-09-21T00:00:00.000Z",{"title":367,"path":368,"publishedAt":369},"2026年8月28日の開発日記 - 音声デモを分割し、サイトを画面から直す","/2026-08-28-diary","2026-08-28T00:00:00.000Z",{"title":371,"path":372,"publishedAt":373},"2026年9月19日の開発日記 - 「出ない」の正体は値の欠落ではなく名前の不一致だった","/2026-09-19-diary","2026-09-19T00:00:00.000Z",{"title":375,"path":376,"publishedAt":373},"make-diaryの削減は4.6万トークン止まり、基準にした前日の統合日記が軽すぎた","/make-diary-context-reduction-verified",{"title":378,"path":379,"publishedAt":380},"Claude Codeのコンテキスト消費をセッションログで実測し、make-diaryの最大工程をサブエージェントへ委譲した","/make-diary-token-audit-delegation","2026-09-18T00:00:00.000Z","https://log.eurekapu.com/og/blog/excel-course-narration-mac-windows-split.png?v=2026-09-22T00%3A00%3A00.000Z&title=Excel%E8%AC%9B%E5%BA%A7%E3%81%AE%E3%83%8A%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E6%9C%AC%E4%BA%BA%E3%81%AE%E5%A3%B0%E3%81%A7%E4%B8%80%E6%8B%AC%E5%90%88%E6%88%90%E3%81%97%E3%81%9F%E6%97%A5%EF%BC%9AIrodori-TTS%E3%82%92Windows%E3%81%A8Mac%E3%81%A7%E5%88%86%E6%8B%85%E3%81%99%E3%82%8B&author=Kei%20Komatsu&sig=276cfb587b96e1a8",1790132222768]