← Reports へ戻る

Claude Codeで既存コードを壊さないための確認手順

Claude Codeでリファクタリング・修正するときに、既存機能を壊さないためのチェックリストを提供します。

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 でリファクタリングするコツ:

安全なプロセス

  1. テスト前状態を記録
  2. 修正前テスト実行
  3. 小さくリファクタリング
  4. 修正内容を確認
  5. 修正後テスト実行
  6. 回帰テスト実行
  7. コミット

チェックリスト活用

効果

Claude Codeに修正依頼を出すときの指示の作り方と合わせることで、安全なリファクタリングが実現します。

Claude Codeリファクタリング安全性テスト