← ClaudeAtlas

problem-solvinglisted

Fix bugs and data inconsistencies upstream at the root cause. Use when a bug or outage needs a fix decision(バグの根本原因・データ不整合・障害対応).
devbasex/ai-plugins · ★ 1 · AI & Automation · score 65
Install: claude install-skill devbasex/ai-plugins
# 問題解決ガイドライン データ不整合、バグ、障害対応における問題解決の原則と手順。 ## 1. 根本原因を探る(つじつま合わせをしない) ### 原則: 上流で直す 問題はデータフローの**最も上流**で修正する。下流でのパッチ(migrationによるデータ修正、SQL直接更新、出力時の辻褄合わせ)は最終手段。 ``` ❌ 悪いパターン DBに異常データがある → migrationで論理削除 → バッチ再実行 ✅ 良いパターン DBに異常データがある → なぜ入ったか調査 → 取り込みロジックにバリデーション追加 → 異常データを論理削除 → バッチ再実行 ``` ### 判断フロー ``` 1. 症状を確認(どのデータ・どの機能が、どう間違っているか) 2. データフロー/呼び出しチェーンを遡る(結果 → 計算 → 素材 → 取り込み → 外部ソース) 3. 最初に異常が発生した地点を特定 4. 再現テストを追加する(この時点で失敗することを確認する。下記「再現テストを先に書く」) 5. その地点のコードを修正 6. 再現テストが通ることを確認する 7. 下流にも防御的チェックを追加(多層防御) 8. 修正後にデータ修復(パイプライン再実行) ``` ### 再現テストを先に書く(必須) **修正の前に、不具合を再現する失敗テストを追加する。** 再現できないまま修正すると、 直ったかどうかを判定できず、同じ不具合の再発も検出できない。 | 確認すること | 目的 | | --- | --- | | 追加したテストが**失敗する** | 不具合を再現できている | | 失敗の理由が症状と一致する | 別の原因で落ちていない | | 修正後に**通る** | 直ったことの証跡 | | テストを残す | 同じ退行を二度検出できる | サイクルの詳しい進め方は `tdd-cycle`(未導入なら対象プロジェクトの既存テスト手順)に従う。 **再現テストが書けないときは、再現条件がまだ特定できていない。** 修正へ進まず 1〜3 に戻る。 どうしても自動テストにできない場合(外部環境依存など)は、手動の再現手順と確認結果を 記録して代わりとし、その旨を報告に明記する。 ### テストが困難な既存コードでは現状固定テストを先行する 対象にテストがほとんどない場合、再現テストを書く前に**現状の振る舞いを固定するテスト**を 置く。副作用を分離できず再現テストが書けない状態で修正すると、直したい振る舞い以外を 壊しても気づけない。手順は `refactoring` の現状固定テストに従う。 ```text 1. 変更対象の入口と副作用を洗い出す 2. 現状の出力を固定するテストを置く(不具合を含む現状もそのまま固定される) 3. 不具合を再現するテストを追加する(ここは失敗する) 4. 修正する → 3 が通り、2 のうち仕様として正しいものは通ったまま 5. 2 のうち不具合を固定していたものは、期待値を修正後の正しい値へ更新する ``` ### 典型的な見逃しパターン | 症状 | 表層の「原因」 | 真の根本原因 | |------|-------------|-------------| | 料金が異常値 | 計算ロジックのバグ | 上流の取り込み時に異常値が混入、バリデーション欠如 | | レコードの2WD/4WD逆転 | 割当ロジックの不具合 | ORM(Eloquent等)のリレーション型