[{"data":1,"prerenderedAt":563},["ShallowReactive",2],{"content-/2026-04-01-diary":3,"all-pages-for-dir":561,"og-image-/2026-04-01-diary":562},{"id":4,"title":5,"body":6,"category":545,"description":546,"extension":547,"meta":548,"navigation":492,"path":549,"project_name":550,"published":551,"publishedAt":552,"seo":553,"stem":554,"tags":555,"todo":559,"updatedAt":559,"__hash__":560},"pages/2026-04/2026-04-01/diary-2026-04-01.md","2026年4月1日の開発日記 - Excel自動書式・CF精算表スキル・SVG挫折からMermaid移行",{"type":7,"value":8,"toc":530},"minimark",[9,14,18,22,27,43,50,56,76,87,90,94,110,117,121,138,146,148,152,167,174,178,189,197,199,203,206,213,217,231,239,241,244,448,450,453,476,478,481,507,509,512],[10,11,13],"h1",{"id":12},"_2026年4月1日の開発日記","2026年4月1日の開発日記",[15,16,17],"p",{},"朝6時にGooglebotの2MB制限記事を書き始め、昼はExcelの色塗りを自動化するスキルを2つ完成させ、夕方にSVG図を61箇所直して全削除した。手を動かし続けた一日だった。",[19,20,21],"h2",{"id":21},"今日やったこと",[23,24,26],"h3",{"id":25},"_1-投資銀行モデル書式の自動適用とcf精算表生成スキル構築","1. 投資銀行モデル書式の自動適用とCF精算表生成スキル構築",[15,28,29,30,34,35,38,39,42],{},"Excelの投資銀行カラーコーディング（青=ハードコード、黒=数式、緑=他シート参照）を手作業でやっていたのを ",[31,32,33],"code",{},"/ib-format"," スキルとして自動化。Excel/Google Sheets両対応にした。Google Sheets APIの ",[31,36,37],{},"batchUpdate"," + ",[31,40,41],{},"repeatCell"," で書式適用する際、バッチサイズが大きすぎて失敗→25分割で解決。",[15,44,45,46,49],{},"CF精算表生成スキル ",[31,47,48],{},"/cf-worksheet"," は v1→v13 まで13回イテレーション。合計残高試算表を入力にopenpyxlで間接法CF精算表を出力する。主な改善は列削除、グレー濃淡、合計行ボールド、ズーム85%、CFラベル標準マッピング。",[15,51,52],{},[53,54,55],"strong",{},"主な成果:",[57,58,59,65,70],"ul",{},[60,61,62,64],"li",{},[31,63,33],{}," スキル（Excel/スプレッドシート両対応）",[60,66,67,69],{},[31,68,48],{}," スキル（v13完成）",[60,71,72,75],{},[31,73,74],{},"cf-labels.json"," 標準CFラベルマッピング",[15,77,78,81,82],{},[53,79,80],{},"詳細:"," ",[83,84,86],"a",{"href":85},"/ib-format-cf-worksheet-automation","投資銀行モデル書式の自動適用とCF精算表生成スキルを構築した",[88,89],"hr",{},[23,91,93],{"id":92},"_2-返済予定表モジュール化と仕訳生成パイプライン","2. 返済予定表モジュール化と仕訳生成パイプライン",[15,95,96,97,38,99,38,102,105,106,109],{},"Google Sheets上にTPL_返済予定表シートを構築。",[31,98,37],{},[31,100,101],{},"updateCells",[31,103,104],{},"sheetId"," 指定で ",[31,107,108],{},"!"," 問題を回避した。日割り利息計算（365日固定割り）と最終回端数処理を実装。",[15,111,112,113,116],{},"gws読み取り→Python変換→gws書き込みのパイプラインを完成させた。Pythonの ",[31,114,115],{},"subprocess"," からgws認証が通らない問題でハマり、ファイルベースI/Fに切り替えて解決。",[15,118,119],{},[53,120,55],{},[57,122,123,126,132],{},[60,124,125],{},"TPL_返済予定表（日割り計算、端数処理対応）",[60,127,128,131],{},[31,129,130],{},"repayment_to_mf_journal.sh"," パイプライン",[60,133,134,137],{},[31,135,136],{},"cf-lifecycle-journal"," スキル",[15,139,140,81,142],{},[53,141,80],{},[83,143,145],{"href":144},"/loan-repayment-module-mf-journal","返済予定表のモジュール化と会計ソフト仕訳生成パイプラインを構築した",[88,147],{},[23,149,151],{"id":150},"_3-chrome拡張バグ修正と繰越処理api調査","3. Chrome拡張バグ修正と繰越処理API調査",[15,153,154,155,158,159,162,163,166],{},"会計ソフトA連携のChrome拡張で ",[31,156,157],{},"statusCallback"," 未渡しバグを4箇所修正。仕訳インポートがHTTP 200で「完了」表示するのにデータが入らない問題を追跡し、レスポンスHTML内の ",[31,160,161],{},"alert-danger"," / ",[31,164,165],{},"alert-success"," チェックを追加。",[15,168,169,170,173],{},"繰越処理API（",[31,171,172],{},"POST /term/close?cti={cti}","）をChrome DevToolsで解析し、一括自動化の実装計画を策定。Codexレビューで「ループ内でCTI再取得すべき」という致命的指摘を受けて計画修正。",[15,175,176],{},[53,177,55],{},[57,179,180,183,186],{},[60,181,182],{},"statusCallbackバグ修正（4箇所）",[60,184,185],{},"インポートレスポンス検証追加",[60,187,188],{},"繰越処理一括自動化計画（明日実装予定）",[15,190,191,81,193],{},[53,192,80],{},[83,194,196],{"href":195},"/chrome-extension-mf-bug-fix","Chrome拡張 会計ソフト連携 - statusCallback未渡しバグ修正・インポート検証強化・繰越処理API調査",[88,198],{},[23,200,202],{"id":201},"_4-コンテンツ制作とbeautiful-mermaid移行","4. コンテンツ制作とBeautiful Mermaid移行",[15,204,205],{},"Googlebot 2MB HTML制限の記事を出典付きで作成。CPE研修（会計士倫理規則）の文字起こしをGoogle Docsから読み取り、7テーマに構造化した記事を作成。",[15,207,208,209,212],{},"記事にインラインSVG図を6つ追加したが、MDXパーサーが ",[31,210,211],{},"text-anchor"," 属性を消す問題に直面。61箇所を手動修正しても溢れが止まらず、全削除を決断。Beautiful Mermaid（Mermaid定義→SVG事前生成→画像参照）に移行して解決。",[15,214,215],{},[53,216,55],{},[57,218,219,222,225],{},[60,220,221],{},"Googlebot 2MB制限の記事",[60,223,224],{},"CPE研修記事（Beautiful Mermaid図6つ付き）",[60,226,227,230],{},[31,228,229],{},"summarize-meeting"," スキルのプロジェクトコピー",[15,232,233,81,235],{},[53,234,80],{},[83,236,238],{"href":237},"/content-creation-mermaid-migration","SVGのtext-anchor問題に61箇所対応して挫折し、Beautiful Mermaidに移行した話",[88,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,306,322,338,354,370,386,401,417,433],"tbody",{},[251,273,274,278,281,284,287],{},[275,276,277],"td",{},"1",[275,279,280],{},"Google Sheets書式適用",[275,282,283],{},"batchUpdate一括送信",[275,285,286],{},"失敗",[275,288,289],{},"バッチが大きすぎた。25分割で成功",[251,291,292,295,298,301,303],{},[275,293,294],{},"2",[275,296,297],{},"gws認証",[275,299,300],{},"Python subprocess経由",[275,302,286],{},[275,304,305],{},"bash -lがHOMEを上書きして認証情報が見つからない",[251,307,308,311,313,316,319],{},[275,309,310],{},"3",[275,312,297],{},[275,314,315],{},"ファイルベースI/F",[275,317,318],{},"成功",[275,320,321],{},"PythonでJSON生成→Bashで直接gws実行が安定",[251,323,324,327,330,333,335],{},[275,325,326],{},"4",[275,328,329],{},"SVG text-anchor",[275,331,332],{},"MDXでインラインSVG",[275,334,286],{},[275,336,337],{},"MDXパーサーがtext-anchor属性を消す",[251,339,340,343,346,349,351],{},[275,341,342],{},"5",[275,344,345],{},"SVG修正",[275,347,348],{},"61箇所のx座標手動計算",[275,350,286],{},[275,352,353],{},"日本語テキスト幅が予測できずviewBoxを超える",[251,355,356,359,362,365,367],{},[275,357,358],{},"6",[275,360,361],{},"SVG全削除→Mermaid",[275,363,364],{},"Beautiful Mermaid",[275,366,318],{},[275,368,369],{},"SVG事前生成で属性消失問題を根本回避",[251,371,372,375,378,381,383],{},[275,373,374],{},"7",[275,376,377],{},"add-task JSON",[275,379,380],{},"cat \u003C\u003CHEREDOC",[275,382,286],{},[275,384,385],{},"Windowsパスの\\Uが不正JSONエスケープに",[251,387,388,391,393,396,398],{},[275,389,390],{},"8",[275,392,377],{},[275,394,395],{},"Python生成方式",[275,397,318],{},[275,399,400],{},"Pythonのjson.dumpsで安全にシリアライズ",[251,402,403,406,409,412,414],{},[275,404,405],{},"9",[275,407,408],{},"CF精算表",[275,410,411],{},"v1→v13イテレーション",[275,413,318],{},[275,415,416],{},"対話型で13回回して完成度を上げた",[251,418,419,422,425,428,430],{},[275,420,421],{},"10",[275,423,424],{},"Codexレビュー",[275,426,427],{},"codex exec直叩き",[275,429,286],{},[275,431,432],{},"サンドボックスで日本語パスが読めない",[251,434,435,438,440,443,445],{},[275,436,437],{},"11",[275,439,424],{},[275,441,442],{},"codex-review-docスキル",[275,444,318],{},[275,446,447],{},"スキル経由で安定動作",[88,449],{},[19,451,452],{"id":452},"今日の学び",[57,454,455,461,467,470,473],{},[60,456,457,458,460],{},"Google Sheets APIの ",[31,459,37],{}," は巨大JSONを避けて小分けにする方が安定する",[60,462,463,464,466],{},"Pythonの ",[31,465,115],{}," から外部CLIを叩くとき、認証情報のHOMEパスが書き換わる罠がある",[60,468,469],{},"MDXパーサーはSVGの属性を黙って消す。インラインSVGよりファイル参照が安全",[60,471,472],{},"サンクコストに引きずられず「全削除→別方式」に切り替える判断が結果的に速い",[60,474,475],{},"Codexレビューはスキル経由の方がサンドボックス制限を回避できる",[88,477],{},[19,479,480],{"id":480},"明日やること",[57,482,485,495,501],{"className":483},[484],"contains-task-list",[60,486,489,494],{"className":487},[488],"task-list-item",[490,491],"input",{"disabled":492,"type":493},true,"checkbox"," 会計ソフトA繰越処理の一括自動化を実装",[60,496,498,500],{"className":497},[488],[490,499],{"disabled":492,"type":493}," CF精算表: 年次推移表から5年分を一括生成",[60,502,504,506],{"className":503},[488],[490,505],{"disabled":492,"type":493}," 営業CF調整項目: 書籍の情報をコンテキストとして追加",[88,508],{},[19,510,511],{"id":511},"関連記事",[57,513,514,518,522,526],{},[60,515,516],{},[83,517,196],{"href":195},[60,519,520],{},[83,521,86],{"href":85},[60,523,524],{},[83,525,145],{"href":144},[60,527,528],{},[83,529,238],{"href":237},{"title":531,"searchDepth":532,"depth":532,"links":533},"",2,[534,541,542,543,544],{"id":21,"depth":532,"text":21,"children":535},[536,538,539,540],{"id":25,"depth":537,"text":26},3,{"id":92,"depth":537,"text":93},{"id":150,"depth":537,"text":151},{"id":201,"depth":537,"text":202},{"id":243,"depth":532,"text":243},{"id":452,"depth":532,"text":452},{"id":480,"depth":532,"text":480},{"id":511,"depth":532,"text":511},"diary","投資銀行モデル書式の自動適用スキル構築、CF精算表生成の13回イテレーション、返済予定表→仕訳生成パイプライン完成、インラインSVG61箇所修正後の全削除→Beautiful Mermaid移行まで、4プロジェクトにまたがる一日の記録。","md",{},"/2026-04-01-diary","daily-log",false,"2026-04-01T00:00:00.000Z",{"title":5,"description":546},"2026-04/2026-04-01/diary-2026-04-01",[556,557,408,364,558],"日記","Excel自動化","Chrome拡張機能",null,"CyHqsSb81DPzLmNLzs6fc401UltqeY2TJRK4w7S-Sn0",[],"https://log.eurekapu.com/favicon.svg",1775338203618]