• #Square
  • #照合
  • #ペアリング
  • #Vue.js
  • #UI/UX
  • #Codex
  • #テスト
開発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でセルが欠けるテーブルの幅制御に有効