クラウド会計の月次推移表から過年度の元帳を読むChrome拡張を追加した

開発misc-dev

会計ソフトAの月次推移表で、2025年の売上高を眺めていた。 12月の列に載っている金額をクリックすると、総勘定元帳ではなく「存在しません」という表示が返ってきた。

これは会計ソフトAの仕様としては正しい。 セッションが持っている年度は2026年のままで、画面に出ている2025年の数字のほうは、拡張が取ってきてキャッシュに置いたものだからだ。 元帳は、いま選んでいる年度しか見に行かない。

ただ、数字の中身を確かめたくなるのは、たいてい過年度のほうだ。 そこで、拡張をもう1つ新規で足すことにした。

右側にペインを出して、元帳を模す

作りは、帳票ページで使っている既存の拡張と同じでいい。 月次推移表の右側にサイドパネルを開き、総勘定元帳を模した表をそこに並べる。

いきなり書かせずに、まず実装計画を作らせた。 何を作るかだけでなく、いま何が不便でこれを足すのかまで書かせている。 出てきた計画書はブラウザで開いて、末尾に並んだ3つの判断、つまり置き場所とデータの取り方と取得タイミングに答える形にしてもらった。 Codexのレビューは先に2回通してあって、1回目の3件を反映したあと、2回目は致命的な指摘なしで抜けていた。

保存先はDBでいいのか

キャッシュの置き場所の話になったとき、ブラウザで動く解析系のDBを持ち出したらどうか、と聞いてみた。

返ってきたのは、DuckDB-Wasmと、ブラウザ標準ならIndexedDBという話だった。 そのうえで、いま使っている chrome.storage.local は実体がLevelDBなので、広い意味ではもうDBに入っているのだと説明された。

そう言われて腹落ちした。 量が大きくないし、これから大きくなる予定もない。 なら、いま入っているところで十分だ。

税抜処理だと仕訳が税込みになって推移表とズレるのではないか、とずっと引っかかっていた。 それもこのとき消えた。 総勘定元帳も月次推移表も、元は全部仕訳帳から作られている。 ズレるわけがない。

過年度の仕訳をURLで開けるか

では、2026年を選んでいる状態のまま、2025年の仕訳をURLで直接開けないのか。 クエリパラメータあたりで飛べるなら話は早い。

できない、という答えだった。 年度を持っているのはセッションのほうで、ctitidterm_id も、どう渡しても現在の年度が返る。 この点は以前に実測済みだという。

仕訳番号をクリックして会計ソフトA側の仕訳帳へ飛ばす形にすると、必ず年度切替が挟まり、そのあと年度を戻す操作が残る。 面倒なので、ローカルに持っているデータから仕訳を組み立ててペインの下半分に出す形にした。

実データを流し込んだところで、貸借が合わない仕訳が出た。 同じ枝の借方と貸方が同じIDを持っていたため、重複排除が片方を弾いていたのが原因だった。 判定を直し、ついでにペインの下に余白を足して、摘要の列を詰めた。 借方と貸方と残高が、初期表示で見えるようになった。

年度タブが下の表まで切り替えていた

年次推移表のほうでは、年度のタブをクリックすると、下の推移表まで当期が切り替わっていた。

これは困る。 セッション上の当期は2025年なのだから、タブで2024年を押しても、下の表は2025年を当期として扱ってほしい。 どの年度を取得するかという話と、下に何年から表示するかという話は、別のものだ。

タブで表を差し替えるのをやめさせ、あわせて未取得の年度についてはセルのリンク自体を外させた。 未取得なのに「クリックすると元帳が出ます」と案内していては、さっきの「存在しません」と同じことになる。

「1年度ずつ取得」の前提を作り直す

ここまでの作りは、ボタンを押してから「何年度を取得」をもう一度押す、という1年度ずつの前提だった。 過去の年度が何年ぶんも登録されている事業者だと、これは単純に面倒くさい。

未取得の年度をまとめて取る形に変えてもらった。 新しい年度から順にチェーンで取りに行き、最後にセッションを元の年度へ戻す。

残高試算表では「未取得の6年度をまとめて取得」が出た。 2年度ぶん取ったところで中止を押し、残りを再開して完走させるまで実機で見ている。

仕訳が1本も入っていない年度は、取得しても「未取得」のまま残り、毎回まとめ取得の対象に入ってくる。 表の期間を絞った状態だと、仕訳がある年度まで「データなし」で固定されてしまう経路もあった。 年度全体に仕訳があるかどうかをAPIで先に確かめてから印を付ける形に直させた。 1件返るか0件返るかは、レスポンスを実測して裏を取っている。

まとめ取得のボタンが消えた理由

そのボタンが画面から消えていたので、壊れたのかと思って聞いた。

壊れてはいなかった。 未取得の年度が0になったので隠れていた、という説明だった。

理屈は分かるが、これは嫌だ。 押せるボタンが黙って消える画面は、次に何が起きるか読めない。 隠すのではなく無効で見せてほしい、と言い直した。

「未取得の年度はありません」と書いた状態で常に出るようになった。

Codexに12回止められた

コミットに入ってから、Codexのレビューが立て続けに止まった。 12回だった。

中身は、どれも実際に踏む経路のものだった。

  • 保存キーが年度のIDに依存していて、切替のたびにIDが変わるので取得直後に見失う(年度番号ベースに統一)
  • 元帳だけ取得に失敗した年度が「取得済み」で固定される
  • 取得中にページを離れると、セッションが過年度に残ったままになる(離脱ガードを追加)
  • 事業者を確認できないときに書き戻しが動く(確認できなければ止めるフェイルクローズに変更)
  • 取得と書き戻しが同時に走る

事業者の取り違えは書き込み事故に直結するので、ここは全部直させた。 一方、storage.remove が失敗したときに削除を成功として確定してしまう件は、11件目と12件目で同じ論点を繰り返し指摘された。 ストレージにトランザクションが無い以上、どこまでやっても同じ議論になる。 そのタブで古い元帳を使わせないところまで入れて、残りは理由を付けて通した。

コミットの途中では、別セッションが作った計画書を1本巻き込んでいるのに気づいた。 自分の変更だけをファイル指定で入れ直して、コミットを分け直した。

リロードのたびに出る許可ダイアログ

この日はずっと、拡張をリロードするたびに「リモートデバッグを許可しますか」が出ていた。 一度許可すれば済まないのか、と聞いた。

原因はこちら側だった。 リロードに使っていたスクリプトが、実行のたびに新しいCDP接続を張る作りになっていた。 接続を張り直すたびに、あのダイアログが出る。 接続を保ったままのChrome DevTools MCPなら1回で済む。 20回以上叩いていたらしい。

しかも、この拡張には最初から合図でリロードする仕組みが入っていた。 ページ側からイベントを投げ、バックグラウンドが chrome.runtime.reload() を呼ぶ経路だ。 入っているものを使わずに、外から毎回つなぎ直していたことになる。

同じことを繰り返さないように、スキルとプロジェクトのルールへ書かせた。

画面の真ん中に出ていた説明を、全部「?」へ畳む

午後は表示のほうを触った。

期首と期末の定義、「事由未確定」の出し方、「推定」が何を指すかといった注記が、どれも画面の中央に常時出ている。 毎回読むものではないし、気になったときに分かればいい。 基本的には全部なくていい、と伝えた。 注記はバーの「?」に寄せて、マウスオーバーで出す形へ全面的に変えてもらった。

書き戻しペインの導入文も、ボタン脇の注記も、「要確認」の直し方も、同じように畳んだ。

ここでCodexが1件拾ったのは、実際のバグだった。 モードを切り替える処理が毎回テキストを入れ直すので、証憑モードのときだけ古い文言が残る。 直したうえで、年次推移表と月次推移表と総勘定元帳の3画面で描画を確認してからコミットした。

検証用法人に何を入れていたか

拡張の動作を見ている検証用の法人に、どの事例の仕訳を入れていたのか分からなくなった。 頭に浮かんだ番号で合っているかを確かめてもらったら、合っていた。 2026年度に入っている仕訳は5本で、うち4本にメモが付いていた。

横に置いていた受取利息

朝のコミットで、前のセッションで触った受取利息のコードがCodexゲートに引っかかっていた。 今日の作業とは別だからと、そちらは別コミット待ちにして横へ置いていた。

置いたままにしているのを見て、直す必要があるなら直してほしい、と言った。 遠慮しすぎていた、と返ってきて、その場で直してコミットまで進んだ。

一日の終わりに計画書を実態へ合わせさせたときも、全部doneにはしなかった。 ディスク上で確認が取れた項目だけにチェックを打ち、残りは積み残しとして書き残してある。

学びメモ

  • 年度はセッションが持っている。URLのパラメータで過年度を指しても、返ってくるのは現在の年度だった
  • 保存キーを年度のIDに紐づけると、年度を切り替えた瞬間に見失う。年度番号で持つ
  • 押せるボタンを条件で消すと、使う側は次に何が起きるか読めない。消さずに無効で出す
  • 拡張に入っている開発用の仕組みを先に見る。外から接続し直す手段を20回以上使っていた

積み残しはストレージの削除まわりが1つ。 削除の失敗をどう扱うかは、トランザクションが無い範囲では決着しない。 いまはそのタブで古いデータを使わせないところで止めてある。

#Chrome拡張#クラウド会計#月次推移表#総勘定元帳#UI改善#開発日記