Claude Codeで既存コードを壊さないための確認手順
はじめに
Claude Code でリファクタリングするときは、既存機能を壊さないことが重要です。本記事では、リファクタリングの安全性チェックリストを説明します。
リファクタリングの危険性
❌ 危険なシナリオ:
Claude Code でコードを書き換え
↓
ローカルテストは通る
↓
本番環境に deploy
↓
本番で動作しない
↓
ユーザーに影響
安全なリファクタリングの流れ
【Step 1】修正前の状態を記録
git diff で修正前後を比較可能に
【Step 2】テストを実行
修正前のテスト → すべてパス
【Step 3】Claude Code でリファクタリング
小さなステップで実行
【Step 4】修正内容を確認
git diff で詳細チェック
【Step 5】テストを実行
修正後のテスト → すべてパス
【Step 6】回帰テストを実行
関連機能も正常か確認
【Step 7】コミット
安全が確認されたら commit
確認チェックリスト
Step 1:修正前の準備
□ git status がクリーンか
□ 修正対象ファイルは単一か
□ 修正のスコープは明確か
□ テストが存在するか
□ 既存テスト数をメモする(修正前)
Step 2:修正前のテスト実行
□ pytest で全テスト実行
□ 成功したテスト数をメモ
□ カバレッジをメモ(オプション)
□ 実行時間をメモ
Step 3:Claude Code でリファクタリング
□ 指示は明確に「出力は変わらない」と記載
□ 変更行数は 50 行以下に制限
□ テスト既存ファイルを修正しないよう指示
□ 外部ライブラリを追加しないよう指示
Step 4:修正内容を詳細確認
□ git diff で全変更を確認
□ 意図しない削除がないか
□ インデント・フォーマットが壊れていないか
□ 余計なコメント削除がないか
□ 意図しないロジック変更がないか
Step 5:修正後のテスト実行
□ pytest で全テスト実行
□ テスト数は修正前と同じか
□ 全テストパスしているか
□ 実行時間は大幅に変わっていないか
□ カバレッジは低下していないか
Step 6:回帰テスト
□ 修正したファイルが import される全ファイルをチェック
□ 呼び出し元のテストも実行
□ 依存モジュールのテストも実行
□ 統合テストをすべて実行
Step 7:ビジュアル確認
□ コードは読みやすくなったか
□ 複雑さは減ったか
□ パフォーマンスは改善されたか
□ エラーハンドリングは壊れていないか
リファクタリング前後の比較表
【修正前】
テスト数:42
テスト実行時間:2.3 秒
カバレッジ:87%
行数:150 行
【修正後】
テスト数:42 ✅(同じ)
テスト実行時間:2.2 秒 ✅(時間短縮)
カバレッジ:87% ✅(維持)
行数:120 行 ✅(削減)
→ 安全にリファクタリング成功
よくある失敗
❌ 失敗1:テストなしでリファクタリング
「テストはないから大丈夫」
↓
後で動作しない
↓
修正に時間がかかる
✅ 改善:必ずテストを実行
「修正前テスト → 修正 → 修正後テスト」
↓
問題をすぐ発見
❌ 失敗2:大規模なリファクタリングを一度に
「複数ファイルを同時にリファクタリング」
↓
問題が複雑に
↓
原因特定が難しい
✅ 改善:1 ファイルずつ
「1 ファイル → テスト → OK → 次のファイル」
↓
問題が明確
実装例:リファクタリング実行
Before(修正前)
def calculate_total(items):
total = 0
for item in items:
if item['type'] == 'A':
total += item['price'] * 1.1
elif item['type'] == 'B':
total += item['price'] * 1.05
else:
total += item['price']
return total
Claude Code 指示
「src/calculator.py の calculate_total() をリファクタリング:
現状:ネストされた if-else が複雑
改善:
- 価格計算を単一の dict で定義
- 列内包表記を使用
- 読みやすさを改善
制約:
- 出力は全く同じ
- テストは tests/test_calculator.py に既に存在
- テストはすべてパスさせる
- 30 行以下の修正」
After(修正後)
def calculate_total(items):
multipliers = {'A': 1.1, 'B': 1.05}
return sum(
item['price'] * multipliers.get(item['type'], 1.0)
for item in items
)
チェック結果
□ git diff:削除 6 行、追加 4 行(キレイ)
□ テスト実行:42/42 パス ✅
□ 実行時間:修正前 2.3s → 修正後 2.1s ✅
□ 可読性:向上 ✅
→ リファクタリング成功
まとめ
Claude Code でリファクタリングするコツ:
安全なプロセス:
- テスト前状態を記録
- 修正前テスト実行
- 小さくリファクタリング
- 修正内容を確認
- 修正後テスト実行
- 回帰テスト実行
- コミット
チェックリスト活用:
- Step ごとのチェック
- テスト数が変わらないか確認
- パフォーマンス低下がないか確認
効果:
- 既存機能を壊さない
- 問題をすぐ発見
- 安心できるリファクタリング
Claude Codeに修正依頼を出すときの指示の作り方と合わせることで、安全なリファクタリングが実現します。