[{"data":1,"prerenderedAt":482},["ShallowReactive",2],{"content-/2026-04-21-diary":3,"all-pages-for-dir":480,"og-image-/2026-04-21-diary":481},{"id":4,"title":5,"body":6,"category":459,"description":460,"extension":461,"meta":462,"navigation":410,"path":463,"project_name":464,"published":465,"publishedAt":466,"seo":467,"stem":468,"tags":469,"todo":478,"updatedAt":478,"__hash__":479},"pages/2026-04/2026-04-21/diary-2026-04-21.md","2026年4月21日の開発日記 - CF教材を丸一日かけて作り直し、note.com連携と別表コンテンツも並行で進めた",{"type":7,"value":8,"toc":444},"minimark",[9,14,18,22,29,32,37,40,43,46,52,71,82,85,89,97,100,104,115,123,125,129,132,135,139,153,161,163,166,354,356,359,394,396,399,425,427,430],[10,11,13],"h1",{"id":12},"_2026年4月21日の開発日記","2026年4月21日の開発日記",[15,16,17],"p",{},"朝6時台からeurekapu-nuxt4のCF計算書ステップ教材に取りかかり、深夜まで12時間以上を注ぎ込んだ。基礎知識の5分割、SVG図の量産、会計基準参照の改善、コンポーネント化と、教材の質を根本から引き上げる作業が連続した。合間にnote.comの内部APIを解析してChrome拡張を作り、別表四・五の10章分ドラフトもAI並列生成で一気に仕上げた。",[19,20,21],"h2",{"id":21},"今日のタイムライン",[15,23,24],{},[25,26],"img",{"alt":27,"src":28},"タイムライン","/2026-04/2026-04-21/timeline-2026-04-21.png",[19,30,31],{"id":31},"今日やったこと",[33,34,36],"h3",{"id":35},"_1-cf計算書ステップ教材の全面改訂12時間超","1. CF計算書ステップ教材の全面改訂（12時間超）",[15,38,39],{},"1ファイルに詰め込まれていた基礎知識（Ch0）を5ページに分割し、教材タイトルを「Excelで作るキャッシュ・フロー計算書」に決定した。SEO調査でこのキーワードの検索ボリュームが最も大きいことを確認している。",[15,41,42],{},"BS/PL/CFの略語を全ステップファイルで正式名称に統一し、SVG図を各ステップに大量追加した。学習の全体像を示すSVG（Step1〜7の独立論点構造図）、ニューアートの直接法vs間接法の実数値比較SVG、ウォーターフォールチャートなど、テキスト説明をSVG図に置き換えることで理解しやすさが跳ね上がった。",[15,44,45],{},"会社法条文をStandardRefシステムに追加し、StepNavを共通コンポーネント化。12ページのナビゲーションリンクを統一した。",[15,47,48],{},[49,50,51],"strong",{},"主な成果:",[53,54,55,59,62,65,68],"ul",{},[56,57,58],"li",{},"Ch0を5ページに分割（はじめに / 活動区分 / 間接法 / 作成方法 / まとめ）",[56,60,61],{},"全ステップのBS/PL/CF略語を正式名称に統一",[56,63,64],{},"SVG図を20枚以上新規作成",[56,66,67],{},"StepNavコンポーネント化で12ページのナビ統一",[56,69,70],{},"会社法第34条・第445条をStandardRefに追加",[15,72,73,76,77],{},[49,74,75],{},"詳細:"," ",[78,79,81],"a",{"href":80},"/cf-statement-step-learning-overhaul","CF計算書ステップ教材を5分割・正式名称統一・SVG量産で作り直した記録",[83,84],"hr",{},[33,86,88],{"id":87},"_2-notecom-chrome拡張の開発","2. note.com Chrome拡張の開発",[15,90,91,92,96],{},"Chrome DevTools MCPでnote.comの内部APIを傍受し、下書き保存APIのフォーマットを解明した。XSRF-TOKENが不要で",[93,94,95],"code",{},"X-Requested-With","ヘッダーだけで認証が通る発見が大きい。画像アップロードではアイキャッチ用エンドポイントだとクロップされる問題にぶつかり、presigned URL + curlでS3直接アップロードする方式にたどり着いた。",[15,98,99],{},"Chrome拡張をchrome-extension-noteとして独立リポジトリに分離し、note-draftスキルを定義した。",[15,101,102],{},[49,103,51],{},[53,105,106,109,112],{},[56,107,108],{},"note.comの下書き保存API・画像アップロードAPIを完全に解明",[56,110,111],{},"Chrome拡張をGitHubにpush",[56,113,114],{},"note-draftスキルでMDX記事→note.com下書き自動保存を実現",[15,116,117,76,119],{},[49,118,75],{},[78,120,122],{"href":121},"/book-ocr-and-note-extension","書籍OCRパイプラインとnote.com Chrome拡張の内部API解析",[83,124],{},[33,126,128],{"id":127},"_3-別表四五の解説コンテンツ一括生成","3. 別表四・五の解説コンテンツ一括生成",[15,130,131],{},"専門書287ページをyomitoku OCRでMarkdown変換し、Turso DBに280チャンクとして格納した。そのデータをEmbedded Replicaから読み取り、4つのサブエージェントで10章分のマークダウンドラフトを並列生成。全章をCodex（GPT-5.4）でレビューし、致命的な指摘を修正した。",[15,133,134],{},"SVG図では別表五(一)+株主資本等変動計算書の連動図、B/S+別表五(一)の連結図、別表四のフロー図を作成。矢印のZ軸がテーブル背景に隠れる問題をSVG要素の描画順で解決した。",[15,136,137],{},[49,138,51],{},[53,140,141,144,147,150],{},[56,142,143],{},"10章分のドラフトMD + 22個のプレースホルダーSVG",[56,145,146],{},"Codex全章レビュー → 致命的指摘を修正",[56,148,149],{},"別表関連SVG図を5枚作成",[56,151,152],{},"ドラフトページにカテゴリ切替UI追加（Phase 1完了）",[15,154,155,76,157],{},[49,156,75],{},[78,158,160],{"href":159},"/beppyo-content-draft-creation","別表四・五の解説コンテンツをTurso DBから一括生成しCodexで全章レビューした記録",[83,162],{},[19,164,165],{"id":165},"今日の試行錯誤",[167,168,169,191],"table",{},[170,171,172],"thead",{},[173,174,175,179,182,185,188],"tr",{},[176,177,178],"th",{},"#",[176,180,181],{},"テーマ",[176,183,184],{},"試したこと",[176,186,187],{},"結果",[176,189,190],{},"気づき",[192,193,194,215,231,247,267,287,304,321,338],"tbody",{},[173,195,196,200,203,206,209],{},[197,198,199],"td",{},"1",[197,201,202],{},"note.com画像アップロード",[197,204,205],{},"アイキャッチ用エンドポイントで画像送信",[197,207,208],{},"失敗（クロップされる）",[197,210,211,214],{},[93,212,213],{},"rectangle_large_type_2","のリサイズが自動適用される",[173,216,217,220,222,225,228],{},[197,218,219],{},"2",[197,221,202],{},[197,223,224],{},"presigned URL + evaluate_scriptでS3送信",[197,226,227],{},"失敗（CORS制限）",[197,229,230],{},"ブラウザJSからS3直接は不可",[173,232,233,236,238,241,244],{},[197,234,235],{},"3",[197,237,202],{},[197,239,240],{},"presigned URL + curlでS3送信",[197,242,243],{},"成功",[197,245,246],{},"curl経由ならCORS制限を回避できる",[173,248,249,252,255,261,264],{},[197,250,251],{},"4",[197,253,254],{},"note.com下書き保存",[197,256,257,260],{},[93,258,259],{},"{note: {name, body...}}","形式で送信",[197,262,263],{},"失敗（保存されない）",[197,265,266],{},"トップレベルに直接フィールドを置く必要がある",[173,268,269,272,275,281,284],{},[197,270,271],{},"5",[197,273,274],{},"SVG表示（クライアントサイド遷移）",[197,276,277,280],{},[93,278,279],{},":key","をslotやmainに追加",[197,282,283],{},"失敗（/&/images/パスバグ）",[197,285,286],{},"Nuxtのキャッシュが原因、.nuxt削除+再起動で解決",[173,288,289,292,295,298,301],{},[197,290,291],{},"6",[197,293,294],{},"flexコンテナのpadding-bottom",[197,296,297],{},"padding-bottomを96pxに増加",[197,299,300],{},"失敗（スクロール範囲に反映されない）",[197,302,303],{},"flexスクロールコンテナの既知問題。display:flex削除で解決",[173,305,306,309,312,315,318],{},[197,307,308],{},"7",[197,310,311],{},"SVG矢印のZ軸",[197,313,314],{},"テーブルの上に矢印を配置",[197,316,317],{},"失敗（背景に隠れる）",[197,319,320],{},"SVG要素を最後に移動して最前面に描画",[173,322,323,326,329,332,335],{},[197,324,325],{},"8",[197,327,328],{},"Git LFS push失敗",[197,330,331],{},"git push",[197,333,334],{},"失敗（LFSオブジェクト見つからない）",[197,336,337],{},"core.hooksPathがCodespaces残骸を参照していた",[173,339,340,343,346,349,351],{},[197,341,342],{},"9",[197,344,345],{},"書籍OCR図の整理",[197,347,348],{},"画像サイズ・縦横比で自動分類",[197,350,243],{},[197,352,353],{},"装飾113件+バナー54件を一括削除、実図53件に整理",[83,355],{},[19,357,358],{"id":358},"今日の学び",[53,360,361,368,371,381,384,391],{},[56,362,363,364,367],{},"note.comのAPIは",[93,365,366],{},"X-Requested-With: XMLHttpRequest","だけで認証が通る。XSRF-TOKENは不要",[56,369,370],{},"SVGの要素は描画順が後のものが前面に表示される。矢印をテーブルの後ろに配置すると隠れる",[56,372,373,374,377,378,380],{},"Nuxtのクライアントサイドナビゲーションで",[93,375,376],{},".nuxt","キャッシュが古いVNodeを返すことがある。開発中は",[93,379,376],{},"削除+再起動が確実",[56,382,383],{},"flexスクロールコンテナでは末尾のpadding-bottomがスクロール範囲に含まれない。display:flexを外すのが根本解決",[56,385,386,387,390],{},"yomitoku OCRの",[93,388,389],{},"--figure","オプションは装飾画像も図として抽出するため、サイズベースの後処理が必須",[56,392,393],{},"Codex（GPT-5.4）のレビューは数値の正確さや法的根拠の確認に強い。「瑣末な指摘するな」の指示が重要",[83,395],{},[19,397,398],{"id":398},"明日やること",[53,400,403,413,419],{"className":401},[402],"contains-task-list",[56,404,407,412],{"className":405},[406],"task-list-item",[408,409],"input",{"disabled":410,"type":411},true,"checkbox"," 別表コンテンツPhase 2: マークダウン→Vueスライド形式に変換",[56,414,416,418],{"className":415},[406],[408,417],{"disabled":410,"type":411}," note-draftスキルの画像アップロード改善（presigned URL方式をスキルに組み込み）",[56,420,422,424],{"className":421},[406],[408,423],{"disabled":410,"type":411}," CF教材の残りSVG作成（Step 7の総合演習）",[83,426],{},[19,428,429],{"id":429},"関連記事",[53,431,432,436,440],{},[56,433,434],{},[78,435,122],{"href":121},[56,437,438],{},[78,439,81],{"href":80},[56,441,442],{},[78,443,160],{"href":159},{"title":445,"searchDepth":446,"depth":446,"links":447},"",2,[448,449,455,456,457,458],{"id":21,"depth":446,"text":21},{"id":31,"depth":446,"text":31,"children":450},[451,453,454],{"id":35,"depth":452,"text":36},3,{"id":87,"depth":452,"text":88},{"id":127,"depth":452,"text":128},{"id":165,"depth":446,"text":165},{"id":358,"depth":446,"text":358},{"id":398,"depth":446,"text":398},{"id":429,"depth":446,"text":429},"diary","eurekapu-nuxt4のCF計算書ステップ教材を基礎知識5分割・SVG量産で全面改訂し、note.comのChrome拡張を開発、別表四・五の10章分ドラフトをAI並列生成した1日","md",{},"/2026-04-21-diary","daily-log",false,"2026-04-21T00:00:00.000Z",{"title":5,"description":460},"2026-04/2026-04-21/diary-2026-04-21",[470,471,472,473,474,475,476,477],"日記","CF計算書","SVG","note.com","Chrome拡張","別表","Codex","OCR",null,"0x5oKfQYCsQFBi71WAB3cBMw-7OsJ6eOpVQ5-Q-4xws",[],"https://log.eurekapu.com/favicon.svg",1776929993434]