git-bisect-helperlisted
Install: claude install-skill ttamakijp/dev-templates
# git-bisect-helper
`git bisect` で regression を導入したコミットを二分探索する手順。
## いつ使うか
- 「以前は動いていたのに、最新版で動かない」regression
- どのコミットが原因か明確でない
- 手動で個別コミットを試すには候補が多すぎる(10 件超目安)
## 手順
### 1. 良い版・悪い版を特定
```bash
# 現在の HEAD は壊れている
git bisect start
git bisect bad HEAD
# v1.2.0 では動いていた
git bisect good v1.2.0
```
### 2-A. 自動 bisect(再現スクリプトがある場合)
`bisect-check.sh` を作成(exit 0 = good, exit 1 = bad, exit 125 = skip):
```bash
#!/bin/bash
# 例: 該当テストが通れば good
./gradlew :app:testDebugUnitTest --tests "com.example.FooTest" || exit 1
exit 0
```
```bash
chmod +x bisect-check.sh
git bisect run ./bisect-check.sh
```
### 2-B. 手動 bisect
```bash
# 各ステップで挙動確認後
git bisect good # or bad / skip
```
### 3. 犯人コミット特定後
```bash
git bisect log > bisect-log.txt # 監査ログ保存
git bisect reset # 元のブランチに戻る
git show <bad-commit> # 原因コミットを精査
```
## チェックリスト
- [ ] `good` の commit で本当に再現しないことを最初に確認
- [ ] ビルドエラー時は `git bisect skip` で除外
- [ ] CI 上で実行する場合はキャッシュをクリアして検証
- [ ] 完了後 `git bisect reset` を忘れない
- [ ] `git bisect log` を保存し、再現可能な記録を残す
## アンチパターン
- 範囲が広すぎる(`good` を最古コミットにしない。直近の動作確認版を指定)
- 自動チェックスクリプトの exit code を 0/1 以外で返してしまう
- リファクタコミットで build 失敗 → skip せず bad にしてしまう