クラウド会計の月次推移表から過年度の元帳を読むChrome拡張を追加した
会計ソフト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で直接開けないのか。 クエリパラメータあたりで飛べるなら話は早い。
できない、という答えだった。
年度を持っているのはセッションのほうで、cti も tid も term_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つ。 削除の失敗をどう扱うかは、トランザクションが無い範囲では決着しない。 いまはそのタブで古いデータを使わせないところで止めてある。