• #tax-assistant
  • #github-copilot
  • #pr-review
  • #claude-code
開発tax-assistantメモ

概要

tax-assistantプロジェクトで作成した2つのPRについて、GitHub Copilotの自動レビューを確認し、指摘事項に対応してマージした。

PRタイトルCopilot指摘数対応結果
#12重複チェック機能追加1件確認のみ(既知の制約)
#13クレカ手動ボタン化3件3箇所修正

PR #12: 重複ステータス追加

変更内容

クレカ明細で「レシートがクレカ明細より多い場合」を、従来の「不一致(ng)」ではなく「重複(duplicate)」として区別する機能を追加。

  • DBスキーマのCHECK制約に duplicate を追加
  • バックエンドでrc_count > cc_countの場合にduplicateステータスを設定
  • フロントエンドでオレンジ色(#f59e0b)の表示を追加

Copilotの指摘

The CHECK constraint update for the new 'duplicate' status will only apply
to newly created databases. For existing databases, the old CHECK constraint
will still be in place and will reject any attempts to set check_status to
'duplicate', causing the application to fail.

SQLiteはALTER TABLEでCHECK制約を変更できないため、既存DBでは動作しないという指摘。

対応

この指摘は正しいが、tax-assistantはローカル開発ツールであり、DBの再作成が前提。マイグレーション機能は不要と判断し、指摘を確認のみで対応完了とした。

追加の修正として「重複:N」の表示を追加するコミットを実施。

PR #13: クレカ突き合わせの手動ボタン化

変更内容

クレカ明細タブの突き合わせ処理を、タブ切り替え時の自動実行から手動ボタンに変更。

  • onActivateフックによる自動チェックを削除
  • 「突き合わせを実行」ボタンUIを追加
  • 月フィルタに「すべて」オプションを追加
  • エラーハンドリング(checkError)を追加

Copilotの指摘(3件)

指摘1: selectYear()でcheckErrorのクリア漏れ

function selectYear(year: string | null) {
  if (!year) return
  selectedYear.value = year
  lastCheckResult.value = null  // 結果をクリア
  // checkError.value = null が必要
}

年を変更した際、前回のエラーメッセージが残り続ける問題。

指摘2: selectMonth()でcheckErrorのクリア漏れ

function selectMonth(month: string | null) {
  selectedMonth.value = month
  lastCheckResult.value = null  // 結果をクリア
  // checkError.value = null が必要
}

同様に、月を変更した際もエラーをクリアする必要がある。

指摘3: monthParamの潜在的なバグ

const monthParam = selectedMonth.value
// selectedYear.value が null の場合、
// "undefined-01" のような無効な形式になる可能性

年が未選択の状態で月だけ選択されている場合のエッジケース。

対応

3箇所すべてを修正するコミットを追加。

// selectYear()
checkError.value = null

// selectMonth()
checkError.value = null

// runCheck()
const monthParam = selectedYear.value && selectedMonth.value
  ? `${selectedYear.value}-${selectedMonth.value}`
  : undefined

作業の流れ

  1. PR #12のCopilotレビュー確認 - 1件の指摘を確認、既知の制約として対応完了
  2. PR #13のCopilotレビュー確認 - 3件の指摘を確認
  3. PR #13のブランチに切り替え - git checkout claude/creditcard-check-button-review-bzcDL
  4. 3箇所の修正を実施 - checkError.value = nullの追加、monthParamのガード条件追加
  5. 修正コミット・プッシュ
  6. PR #12にブランチ切り替え - git checkout claude/review-pending-docs-iQ5XP
  7. 「重複:N」表示追加 - 不一致件数と同様にduplicateカウントを表示
  8. 修正コミット・プッシュ
  9. 両PRをマージ

計画書との照合

要件定義書(requirements.md)の以下の項目に対応:

  • F-10 重複検出: 同一取引の重複取り込みを検出・警告
  • F-14 クロスチェック: クレカ明細とレシートの突合

状態遷移図(クレカ明細突き合わせの状態遷移)にduplicateステータスを追加済み。

学び

  • GitHub Copilotのレビューはエッジケースの見落としを指摘してくれる
  • 特に状態管理(エラークリア)の漏れは人間が見落としやすい
  • SQLiteのCHECK制約はマイグレーションできないため、ローカルツールでは再作成前提の設計が妥当