開発tax-assistantメモ
Square売上の1:1ペアリング実装と収入ビューアUI最適化
tax-assistantのSquare売上照合機能を一日で完成させた。DBスキーマからブラウザ確認まで通し、テスト66件全合格。
Square 1:1ペアリング機能
ペアリングとは
Square経由の売上データと銀行入金を突き合わせ、「どの売上がどの入金に対応するか」を自動判定する機能。
同日同額判定のロジック
日付と金額が一致するレコード同士をペアリングする方針。考慮が必要なケース:
- 同日同額が複数件: 先頭から順に1:1でペアリング。余りは未ペアリング
- 片方だけ複数件: 数が少ない方に合わせてペアリングし、余りは残す
- 金額不一致: 手数料率変動や合算入金の場合は未ペアリングとしてUI表示→手動確認
DBスキーマ
既存テーブルに双方向のペアリング参照カラムを追加。中間テーブルではなく直接参照にした。1:1対応が崩れないため十分と判断。
実装の10ステップ
DBスキーマ設計 → マイグレーション → ペアリングアルゴリズム → グルーピング関数 → APIエンドポイント → ペアリング解除API → フロントエンド型定義 → UIコンポーネント → テスト作成 → ブラウザ確認
テスト66件: ペアリングロジック35件、グルーピング関数10件、APIエンドポイント12件、データ整合性9件。
収入ビューアUI最適化
rowspanによるグループ化表示
確定済み仕訳を帳票種別ごとにまとめ、日付・取引先カラムをrowspanで結合。最初の行にrowspan属性を付与し、2行目以降は共通カラムをスキップする方式。
カラム幅の均等化
table-layout: fixed + <colgroup> でカラム幅を固定。借方3カラムと貸方3カラムの幅を揃え、対称性を表現。<colgroup> により、rowspanでセルがスキップされても幅が維持される。
rowspanの下線問題
border-collapse: collapse とrowspanの組み合わせで境界線が消える問題。グループ最終行に明示的なborder-bottomを設定して解決。
Codexレビュー3回の活用
開発の節目で計3回レビューを依頼し、15件の指摘を受けた。
- 1回目(ペアリングロジック): トランザクション管理のAPI層移譲、エラーハンドリング追加
- 2回目(UIコンポーネント): アクセシビリティ(scope属性)、パフォーマンス(computed化)
- 3回目(全体アーキテクチャ): 双方向参照の整合性チェック、マイグレーション冪等性
観点を絞って依頼すると的を射たフィードバックが返る。「全体的にレビューして」は表面的になりがち。
学び
- 双方向参照はアプリケーション層での整合性チェックが必須
- rowspan + border-collapse の組み合わせは境界線の消失に注意
<colgroup>はrowspanでセルが欠けるテーブルの幅制御に有効