[{"data":1,"prerenderedAt":419},["ShallowReactive",2],{"content-/cashflow-statement-content-production":3,"all-pages-for-dir":417,"og-image-/cashflow-statement-content-production":418},{"id":4,"title":5,"body":6,"category":399,"description":400,"extension":401,"meta":402,"navigation":127,"ogImage":403,"path":404,"project_name":405,"published":406,"publishedAt":407,"seo":408,"stem":409,"tags":410,"todo":403,"unpublished":406,"updatedAt":403,"__hash__":416},"pages/2026-04/2026-03-31/cashflow-statement-content-production.md","CF計算書教材コンテンツの一気通貫制作 - 目次設計からSVGスライド70枚まで",{"type":7,"value":8,"toc":385},"minimark",[9,14,18,23,31,48,51,55,58,61,65,68,71,180,183,186,200,203,206,213,217,220,224,227,230,233,237,240,243,246,249,301,305,308,363,369,372,375,378,381],[10,11,13],"h1",{"id":12},"cf計算書教材コンテンツの一気通貫制作","CF計算書教材コンテンツの一気通貫制作",[15,16,17],"p",{},"CF計算書の参考書をベースに、簿記3級編と2級編の教材コンテンツを丸一日かけて組み上げた。目次HTMLの設計から始まり、Miller Viewer対応、SVGスライド70枚の制作、テキスト全チャプター完成まで一本道で走り切った。",[19,20,22],"h2",{"id":21},"目次htmltocの設計と2部構成","目次HTML（TOC）の設計と2部構成",[15,24,25,26,30],{},"まず ",[27,28,29],"code",{},"cf_content_toc_v3.html"," をプロジェクトに保存した。構成は以下の通り。",[32,33,34,42],"ul",{},[35,36,37,41],"li",{},[38,39,40],"strong",{},"簿記3級編",": Ch0（CF計算書とは）〜Ch5（CF計算書の作成手順）＋総合演習",[35,43,44,47],{},[38,45,46],{},"簿記2級編",": Ch1（間接法の詳細）〜Ch8（連結CF計算書）＋総合演習",[15,49,50],{},"参考書の章立てをそのまま踏襲しつつ、3級と2級で独立したセクションに分けた。",[19,52,54],{"id":53},"トップページとmiller-viewer対応","トップページとMiller Viewer対応",[15,56,57],{},"トップページにトピックカードを2つ追加し（CF計算書3級編・2級編）、グリッドレイアウトを3列x2行に変更した。各トピックカードから講義ノートページに遷移する構成。",[15,59,60],{},"講義ノートページ（3級・2級それぞれ）はMiller Viewer対応で作成した。左ペインでチャプターを選ぶと右ペインにスライドが表示される形式。",[19,62,64],{"id":63},"配列分割のデバッグセクション混在問題","配列分割のデバッグ：セクション混在問題",[15,66,67],{},"ここで最初の壁にぶつかった。全チャプターが1つの配列にまとまっていたため、3級編のセクションを選んでも2級編のチャプターが混ざって表示される。",[15,69,70],{},"原因はシンプルで、TOCから生成したMillerデータが単一のフラット配列だった。3級編と2級編でセクションごとに配列を分割し、選択中のセクションに応じて表示対象を切り替えるようにした。",[72,73,78],"pre",{"className":74,"code":75,"language":76,"meta":77,"style":77},"language-typescript shiki shiki-themes vitesse-light vitesse-light","// Before: 全チャプターが1配列\nconst allChapters = [...grade3Chapters, ...grade2Chapters]\n\n// After: セクションごとに分割\nconst grade3Data = { chapters: grade3Chapters }\nconst grade2Data = { chapters: grade2Chapters }\n","typescript","",[27,79,80,89,122,129,135,160],{"__ignoreMap":77},[81,82,85],"span",{"class":83,"line":84},"line",1,[81,86,88],{"class":87},"sxvE3","// Before: 全チャプターが1配列\n",[81,90,92,96,100,104,107,110,113,116,119],{"class":83,"line":91},2,[81,93,95],{"class":94},"stQ0i","const ",[81,97,99],{"class":98},"s4oTP","allChapters",[81,101,103],{"class":102},"shFtX"," =",[81,105,106],{"class":102}," [...",[81,108,109],{"class":98},"grade3Chapters",[81,111,112],{"class":102},",",[81,114,115],{"class":102}," ...",[81,117,118],{"class":98},"grade2Chapters",[81,120,121],{"class":102},"]\n",[81,123,125],{"class":83,"line":124},3,[81,126,128],{"emptyLinePlaceholder":127},true,"\n",[81,130,132],{"class":83,"line":131},4,[81,133,134],{"class":87},"// After: セクションごとに分割\n",[81,136,138,140,143,145,148,152,155,157],{"class":83,"line":137},5,[81,139,95],{"class":94},[81,141,142],{"class":98},"grade3Data",[81,144,103],{"class":102},[81,146,147],{"class":102}," { ",[81,149,151],{"class":150},"sz8Xr","chapters",[81,153,154],{"class":102},": ",[81,156,109],{"class":98},[81,158,159],{"class":102}," }\n",[81,161,163,165,168,170,172,174,176,178],{"class":83,"line":162},6,[81,164,95],{"class":94},[81,166,167],{"class":98},"grade2Data",[81,169,103],{"class":102},[81,171,147],{"class":102},[81,173,151],{"class":150},[81,175,154],{"class":102},[81,177,118],{"class":98},[81,179,159],{"class":102},[19,181,182],{"id":182},"name不一致のデバッグ",[15,184,185],{},"配列分割で構造上の問題は解消したが、今度はチャプターを選択しても対応するスライドが表示されない。Miller Viewerの左ペインでクリックしても右ペインが空のまま。",[15,187,188,189,192,193,196,197,199],{},"ログを仕込んで突き止めた原因は、TOCの ",[27,190,191],{},"children"," の ",[27,194,195],{},"name"," プロパティとMillerデータ側の ",[27,198,195],{}," が微妙に食い違っていたこと。TOC側は「Ch1 間接法の詳細」、データ側は「Ch1: 間接法の詳細」のように区切り文字が異なっていた。完全一致でマッチングしているため、1文字でもずれると表示されない。",[15,201,202],{},"TOC側とデータ側の名前を統一して解消。地味だが、一致しないときにエラーも警告も出ないため、発見までログ出力頼みだった。",[19,204,205],{"id":205},"コンテンツ一覧ページの新設",[15,207,208,209,212],{},"全チャプターを俯瞰できるコンテンツ一覧ページ（",[27,210,211],{},"index.vue","）を新設した。スクロールで3級・2級の全チャプターとスライド枚数を確認できる。制作の進捗管理にも使える。",[19,214,216],{"id":215},"svgプレースホルダー96枚の一括生成","SVGプレースホルダー96枚の一括生成",[15,218,219],{},"全チャプターのタイトルカードとして、SVGプレースホルダーを96枚一括生成した。チャプター名・セクション名をSVG内に埋め込み、スライドの枠だけ先に用意する方式。これで全スロットが可視化され、どこが未着手か一目でわかるようになった。",[19,221,223],{"id":222},"ch1-2のテキスト拡充とスライド制作17枚","Ch1-2のテキスト拡充とスライド制作（17枚）",[15,225,226],{},"Ch1（CF計算書とは）とCh2（営業活動によるCF）のテキストを拡充し、数値例を埋め込んだ。",[15,228,229],{},"品質ゲートとして検算を実施。借入金利2%での利息計算、定額法5年での減価償却費算出など、スライドに載せる数値が参考書の記述と整合するか一つずつ確認した。検算で1箇所、減価償却の端数処理が参考書と異なっていたのを修正。",[15,231,232],{},"この2チャプターで教材スライドSVGを17枚制作した。",[19,234,236],{"id":235},"ch3-5総合演習のテキスト拡充とスライド制作19枚","Ch3-5＋総合演習のテキスト拡充とスライド制作（19枚）",[15,238,239],{},"続けてCh3（投資活動によるCF）〜Ch5（CF計算書の作成手順）と総合演習のテキストを拡充。同様に品質ゲート検算を通し、SVGスライドを19枚制作した。",[15,241,242],{},"ここまでで3級編の全チャプターのテキストとスライドが完成した。",[19,244,245],{"id":245},"制作物の集計",[15,247,248],{},"一日の成果を数字で振り返る。",[250,251,252,265],"table",{},[253,254,255],"thead",{},[256,257,258,262],"tr",{},[259,260,261],"th",{},"項目",[259,263,264],{},"数量",[266,267,268,277,285,293],"tbody",{},[256,269,270,274],{},[271,272,273],"td",{},"SVGスライド（教材）",[271,275,276],{},"70枚",[256,278,279,282],{},[271,280,281],{},"SVGプレースホルダー",[271,283,284],{},"96枚",[256,286,287,290],{},[271,288,289],{},"テキスト完成チャプター",[271,291,292],{},"3級編全チャプター",[256,294,295,298],{},[271,296,297],{},"新設ページ",[271,299,300],{},"3ページ（講義ノート3級・2級、一覧）",[19,302,304],{"id":303},"git-lfs-pushの132-unknown-objects問題","Git LFS pushの132 unknown objects問題",[15,306,307],{},"全ファイルをコミットしてpushしたところ、Git LFSが132個のunknown objectsを検出してpushが止まった。LFS管理下のファイルが先にアップロードされていなかったのが原因。",[72,309,313],{"className":310,"code":311,"language":312,"meta":77,"style":77},"language-bash shiki shiki-themes vitesse-light vitesse-light","# pushが拒否された後の対処\ngit lfs push origin master\n# → 2,882 objects, 188 MB をアップロード\n\ngit push origin master\n# → 成功\n","bash",[27,314,315,320,339,344,348,358],{"__ignoreMap":77},[81,316,317],{"class":83,"line":84},[81,318,319],{"class":87},"# pushが拒否された後の対処\n",[81,321,322,326,330,333,336],{"class":83,"line":91},[81,323,325],{"class":324},"senZ8","git",[81,327,329],{"class":328},"sdGka"," lfs",[81,331,332],{"class":328}," push",[81,334,335],{"class":328}," origin",[81,337,338],{"class":328}," master\n",[81,340,341],{"class":83,"line":124},[81,342,343],{"class":87},"# → 2,882 objects, 188 MB をアップロード\n",[81,345,346],{"class":83,"line":131},[81,347,128],{"emptyLinePlaceholder":127},[81,349,350,352,354,356],{"class":83,"line":137},[81,351,325],{"class":324},[81,353,332],{"class":328},[81,355,335],{"class":328},[81,357,338],{"class":328},[81,359,360],{"class":83,"line":162},[81,361,362],{"class":87},"# → 成功\n",[15,364,365,368],{},[27,366,367],{},"git lfs push"," で明示的にLFSオブジェクトをアップロードしてから通常のpushを実行して解決。SVGファイルを大量に追加したときはLFS pushを先に走らせる手順を忘れないこと。",[19,370,371],{"id":371},"次セッション用の制作計画書",[15,373,374],{},"2級編（Ch1-8＋総合演習）のテキスト拡充とスライド制作に向けた計画書を作成した。Codexレビューを通し、チャプターごとの想定スライド枚数と品質ゲートの手順を整理した。",[19,376,377],{"id":377},"振り返り",[15,379,380],{},"一日で70枚のSVGスライドを制作し、3級編の全チャプターテキストを書き上げた。配列分割とname不一致のデバッグで1時間ほど手が止まったが、ログを仕込んで原因を特定するという基本に立ち返って解決した。Git LFSの手順も次回から迷わない。2級編は計画書に沿って進めれば、同じペースで完走できる見込み。",[382,383,384],"style",{},"html pre.shiki code .sxvE3, html code.shiki .sxvE3{--shiki-default:#A0ADA0;--shiki-dark:#A0ADA0}html pre.shiki code .stQ0i, html code.shiki .stQ0i{--shiki-default:#AB5959;--shiki-dark:#AB5959}html pre.shiki code .s4oTP, html code.shiki .s4oTP{--shiki-default:#B07D48;--shiki-dark:#B07D48}html pre.shiki code .shFtX, html code.shiki .shFtX{--shiki-default:#999999;--shiki-dark:#999999}html pre.shiki code .sz8Xr, html code.shiki .sz8Xr{--shiki-default:#998418;--shiki-dark:#998418}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .senZ8, html code.shiki .senZ8{--shiki-default:#59873A;--shiki-dark:#59873A}html pre.shiki code .sdGka, html code.shiki .sdGka{--shiki-default:#B56959;--shiki-dark:#B56959}",{"title":77,"searchDepth":91,"depth":91,"links":386},[387,388,389,390,391,392,393,394,395,396,397,398],{"id":21,"depth":91,"text":22},{"id":53,"depth":91,"text":54},{"id":63,"depth":91,"text":64},{"id":182,"depth":91,"text":182},{"id":205,"depth":91,"text":205},{"id":215,"depth":91,"text":216},{"id":222,"depth":91,"text":223},{"id":235,"depth":91,"text":236},{"id":245,"depth":91,"text":245},{"id":303,"depth":91,"text":304},{"id":371,"depth":91,"text":371},{"id":377,"depth":91,"text":377},"dev","簿記3級・2級のCF計算書教材を一日で制作。Miller Viewer対応のTOC設計、配列分割のデバッグ、SVGスライド70枚の一括生成、Git LFS問題の解決までを記録","md",{},null,"/cashflow-statement-content-production","eurekapu-nuxt4",false,"2026-03-31T00:00:00.000Z",{"title":5,"description":400},"2026-04/2026-03-31/cashflow-statement-content-production",[411,412,413,414,415],"CF計算書","教材制作","SVG","Miller Viewer","Git LFS","uL6_L48rSEFyf0jj03k8n3qz4Sq4nTDoXAH0OJ5Hobw",[],"https://log.eurekapu.com/og/blog/cashflow-statement-content-production.png?v=2026-03-31T00%3A00%3A00.000Z&title=CF%E8%A8%88%E7%AE%97%E6%9B%B8%E6%95%99%E6%9D%90%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84%E3%81%AE%E4%B8%80%E6%B0%97%E9%80%9A%E8%B2%AB%E5%88%B6%E4%BD%9C%20-%20%E7%9B%AE%E6%AC%A1%E8%A8%AD%E8%A8%88%E3%81%8B%E3%82%89SVG%E3%82%B9%E3%83%A9%E3%82%A4%E3%83%8970%E6%9E%9A%E3%81%BE%E3%81%A7&author=Kei%20Komatsu&sig=e31b061b5af2217e",1782528822594]