[{"data":1,"prerenderedAt":495},["ShallowReactive",2],{"content-/2026-03-28-diary":3,"all-pages-for-dir":493,"og-image-/2026-03-28-diary":494},{"id":4,"title":5,"body":6,"category":475,"description":476,"extension":477,"meta":478,"navigation":416,"path":479,"project_name":480,"published":481,"publishedAt":482,"seo":483,"stem":484,"tags":485,"todo":491,"updatedAt":491,"__hash__":492},"pages/2026-03/2026-03-28/diary-2026-03-28.md","2026年3月28日の開発日記 - Chrome拡張MFの全面改修とDevTools MCP直接操作の発見",{"type":7,"value":8,"toc":460},"minimark",[9,14,18,22,27,30,36,64,75,78,82,85,89,106,114,116,120,123,127,141,149,151,155,158,160,163,369,371,374,400,402,405,441,443,446],[10,11,13],"h1",{"id":12},"_2026年3月28日の開発日記","2026年3月28日の開発日記",[15,16,17],"p",{},"朝6時から丸一日、会計サービス連携のChrome拡張を触り続けた。前日の積み残し5項目を片付けるところから始まり、ルール同期機能の全面改修、DevTools MCPで拡張なしにAPIを直接叩ける発見、Claude Codeフックのタイムスタンプ注入設定と、密度の濃い一日になった。",[19,20,21],"h2",{"id":21},"今日やったこと",[23,24,26],"h3",{"id":25},"_1-chrome拡張mfのルール同期機能を全面改修","1. Chrome拡張MFのルール同期機能を全面改修",[15,28,29],{},"前日の積み残しだった汚染ストレージ修復から着手し、そのままルール同期機能をほぼ丸ごと作り直した。",[15,31,32],{},[33,34,35],"strong",{},"主な成果:",[37,38,39,43,46,49,52,55,58,61],"ul",{},[40,41,42],"li",{},"汚染ストレージの自動修復マイグレーションを実装",[40,44,45],{},"DELETE APIのCSRFトークン対応（422エラー解消）",[40,47,48],{},"ルール同期タブを単一URL→事業者別リストUIに改修",[40,50,51],{},"自動仕訳ルールインポートタブを廃止し、同期に統合",[40,53,54],{},"ルールID照合バグ修正（口座未紐付けルールのaccount_id='0'フォールバック）",[40,56,57],{},"スプレッドシート書式クリア問題の解決（deleteDimension方式）",[40,59,60],{},"ログタブの新設（Codexレビュー3回）",[40,62,63],{},"シート名キャッシュの実装",[15,65,66,69,70],{},[33,67,68],{},"詳細:"," ",[71,72,74],"a",{"href":73},"/mf-extension-rule-sync-improvements","Chrome拡張 会計サービス連携 - 自動仕訳ルール同期機能の全面改修とバグ修正",[76,77],"hr",{},[23,79,81],{"id":80},"_2-devtools-mcpでクラウド会計apiを直接操作する実験","2. DevTools MCPでクラウド会計APIを直接操作する実験",[15,83,84],{},"Chrome拡張の依存度を下げたいという議論から、「そもそも拡張なしでAPIを叩けるのでは」という仮説を検証した。",[15,86,87],{},[33,88,35],{},[37,90,91,94,97,100,103],{},[40,92,93],{},"CSRFトークン/OAuth/リフレッシュトークンの3種類を図解ドキュメント化（SVG5つ）",[40,95,96],{},"evaluate_scriptでCSRFトークンを取得し、内部APIを直接叩いて全帳簿データを取得",[40,98,99],{},"テスト事業者の仕訳帳・残高試算表・月次推移・年次推移・連携明細をスプレッドシートに転記",[40,101,102],{},"「拡張のコードは8割リファレンスとして使える」という気づき",[40,104,105],{},"次回すぐ再現できるランブックを整備",[15,107,108,69,110],{},[33,109,68],{},[71,111,113],{"href":112},"/mf-devtools-mcp-direct-operation","DevTools MCPでクラウド会計APIを直接操作 - Chrome拡張なしで全帳簿データを取得した実験記録",[76,115],{},[23,117,119],{"id":118},"_3-claude-codeフックでタイムスタンプ注入","3. Claude Codeフックでタイムスタンプ注入",[15,121,122],{},"1Mコンテキストの長時間セッションで「何時頃の話だったか」を把握するためのTipsを導入。",[15,124,125],{},[33,126,35],{},[37,128,129,132,135,138],{},[40,130,131],{},"PreToolUseフックではstdoutがコンテキストに入らない仕様を発見",[40,133,134],{},"UserPromptSubmitフックに切り替えて成功",[40,136,137],{},"メッセージ送信のたびにsystem-reminderとしてタイムスタンプが記録される",[40,139,140],{},"別リポジトリ（mdx-playground）でも動作を確認。JSONLにタイムスタンプが残るため、/make-diaryの時間精度も向上",[15,142,143,69,145],{},[33,144,68],{},[71,146,148],{"href":147},"/claude-code-timestamp-hook-setup","Claude Codeフックでタイムスタンプ注入 - 1Mコンテキスト長時間セッションの時刻把握",[76,150],{},[23,152,154],{"id":153},"_4-事業者設定エクスポートの計画策定","4. 事業者設定エクスポートの計画策定",[15,156,157],{},"会計サービスの事業者設定ページ（決算月、課税方式、端数処理等）をスクレイピングしてスプレッドシートに出力する実装計画を策定。Codexレビューで「CTI直fetchでは年度切替が効かない」という致命的な指摘を受けて修正。プランのみ作成し、実装は翌日に持ち越し。",[76,159],{},[19,161,162],{"id":162},"今日の試行錯誤",[164,165,166,188],"table",{},[167,168,169],"thead",{},[170,171,172,176,179,182,185],"tr",{},[173,174,175],"th",{},"#",[173,177,178],{},"テーマ",[173,180,181],{},"試したこと",[173,183,184],{},"結果",[173,186,187],{},"気づき",[189,190,191,209,225,241,258,273,289,304,321,338,354],"tbody",{},[170,192,193,197,200,203,206],{},[194,195,196],"td",{},"1",[194,198,199],{},"DELETE API 422",[194,201,202],{},"リクエストボディの形式変更",[194,204,205],{},"失敗",[194,207,208],{},"DevToolsで正規リクエストと比較するのが最速",[170,210,211,214,216,219,222],{},[194,212,213],{},"2",[194,215,199],{},[194,217,218],{},"X-CSRF-Tokenヘッダー追加",[194,220,221],{},"成功",[194,223,224],{},"POST/PUT/DELETEすべてにCSRFトークン必須",[170,226,227,230,233,236,238],{},[194,228,229],{},"3",[194,231,232],{},"CSVインポート 500",[194,234,235],{},"FormDataフィールド名を確認",[194,237,221],{},[194,239,240],{},"ブラウザの送信内容と比較して差分を発見",[170,242,243,246,249,252,255],{},[194,244,245],{},"4",[194,247,248],{},"ルールID照合",[194,250,251],{},"CSV/JSON間のキー正規化",[194,253,254],{},"部分的成功",[194,256,257],{},"口座未紐付けルールが漏れる",[170,259,260,263,265,268,270],{},[194,261,262],{},"5",[194,264,248],{},[194,266,267],{},"account_id='0'でフォールバック検索",[194,269,221],{},[194,271,272],{},"Search APIの仕様: 未紐付け=account_id 0",[170,274,275,278,281,284,286],{},[194,276,277],{},"6",[194,279,280],{},"書式クリア",[194,282,283],{},"repeatCellで書式リセット",[194,285,205],{},[194,287,288],{},"Sheets APIのrepeatCellが効かないケース",[170,290,291,294,296,299,301],{},[194,292,293],{},"7",[194,295,280],{},[194,297,298],{},"データ行以降の行をdeleteDimension",[194,300,221],{},[194,302,303],{},"値・書式・行構造は独立レイヤー",[170,305,306,309,312,315,318],{},[194,307,308],{},"8",[194,310,311],{},"残高試算表URL",[194,313,314],{},"URLパターンを推測",[194,316,317],{},"404",[194,319,320],{},"拡張のexport.jsに正解が書いてあった",[170,322,323,326,329,332,335],{},[194,324,325],{},"9",[194,327,328],{},"仕訳帳取得",[194,330,331],{},"1月〜12月でハードコード",[194,333,334],{},"開始仕訳のみ",[194,336,337],{},"事業者の決算月を確認してから期間を組み立てるべき",[170,339,340,343,346,349,351],{},[194,341,342],{},"10",[194,344,345],{},"タイムスタンプhook",[194,347,348],{},"PreToolUseにdate追加",[194,350,205],{},[194,352,353],{},"PreToolUseのstdoutはコンテキストに入らない",[170,355,356,359,361,364,366],{},[194,357,358],{},"11",[194,360,345],{},[194,362,363],{},"UserPromptSubmitに変更",[194,365,221],{},[194,367,368],{},"フックの種類でstdoutの扱いが異なる",[76,370],{},[19,372,373],{"id":373},"今日の学び",[37,375,376,379,391,394,397],{},[40,377,378],{},"DevToolsでブラウザの正規リクエストとコードのリクエストを並べて差分を取る――この基本動作が最速のデバッグ手段",[40,380,381,382,386,387,390],{},"Sheets APIの",[383,384,385],"code",{},"clear","は値レイヤーのみ、",[383,388,389],{},"deleteDimension","は値・書式・行構造をまとめて消す",[40,392,393],{},"Chrome拡張のコードベースはDevTools MCP操作時のリファレンスとして8割使える。推測で動く前にまず既存コードを読む",[40,395,396],{},"Claude Codeフックの種類によってstdoutの行き先が違う。PreToolUseはUI表示のみ、UserPromptSubmitはコンテキスト注入",[40,398,399],{},"Codexレビューは3回投げて致命的な指摘を潰すパターンが定着してきた",[76,401],{},[19,403,404],{"id":404},"明日やること",[37,406,409,423,432],{"className":407},[408],"contains-task-list",[40,410,413,418,419,422],{"className":411},[412],"task-list-item",[414,415],"input",{"disabled":416,"type":417},true,"checkbox"," 事業者設定エクスポートの実装（",[383,420,421],{},"memo/2026-03-28/office-settings-export-plan.md","）",[40,424,426,428,429,422],{"className":425},[412],[414,427],{"disabled":416,"type":417}," サービス一覧のエクスポートJSON含有化（",[383,430,431],{},"memo/2026-03-28/plan-service-list-export.md",[40,433,435,437,438,422],{"className":434},[412],[414,436],{"disabled":416,"type":417}," 木村まやこ 2024年度の帳簿データ取得（ランブック: ",[383,439,440],{},"runbook-mf-export.md",[76,442],{},[19,444,445],{"id":445},"関連記事",[37,447,448,452,456],{},[40,449,450],{},[71,451,74],{"href":73},[40,453,454],{},[71,455,113],{"href":112},[40,457,458],{},[71,459,148],{"href":147},{"title":461,"searchDepth":462,"depth":462,"links":463},"",2,[464,471,472,473,474],{"id":21,"depth":462,"text":21,"children":465},[466,468,469,470],{"id":25,"depth":467,"text":26},3,{"id":80,"depth":467,"text":81},{"id":118,"depth":467,"text":119},{"id":153,"depth":467,"text":154},{"id":162,"depth":462,"text":162},{"id":373,"depth":462,"text":373},{"id":404,"depth":462,"text":404},{"id":445,"depth":462,"text":445},"diary","会計サービス連携Chrome拡張のルール同期機能を13件改修し、DevTools MCPでChrome拡張なしにAPIを直接操作できることを発見。Claude Codeフックでタイムスタンプ注入も設定","md",{},"/2026-03-28-diary","daily-log",false,"2026-03-28T00:00:00.000Z",{"title":5,"description":476},"2026-03/2026-03-28/diary-2026-03-28",[486,487,488,489,490],"日記","Chrome拡張機能","DevTools MCP","クラウド会計","Claude Code",null,"vJBZY6jAtCWrRCw5GvD2pTXTtPKAPCfnflLacO8m7q4",[],"https://log.eurekapu.com/favicon.svg",1778379978216]