[{"data":1,"prerenderedAt":400},["ShallowReactive",2],{"content-/2026-03-30-diary":3,"all-pages-for-dir":398,"og-image-/2026-03-30-diary":399},{"id":4,"title":5,"body":6,"category":379,"description":380,"extension":381,"meta":382,"navigation":383,"path":384,"project_name":385,"published":386,"publishedAt":387,"seo":388,"stem":389,"tags":390,"todo":396,"updatedAt":396,"__hash__":397},"pages/2026-03/2026-03-30/diary-2026-03-30.md","2026年3月30日の開発日記 - 会計ソフト仕訳APIフルサイクル検証と未登録明細タブ実装",{"type":7,"value":8,"toc":366},"minimark",[9,14,18,22,27,30,33,41,47,60,71,74,78,81,84,87,90,94,108,116,118,122,133,136,140,148,156,158,161,328,330,333,347,349,352],[10,11,13],"h1",{"id":12},"_2026年3月30日の開発日記","2026年3月30日の開発日記",[15,16,17],"p",{},"朝5時台からChrome DevTools MCPでクラウド会計のAPIを叩き始め、夜まで拡張機能の機能実装に没頭した。仕訳登録→削除→復帰のフルサイクル検証から始まり、勘定科目エクスポート/インポート、未登録明細タブ、自動仕訳コマンド、証憑アップロードと、一日で5つの大きな機能を積み上げた。",[19,20,21],"h2",{"id":21},"今日やったこと",[23,24,26],"h3",{"id":25},"_1-会計ソフト仕訳apiフルサイクルテスト勘定科目エクスポートインポート","1. 会計ソフト仕訳APIフルサイクルテスト＋勘定科目エクスポート/インポート",[15,28,29],{},"仕訳登録（journalize）→削除（DELETE journals/{id}）→対象外解除（ignore_cancel）→未入力復帰の全サイクルをAPIで回せることを実証した。45件の一括登録を200ms間隔で流しても、レート制限に引っかからなかった。",[15,31,32],{},"仕訳更新API（PATCH update_new）をUIから操作してキャプチャし、複合仕訳の作成方法も解明。貸方を1行目に合計額集約でもAPIが受け入れることを実験で確認した。",[15,34,35,36,40],{},"勘定科目エクスポート/インポート機能も実装。事業者設定タブとHTML生成を共通コンポーネント化し、2カラムグリッドレイアウトを適用。会計ソフトCSVの",[37,38,39],"code",{},"\"\"","とSheetsの空文字の差異をtrim一行で解決した。",[15,42,43],{},[44,45,46],"strong",{},"主な成果:",[48,49,50,54,57],"ul",{},[51,52,53],"li",{},"仕訳CRUD全操作のAPIエンドポイントと仕様を解明",[51,55,56],{},"勘定科目エクスポート/インポート＋補助科目削除の実装完了",[51,58,59],{},"共通コンポーネント化で3タブ（自動仕訳ルール・事業者設定・勘定科目）のUIを統一",[15,61,62,65,66],{},[44,63,64],{},"詳細:"," ",[67,68,70],"a",{"href":69},"/mf-journal-api-and-ledger-account-feature","会計ソフト仕訳APIフルサイクルテストと勘定科目エクスポート/インポート機能の実装",[72,73],"hr",{},[23,75,77],{"id":76},"_2-未登録明細タブ自動仕訳コマンド証憑アップロード","2. 未登録明細タブ・自動仕訳コマンド・証憑アップロード",[15,79,80],{},"journalizing_suggestions APIで6サービス211件の未登録明細を一括取得。direction（出金/入金）と口座連動科目から借方/貸方を事前振り分けた複式簿記形式のインポートシートを設計した。デフォルト側セルにグレー背景を付けて、手入力箇所が一目で分かるようにした。",[15,82,83],{},"bulk_register APIを解析したが、ReactのuidとセッションCSRFに依存していて外部から呼べない。腹を括って1件ずつjournalize＋0.5秒ウェイトで実装。",[15,85,86],{},"自動仕訳コマンド（/mf-auto-journal）をPythonスクリプトで構築。複合仕訳対応で行挿入→行番号調整のロジックに行ずれバグが出たが、「ダウンロード→全行組み立て→バランス検証→一括書き込み」に再設計して根本解決した。",[15,88,89],{},"証憑アップロードはGoogle Drive→background.js→会計ソフトのcoffret APIで実現。",[15,91,92],{},[44,93,46],{},[48,95,96,99,102,105],{},[51,97,98],{},"未登録明細のエクスポート/インポート実装（複式簿記形式）",[51,100,101],{},"/mf-auto-journal、/mf-review-rulesスラッシュコマンド作成",[51,103,104],{},"証憑アップロード機能（Drive→会計ソフト添付）",[51,106,107],{},"勘定科目設定（データ連携）のエクスポート/インポートも追加",[15,109,110,65,112],{},[44,111,64],{},[67,113,115],{"href":114},"/mf-extension-unregistered-and-auto-journal","Chrome拡張 未登録明細タブ・自動仕訳コマンド・証憑アップロード",[72,117],{},[23,119,121],{"id":120},"_3-commitカスタムコマンドと世界一周旅行記事","3. /commitカスタムコマンドと世界一周旅行記事",[15,123,124,125,128,129,132],{},"Claude Codeで",[37,126,127],{},"/commit","を呼ぶとSkillツールに誤ルーティングされてUnknown skillエラーが返る問題を、",[37,130,131],{},".claude/commands/commit.md","で解決。機能単位の分割コミット戦略をCodex（GPT-5.4）にレビューしてもらい、モノレポのパス問題を修正した。",[15,134,135],{},"円安環境下の世界一周旅行記事も2本のリサーチエージェントを並列で走らせて作成。イラン戦争でホルムズ海峡危機が起きており中東全域が通過不可という発見があった。",[15,137,138],{},[44,139,46],{},[48,141,142,145],{},[51,143,144],{},"/commitカスタムコマンドで機能単位分割コミットを自動化",[51,146,147],{},"世界一周旅行記事（10ヶ月100〜135万円の試算）",[15,149,150,65,152],{},[44,151,64],{},[67,153,155],{"href":154},"/commit-command-and-travel-article","/commitカスタムコマンド作成と世界一周旅行記事の並列リサーチ",[72,157],{},[19,159,160],{"id":160},"今日の試行錯誤",[162,163,164,186],"table",{},[165,166,167],"thead",{},[168,169,170,174,177,180,183],"tr",{},[171,172,173],"th",{},"#",[171,175,176],{},"テーマ",[171,178,179],{},"試したこと",[171,181,182],{},"結果",[171,184,185],{},"気づき",[187,188,189,207,224,241,258,277,294,311],"tbody",{},[168,190,191,195,198,201,204],{},[192,193,194],"td",{},"1",[192,196,197],{},"仕訳登録API",[192,199,200],{},"UIからボタンクリックでネットワークリクエストをキャプチャ",[192,202,203],{},"成功",[192,205,206],{},"PATCHでなくDELETE + POST ignore_cancelが正しいフロー",[168,208,209,212,215,218,221],{},[192,210,211],{},"2",[192,213,214],{},"仕訳更新API",[192,216,217],{},"PUT で仕訳更新を試みる",[192,219,220],{},"400エラー",[192,222,223],{},"正解は PATCH /update_new。UIから実操作してキャプチャが確実",[168,225,226,229,232,235,238],{},[192,227,228],{},"3",[192,230,231],{},"複合仕訳バランス",[192,233,234],{},"各branchが自己バランス必須と仮定",[192,236,237],{},"誤り",[192,239,240],{},"貸方を1行目に合計額集約でもAPIは受け入れる",[168,242,243,246,249,252,255],{},[192,244,245],{},"4",[192,247,248],{},"bulk_register",[192,250,251],{},"会計ソフト内部の一括登録APIを外部から呼ぶ",[192,253,254],{},"失敗",[192,256,257],{},"React内部状態のuidに依存しており再現困難",[168,259,260,263,266,269,272],{},[192,261,262],{},"5",[192,264,265],{},"diff正規化",[192,267,268],{},"会計ソフトCSVとSheetsの空文字の差異",[192,270,271],{},"87件が偽の変更扱い",[192,273,274,276],{},[37,275,39],{},"と空文字をtrimで正規化して解決",[168,278,279,282,285,288,291],{},[192,280,281],{},"6",[192,283,284],{},"行ずれバグ",[192,286,287],{},"行挿入後のオフセット計算",[192,289,290],{},"行がずれる",[192,292,293],{},"累積オフセット比較が誤り。全行組み立てに再設計",[168,295,296,299,302,305,308],{},[192,297,298],{},"7",[192,300,301],{},"証憑アップロード",[192,303,304],{},"Chrome DevToolsから直接Google Driveにアクセス",[192,306,307],{},"CORSでブロック",[192,309,310],{},"拡張機能のbackground.jsからなら問題なし",[168,312,313,316,319,322,325],{},[192,314,315],{},"8",[192,317,318],{},"serviceName空",[192,320,321],{},"URLのaccount_idパラメータで取得",[192,323,324],{},"空のまま",[192,326,327],{},"正しいパラメータ名はaccount_id_hash%5D=",[72,329],{},[19,331,332],{"id":332},"今日の学び",[48,334,335,338,341,344],{},[51,336,337],{},"UIの操作をChrome DevToolsでキャプチャしてAPI仕様を逆引きするアプローチが最も確実",[51,339,340],{},"外部から呼べないAPI（React内部状態依存）は深追いせず、安定したAPIで迂回する判断が大事",[51,342,343],{},"スプレッドシートの行挿入→行番号調整は壊れやすい。「全行をメモリ上で組み立てて一括書き込み」の方が決定論的",[51,345,346],{},"Windows Git Bashのコマンドライン引数上限（約32,000文字）に注意。大きなJSONはバッチ分割で書き込む",[72,348],{},[19,350,351],{"id":351},"関連記事",[48,353,354,358,362],{},[51,355,356],{},[67,357,70],{"href":69},[51,359,360],{},[67,361,115],{"href":114},[51,363,364],{},[67,365,155],{"href":154},{"title":367,"searchDepth":368,"depth":368,"links":369},"",2,[370,376,377,378],{"id":21,"depth":368,"text":21,"children":371},[372,374,375],{"id":25,"depth":373,"text":26},3,{"id":76,"depth":373,"text":77},{"id":120,"depth":373,"text":121},{"id":160,"depth":368,"text":160},{"id":332,"depth":368,"text":332},{"id":351,"depth":368,"text":351},"diary","クラウド会計連携Chrome拡張の大規模機能追加。仕訳API全操作の検証から、勘定科目エクスポート/インポート、未登録明細タブ、自動仕訳コマンド、証憑アップロードまで一気に実装した一日。","md",{},true,"/2026-03-30-diary","daily-log",false,"2026-03-30T00:00:00.000Z",{"title":5,"description":380},"2026-03/2026-03-30/diary-2026-03-30",[391,392,393,394,395],"日記","Chrome拡張機能","クラウド会計","REST API","自動仕訳",null,"UzFIHWHwwoXdaInbKXmqWJh5bnfy0xQW7EpWKyPIRig",[],"https://log.eurekapu.com/favicon.svg",1778379978776]