[{"data":1,"prerenderedAt":445},["ShallowReactive",2],{"content-/2026-04-03-diary":3,"all-pages-for-dir":443,"og-image-/2026-04-03-diary":444},{"id":4,"title":5,"body":6,"category":424,"description":425,"extension":426,"meta":427,"navigation":376,"path":428,"project_name":429,"published":430,"publishedAt":431,"seo":432,"stem":433,"tags":434,"todo":441,"updatedAt":441,"__hash__":442},"pages/2026-04/2026-04-03/diary-2026-04-03.md","2026年4月3日の開発日記 - CF精算表パイプラインを全12論点に拡張＆バグ修正",{"type":7,"value":8,"toc":410},"minimark",[9,14,18,22,27,30,36,65,76,79,83,86,90,117,125,127,131,138,142,157,165,167,170,328,330,333,360,362,365,391,393,396],[10,11,13],"h1",{"id":12},"_2026年4月3日の開発日記","2026年4月3日の開発日記",[15,16,17],"p",{},"朝、Googleタスクの積み残しを4件片付けてから、CF精算表パイプラインの拡張に丸一日を費やした。借入金しか対応していなかったパイプラインを貸付金・資本政策まで広げ、バグを潰し、テストコードを組み、最後にnpmのセキュリティ対策まで手を伸ばした。",[19,20,21],"h2",{"id":21},"今日やったこと",[23,24,26],"h3",{"id":25},"_1-cf精算表パイプラインの全面拡張","1. CF精算表パイプラインの全面拡張",[15,28,29],{},"借入金専用だったCFWSパイプラインを全12論点（3級6 + 2級6）に対応させた。",[15,31,32],{},[33,34,35],"strong",{},"主な成果:",[37,38,39,47,53,56,59,62],"ul",{},[40,41,42,46],"li",{},[43,44,45],"code",{},"gen_cfws_multi_year.py","のDUAL_ACCOUNTSを辞書形式に変更し、貸付金を追加",[40,48,49,50],{},"Excel命名規則を策定: ",[43,51,52],{},"CF_{論点}_{ステップ}_{ステップ名}_{日時}.xlsx",[40,54,55],{},"進捗マトリックスを「論点×ステップ」に整理（ステップはa/b/c）",[40,57,58],{},"資本政策Excel生成（3級=設立300万 / 2級=増資パターン）",[40,60,61],{},"全論点の取引モジュールに設立出資（取引No.1）を共通追加",[40,63,64],{},"Excelファースト方針を確立（SSは確認用に後追い変換）",[15,66,67,70,71],{},[33,68,69],{},"詳細:"," ",[72,73,75],"a",{"href":74},"/cfws-pipeline-expansion","CF精算表パイプラインを全12論点に拡張した",[77,78],"hr",{},[23,80,82],{"id":81},"_2-cfwsのバグ修正テストコード整備","2. CFWSのバグ修正・テストコード整備",[15,84,85],{},"パイプラインを拡張するたびにExcelのcheck行が合わなくなり、バグを1つずつ潰した。",[15,87,88],{},[33,89,35],{},[37,91,92,95,98,101,108,111],{},[40,93,94],{},"資本準備金がBS階層から脱落するバグを修正",[40,96,97],{},"年次推移表のcheck行がCFWSに混入するバグを修正",[40,99,100],{},"中間テーブルを正規化形式に統一（INDEX/MATCH複合キー）",[40,102,103,104,107],{},"openpyxlの@マーク問題に対処（",[43,105,106],{},"INDEX()","ラップで配列評価を強制）",[40,109,110],{},"PL科目名不一致バグを修正（受取利息 vs 受取利息及び受取配当金）",[40,112,113,116],{},[43,114,115],{},"wb.save()","直前にcheck=0の数値検証テストを追加",[15,118,119,70,121],{},[33,120,69],{},[72,122,124],{"href":123},"/cfws-bug-fixes-and-testing","CF精算表のバグ修正とテストコード整備",[77,126],{},[23,128,130],{"id":129},"_3-npmサプライチェーン攻撃shai-hulud-20対策","3. npmサプライチェーン攻撃「Shai-Hulud 2.0」対策",[15,132,133,134,137],{},"ログを眺めていたら「Shai-Hulud 2.0」の情報が目に飛び込んできた。正規パッケージのメンテナー認証を盗む手口で、",[43,135,136],{},"npm audit","では検出できない。",[15,139,140],{},[33,141,35],{},[37,143,144,147],{},[40,145,146],{},"プロジェクトの影響チェック → 感染の兆候なし",[40,148,149,152,153,156],{},[43,150,151],{},"~/.npmrc","に",[43,154,155],{},"minimum-release-age=4320","をグローバル設定（公開3日以内のバージョンをブロック）",[15,158,159,70,161],{},[33,160,69],{},[72,162,164],{"href":163},"/npm-supply-chain-defense","npmサプライチェーン攻撃 Shai-Hulud 2.0 への防御設定",[77,166],{},[19,168,169],{"id":169},"今日の試行錯誤",[171,172,173,195],"table",{},[174,175,176],"thead",{},[177,178,179,183,186,189,192],"tr",{},[180,181,182],"th",{},"#",[180,184,185],{},"テーマ",[180,187,188],{},"試したこと",[180,190,191],{},"結果",[180,193,194],{},"気づき",[196,197,198,216,233,250,271,288,308],"tbody",{},[177,199,200,204,207,210,213],{},[201,202,203],"td",{},"1",[201,205,206],{},"年次推移表の数式化",[201,208,209],{},"全勘定科目をSUMIFS数式で仕訳データから自動集計",[201,211,212],{},"断念",[201,214,215],{},"繰越利益剰余金の扱いが複雑すぎる。ハードコード版にリバート",[177,217,218,221,224,227,230],{},[201,219,220],{},"2",[201,222,223],{},"SSエクスポートで数式保持",[201,225,226],{},"SSからExcelにエクスポート",[201,228,229],{},"失敗",[201,231,232],{},"数式は保持されない。Pythonで直接数式を生成するアプローチに変更",[177,234,235,238,241,244,247],{},[201,236,237],{},"3",[201,239,240],{},"check=0テスト（初版）",[201,242,243],{},"構造チェックのみ（配分先があるか）",[201,245,246],{},"不十分",[201,248,249],{},"数値の整合性は検証していなかった。Excelと同じ計算をPythonでやればいいだけ",[177,251,252,255,258,265,268],{},[201,253,254],{},"4",[201,256,257],{},"check=0テスト（修正版）",[201,259,260,261,264],{},"DUAL/EQUITY科目に",[43,262,263],{},"alloc = h","で検証",[201,266,267],{},"トートロジー",[201,269,270],{},"「常にcheck=0」になる偽テスト。実際の中間テーブル値を計算すべき",[177,272,273,276,279,282,285],{},[201,274,275],{},"5",[201,277,278],{},"中間テーブル参照",[201,280,281],{},"全調整列にINDEX/MATCH数式を書く",[201,283,284],{},"バグ",[201,286,287],{},"N列（株式発行）がTPL_返済予定表を参照してしまう。テーブルに存在するペアだけに書くよう修正",[177,289,290,293,296,299,302],{},[201,291,292],{},"6",[201,294,295],{},"@マーク問題",[201,297,298],{},"openpyxlで通常の数式として書き込み",[201,300,301],{},"Excel 365が@を付加",[201,303,304,307],{},[43,305,306],{},"INDEX(K列&J列,)","でラップすると配列評価が強制され@が消える",[177,309,310,313,316,319,322],{},[201,311,312],{},"7",[201,314,315],{},"minimum-release-age",[201,317,318],{},"pnpm-workspace.yamlにプロジェクトレベルで設定",[201,320,321],{},"冗長",[201,323,324,325,327],{},"グローバル",[43,326,151],{},"に移動して全プロジェクトで有効化",[77,329],{},[19,331,332],{"id":332},"今日の学び",[37,334,335,338,352,355],{},[40,336,337],{},"check=0テストは「構造チェック」ではなく「数値検証」で書かないと意味がない。Excel上の数式と同じ計算をコードで再現するのが正解",[40,339,340,341,344,345,348,349,351],{},"openpyxlで複合キーMATCH（",[43,342,343],{},"A&B","）を書くとExcel 365が暗黙的交差演算子",[43,346,347],{},"@","を付けてくる。",[43,350,106],{},"でラップすれば回避できる",[40,353,354],{},"中間テーブルは正規化形式（年度×勘定科目×CF調整列名→金額）に統一すると、全テーブルで同じパターンのINDEX/MATCH数式が使い回せる",[40,356,357,359],{},[43,358,315],{},"はサプライチェーン攻撃への手軽で効果的な防御策",[77,361],{},[19,363,364],{"id":364},"明日やること",[37,366,369,379,385],{"className":367},[368],"contains-task-list",[40,370,373,378],{"className":371},[372],"task-list-item",[374,375],"input",{"disabled":376,"type":377},true,"checkbox"," 短期借入金・短期貸付金の取引モジュール作成（決算整理仕訳＝未収未払利息の計上を含む）",[40,380,382,384],{"className":381},[372],[374,383],{"disabled":376,"type":377}," 短期借入金・貸付金の年次推移表 → CFWS生成",[40,386,388,390],{"className":387},[372],[374,389],{"disabled":376,"type":377}," Codex指摘事項の反映（DUAL_ACCOUNTSへの短期貸付金追加）",[77,392],{},[19,394,395],{"id":395},"関連記事",[37,397,398,402,406],{},[40,399,400],{},[72,401,75],{"href":74},[40,403,404],{},[72,405,124],{"href":123},[40,407,408],{},[72,409,164],{"href":163},{"title":411,"searchDepth":412,"depth":412,"links":413},"",2,[414,420,421,422,423],{"id":21,"depth":412,"text":21,"children":415},[416,418,419],{"id":25,"depth":417,"text":26},3,{"id":81,"depth":417,"text":82},{"id":129,"depth":417,"text":130},{"id":169,"depth":412,"text":169},{"id":332,"depth":412,"text":332},{"id":364,"depth":412,"text":364},{"id":395,"depth":412,"text":395},"diary","CF精算表パイプラインの貸付金・資本政策対応、Excel命名規則の策定、バグ修正とcheck=0テスト追加、npmサプライチェーン攻撃対策を実施した一日","md",{},"/2026-04-03-diary","daily-log",false,"2026-04-03T00:00:00.000Z",{"title":5,"description":425},"2026-04/2026-04-03/diary-2026-04-03",[435,436,437,438,439,440],"日記","CF精算表","Excel自動化","openpyxl","npm","セキュリティ",null,"n7rcFcYpRfjWRFcsnZSsepJAtHKBwjRicC081SzGh_A",[],"https://log.eurekapu.com/favicon.svg",1775338204261]