[{"data":1,"prerenderedAt":669},["ShallowReactive",2],{"content-/2026-04-27-diary":3,"all-pages-for-dir":667,"og-image-/2026-04-27-diary":668},{"id":4,"title":5,"body":6,"category":647,"description":648,"extension":649,"meta":650,"navigation":587,"path":651,"project_name":652,"published":653,"publishedAt":654,"seo":655,"stem":656,"tags":657,"todo":665,"updatedAt":665,"__hash__":666},"pages/2026-04/2026-04-27/diary-2026-04-27.md","2026年4月27日の開発日記 - CFWS v2 順方向化を1日で Phase 1〜8 まで通し、AEHR/Lumentum/AAOI 投資メモも公開",{"type":7,"value":8,"toc":631},"minimark",[9,14,18,22,29,32,37,45,51,77,88,91,95,106,110,134,142,144,148,151,155,184,192,194,198,209,213,231,239,241,244,514,516,519,571,573,576,608,610,613],[10,11,13],"h1",{"id":12},"_2026年4月27日の開発日記","2026年4月27日の開発日記",[15,16,17],"p",{},"朝はExcelのシート間参照を図解する方法を考えるところから始まり、そのまま別リポジトリ eurekapu-nuxt4 のキャッシュフロー精算表 v2 の大改修に丸一日溶けた。既存 v1 が「CFWSの完成形から逆算してスクリプトで仕訳を生成する」逆向き構造で、画面上で履歴2%を3%に変えても何も動かない。これを「取引モジュール → 仕訳 → 年次推移表 → CFWS」の順方向に組み直し、Phase 1（骨組み）から Phase 8（CF計算書専用シート + IBフォーマット）まで一気通貫で通した。Codex GPT-5.4 のレビューを4往復挟んで Vitest を 86 件まで増やし、最後にミラーカラムレイアウトに統合してセル単位ハイライトの全 navigate 横展開まで済ませた。並行して mdx-playground 側で AEHR の積み上げチャートと Lumentum / AAOI の投資判断メモ計3本を公開した。",[19,20,21],"h2",{"id":21},"今日のタイムライン",[15,23,24],{},[25,26],"img",{"alt":27,"src":28},"タイムライン","/2026-04/2026-04-27/timeline-2026-04-27.png",[19,30,31],{"id":31},"今日やったこと",[33,34,36],"h3",{"id":35},"_1-cfws-v2-を順方向ロジックに全面書き換えphase-18","1. CFWS v2 を順方向ロジックに全面書き換え（Phase 1〜8）",[15,38,39,40,44],{},"別リポジトリ eurekapu-nuxt4 の中核改修。既存 v1 を残したまま「資金調達_v1」「資金調達_v2」をミラーカラムレイアウトに並列配置し、v2 側だけで取引モジュール → 仕訳 → 年次推移表 → CFWS の順方向データフローを構築。Pinia ストアと composable で reactivity を担保し、Phase 7 のパラメータ編集UIで ",[41,42,43],"code",{},"\u003Cinput>"," バインドだけで CF まで連動するところまで通した。Codex GPT-5.4 のレビューを4往復挟んで「OK」獲得、Vitest 86件 pass。",[15,46,47],{},[48,49,50],"strong",{},"主な成果:",[52,53,54,62,65,68,71,74],"ul",{},[55,56,57,58,61],"li",{},"Phase 1〜8 を1日で通し、",[41,59,60],{},"/cashflow-statement/v2/*"," ルートで全シート稼働",[55,63,64],{},"設立シナリオ・ローン3本・固定資産2件・期間 FY202603 形式統一",[55,66,67],{},"ローン仕訳の cfTag 設計を見直し、CFWS の長期借入金1行集約と整合",[55,69,70],{},"BS精算表に「現金及び預金」行と貸借成立検算セルを追加してチェック厳密化",[55,72,73],{},"パラメータ編集UI + localStorage 永続化 + リセットボタン",[55,75,76],{},"CF計算書を年度タブから年次推移スタイル（縦=項目・横=年度）に書き換え + IBフォーマット適用",[15,78,79,82,83],{},[48,80,81],{},"詳細:"," ",[84,85,87],"a",{"href":86},"/cfws-v2-forward-architecture","キャッシュフロー精算表v2: 順方向ロジックへの全面書き換え",[89,90],"hr",{},[33,92,94],{"id":93},"_2-cfws-v2-のセル単位ハイライト-全-navigate-型への横展開","2. CFWS v2 のセル単位ハイライト + 全 navigate 型への横展開",[15,96,97,98,101,102,105],{},"CFWS のセルをクリックすると関連シートの対応セルがオレンジ枠でハイライトされ、",[41,99,100],{},"scrollIntoView"," で画面中央に滑り込む機能を実装。「税引前当期純利益」のモデルケースで型と composable を固めてから、年次推移表・財務シート・投資シート・株式発行シートに横展開した。建物と備品が別々にハイライトされない問題を踏み、複合キー ",[41,103,104],{},"'資産名:列名'"," の優先順位を逆転させて解消。CSS specificity の罠も2回踏んだ。",[15,107,108],{},[48,109,50],{},[52,111,112,118,125,128,131],{},[55,113,114,115,117],{},"セル単位ハイライト + ",[41,116,100],{}," のモデルケース（税引前当期純利益）",[55,119,120,121,124],{},"複合キー ",[41,122,123],{},"'建物:減価償却'"," で行・列セル単位の厳密ハイライト",[55,126,127],{},"finance / investment / equity / accounting 全 navigate 型に同期 ref",[55,129,130],{},"simplify レビューで composable と共通フォーマッタを抽出、5シートを共通化",[55,132,133],{},"ミラーカラムレイアウトの第3カラムに年度サブアイテムを追加し、矢印キーで年度移動",[15,135,136,82,138],{},[48,137,81],{},[84,139,141],{"href":140},"/cfws-v2-cell-highlight","CFWS v2のセル単位ハイライト + 全navigate型への横展開",[89,143],{},[33,145,147],{"id":146},"_3-aehr-バックログsvgチャート-lumentumaaoi-投資判断メモを3本同時公開","3. AEHR バックログSVGチャート + Lumentum/AAOI 投資判断メモを3本同時公開",[15,149,150],{},"mdx-playground 側で Downloads に積もっていた素材を1日で3本まとめて公開記事化。AEHR は再利用可能なテンプレートに従って積み上げ横棒チャートを SVG で生成し、整合性チェックで FY25 Q1 に $5.6M のズレを見つけて記事内で言及。Lumentum (LITE) はそのまま公開、AAOI は自分でデータを集めて書いた後にユーザー提供メモでファクトチェックして上書きした。",[15,152,153],{},[48,154,50],{},[52,156,157,163,169,175,181],{},[55,158,159,162],{},[41,160,161],{},"aehr-backlog-chart-template-test.md",": テンプレートの再現性テスト + データ整合性検証",[55,164,165,168],{},[41,166,167],{},"lumentum-lite-investment-thesis.md",": そのまま公開（公開前調整は2点のみ）",[55,170,171,174],{},[41,172,173],{},"aaoi-investment-thesis.md",": 自前収集 → ユーザー提供メモでファクトチェック → 数字修正",[55,176,177,180],{},[41,178,179],{},"scripts/generate-aehr-backlog-chart.mjs"," を成果物として保存",[55,182,183],{},"配色: 売上=ネイビー、受注=オレンジ、期首残/期末残=グレー（背景化）",[15,185,186,82,188],{},[48,187,81],{},[84,189,191],{"href":190},"/financial-articles-batch-publishing","AEHRのバックログSVGチャートとLumentum/AAOI投資判断メモを一気に公開した日",[89,193],{},[33,195,197],{"id":196},"_4-excel-のシート間参照を-png-で図解するスクリプト試作","4. Excel のシート間参照を PNG で図解するスクリプト試作",[15,199,200,201,204,205,208],{},"朝、「Excel のシート間 INDEX/MATCH 参照を矢印付きで図示するのに毎回 Snipping Tool + Illustrator で20分かかる」問題から始まり、pywin32 COM の ",[41,202,203],{},"CopyPicture"," で範囲をキャプチャして Pillow で矢印を合成する方針で最初のプロトタイプまで動かした。既存の HTML レンダリング版 ",[41,206,207],{},"excel-screenshot"," スキルとは「現物 Excel らしさを残す」用途で使い分ける。",[15,210,211],{},[48,212,50],{},[52,214,215,221,228],{},[55,216,217,220],{},[41,218,219],{},"scripts/excel-ref-diagram/output.png"," で初期試作完成",[55,222,223,224,227],{},"YAML 指定（",[41,225,226],{},"Sheet1!B5:E10 → Sheet2!C8:F12","）で from/to を書く設計",[55,229,230],{},"Excel スクショの4選択肢比較（COM / HTMLレンダリング / LibreOffice CLI / 手動）",[15,232,233,82,235],{},[48,234,81],{},[84,236,238],{"href":237},"/excel-cross-sheet-reference-diagram","Excelのシート間参照をPNG図解する：pywin32 COM + Pillowで矢印を合成する",[89,240],{},[19,242,243],{"id":243},"今日の試行錯誤",[245,246,247,269],"table",{},[248,249,250],"thead",{},[251,252,253,257,260,263,266],"tr",{},[254,255,256],"th",{},"#",[254,258,259],{},"テーマ",[254,261,262],{},"試したこと",[254,264,265],{},"結果",[254,267,268],{},"気づき",[270,271,272,290,314,331,352,379,399,426,443,464,480,497],"tbody",{},[251,273,274,278,281,284,287],{},[275,276,277],"td",{},"1",[275,279,280],{},"CFWS v2 のチェック",[275,282,283],{},"期末バランスが揃ってないのに ✓ 表示",[275,285,286],{},"失敗",[275,288,289],{},"バックエンドVitestとフロントエンドの両方に検算を仕込む必要がある",[251,291,292,295,298,304,307],{},[275,293,294],{},"2",[275,296,297],{},"普通預金マイナス",[275,299,300,303],{},[41,301,302],{},"buildAcquisitionEntry"," で貸方の subAccount 漏れ",[275,305,306],{},"修正後解消",[275,308,309,310,313],{},"仕訳生成関数の引数に ",[41,311,312],{},"bankName"," を必ず通す型にした",[251,315,316,319,322,325,328],{},[275,317,318],{},"3",[275,320,321],{},"普通預金が2本",[275,323,324],{},"勘定科目に「みずほ銀行」「三菱UFJ銀行」が出てしまう",[275,326,327],{},"「現金及び預金」勘定 + 銀行名を補助科目に統一",[275,329,330],{},"V1依存（defaultAccountConfig）も同時に解消",[251,332,333,336,339,346,349],{},[275,334,335],{},"4",[275,337,338],{},"セル単位ハイライト",[275,340,341,342,345],{},"単独キー ",[41,343,344],{},"cfItemActions[cfItemName]"," が先に拾われる",[275,347,348],{},"順序逆転で修正",[275,350,351],{},"複合キー → 単独キーの順で参照する",[251,353,354,357,360,370,376],{},[275,355,356],{},"5",[275,358,359],{},"建物クリックで合計行に飛ぶ",[275,361,362,365,366,369],{},[41,363,364],{},"cfSourceTable"," の row 抽出が ",[41,367,368],{},"減価償却累計額"," のみ",[275,371,372,375],{},[41,373,374],{},"tangible"," 系の親科目（建物・備品）を抽出に変更",[275,377,378],{},"複合キーは「行に該当する元の bsAccount」まで降りないと意味がない",[251,380,381,384,387,390,393],{},[275,382,383],{},"6",[275,385,386],{},"navigable リンクが緑にならない",[275,388,389],{},"デフォルト黒、hover時のみ緑",[275,391,392],{},"CSS specificity の差（0,1,1 vs 0,1,0）が原因",[275,394,395,398],{},[41,396,397],{},".cf-table td.navigable"," に specificity を上げて修正",[251,400,401,404,407,417,420],{},[275,402,403],{},"7",[275,405,406],{},"数値が左寄せ",[275,408,409,412,413,416],{},[41,410,411],{},".cf-table td { text-align: left }"," が ",[41,414,415],{},".num"," に勝つ",[275,418,419],{},"同じく specificity 修正",[275,421,422,425],{},[41,423,424],{},":hover"," で specificity が上がる挙動を学んだ",[251,427,428,431,434,437,440],{},[275,429,430],{},"8",[275,432,433],{},"Codex レビュー",[275,435,436],{},"4往復で OK 獲得",[275,438,439],{},"成功",[275,441,442],{},"「致命点だけ」と指示しても Codex は丁寧に複数指摘してくる",[251,444,445,448,451,458,461],{},[275,446,447],{},"9",[275,449,450],{},"scheduled_tasks.lock",[275,452,453,454,457],{},"Claude Code の ",[41,455,456],{},"ScheduleWakeup"," 起源のロックファイル",[275,459,460],{},".gitignore 追加",[275,462,463],{},"内部ロックファイルはコミット対象から外す",[251,465,466,469,472,475,477],{},[275,467,468],{},"10",[275,470,471],{},"Chrome DevTools MCP 接続不安定",[275,473,474],{},"別ルート（agent-browser）に切替",[275,476,439],{},[275,478,479],{},"DevTools MCP がタイムアウトしても agent-browser で代替可能",[251,481,482,485,488,491,494],{},[275,483,484],{},"11",[275,486,487],{},"AEHR チャート色変更",[275,489,490],{},"ブラウザがキャッシュした古いSVG表示",[275,492,493],{},"強制リロードで反映",[275,495,496],{},"配色変更後はハードリロードが必要",[251,498,499,502,505,508,511],{},[275,500,501],{},"12",[275,503,504],{},"AAOI ファクトチェック",[275,506,507],{},"元メモにいくつか正確でない数字",[275,509,510],{},"検証で確認できた事実だけ残す",[275,512,513],{},"数字を1つずつ通したものだけ記事に残す方針が正解",[89,515],{},[19,517,518],{"id":518},"今日の学び",[52,520,521,527,533,543,559,565],{},[55,522,523,526],{},[48,524,525],{},"逆向き構造から順方向への組み直しは丸ごと別ファイル群で進める",": v1 を残してミラーカラム第1段の隣に v2 を並列配置することで、既存ユーザーへの影響をゼロにしつつ片方ずつ詰められた",[55,528,529,532],{},[48,530,531],{},"チェック行は「意味のある検算」にしてから ✓ を出す",": 期末バランスが揃ってない状態で OK 表示すると、後段のバグを見落とす。フロントエンドで見せる前に Vitest で実ストア初期値を使った統合テストを通す",[55,534,535,538,539,542],{},[48,536,537],{},"Codex GPT-5.4 のレビューは「致命点だけ」指示しても複数指摘してくる",": 4往復目で OK が出る。",[41,540,541],{},"resume --last"," で文脈を引き継がないと毎回ゼロから読み直しになる",[55,544,545,548,549,551,552,554,555,558],{},[48,546,547],{},"CSS specificity は2回踏んでようやく身体に入る",": hover で色が出るのに hover 外すと出ないのは、",[41,550,424],{}," で specificity が +0,1,0 されるから。要素単位の ",[41,553,275],{}," 直当てに ",[41,556,557],{},".class"," が負ける",[55,560,561,564],{},[48,562,563],{},"複合キー優先・単独キー後の順で参照を組む",": 「具体 → 抽象」の探索順にすれば、横展開時に親キーで拾われる事故が減る",[55,566,567,570],{},[48,568,569],{},"整合性が取れない数字は隠さず記事に書く",": AEHR の FY25 Q1 $5.6M ズレも記事内で言及。再現性テストの結果として価値が出る",[89,572],{},[19,574,575],{"id":575},"明日やること",[52,577,580,590,596,602],{"className":578},[579],"contains-task-list",[55,581,584,589],{"className":582},[583],"task-list-item",[585,586],"input",{"disabled":587,"type":588},true,"checkbox"," CFWS v2 のパラメータ編集UI（Phase 7）の使い込みテスト",[55,591,593,595],{"className":592},[583],[585,594],{"disabled":587,"type":588}," CF計算書 年次推移スタイルのIBフォーマットを他シートに横展開",[55,597,599,601],{"className":598},[583],[585,600],{"disabled":587,"type":588}," Excel シート間参照スクリプトの YAML 入力対応 + 複数矢印描画",[55,603,605,607],{"className":604},[583],[585,606],{"disabled":587,"type":588}," AAOI 記事のファクトチェック2周目（決算スケジュールに合わせて）",[89,609],{},[19,611,612],{"id":612},"関連記事",[52,614,615,619,623,627],{},[55,616,617],{},[84,618,87],{"href":86},[55,620,621],{},[84,622,141],{"href":140},[55,624,625],{},[84,626,191],{"href":190},[55,628,629],{},[84,630,238],{"href":237},{"title":632,"searchDepth":633,"depth":633,"links":634},"",2,[635,636,643,644,645,646],{"id":21,"depth":633,"text":21},{"id":31,"depth":633,"text":31,"children":637},[638,640,641,642],{"id":35,"depth":639,"text":36},3,{"id":93,"depth":639,"text":94},{"id":146,"depth":639,"text":147},{"id":196,"depth":639,"text":197},{"id":243,"depth":633,"text":243},{"id":518,"depth":633,"text":518},{"id":575,"depth":633,"text":575},{"id":612,"depth":633,"text":612},"diary","別リポジトリ eurekapu-nuxt4 でCFWSの構造を逆向きから順方向に組み直す大改修を1日で実装。Codex GPT-5.4 のレビューを4往復挟んで Vitest 86件 pass。並行して mdx-playground で AEHR の積み上げチャートと Lumentum/AAOI の投資判断メモ計3本を公開。Excel シート間参照を PNG で図解する pywin32 + Pillow スクリプトも試作した。","md",{},"/2026-04-27-diary","daily-log",false,"2026-04-27T00:00:00.000Z",{"title":5,"description":648},"2026-04/2026-04-27/diary-2026-04-27",[658,659,660,661,662,663,664],"日記","CFWS","Vue","TypeScript","Codexレビュー","投資メモ","Excel",null,"OO_Tpdplme78bW4nW6we44ECcKB84JPtv-y7K8dZvJQ",[],"https://log.eurekapu.com/favicon.svg",1777329226962]