Ad Space (horizontal)
Claude Codeでリファクタリングを自動化する方法
Claude Codeを使ってコードのリファクタリングを効率的に自動化する方法を解説。実践的なプロンプト例と具体的なリファクタリングパターンを紹介。
なぜClaude Codeでリファクタリングか
リファクタリングは重要だとわかっていても、手作業では時間がかかり後回しにされがちです。Claude Codeはプロジェクト全体を理解した上で、複数ファイルにまたがるリファクタリングを自律的に実行できます。
パターン1:型安全性の向上
any型の撲滅
> プロジェクト内の any 型を検索して、適切な型に置き換えて。
> 変更後に npx tsc --noEmit で型チェックが通ることを確認して。
Claude Codeは以下のように動作します。
- プロジェクト内の
any型を含むファイルを検索 - コードの文脈から適切な型を推論
- 型定義ファイルが必要であれば作成
- 型チェックを実行して問題がないか確認
実際の変換例
// Before
function processData(data: any): any {
return data.items.map((item: any) => item.name);
}
// After
interface DataPayload {
items: Array<{ name: string; id: number }>;
}
function processData(data: DataPayload): string[] {
return data.items.map((item) => item.name);
}
パターン2:関数の分割と責務整理
巨大な関数を小さな関数に分割するのは、Claude Codeが得意なタスクです。
> src/services/orderService.ts の createOrder 関数が200行を超えています。
> 単一責任の原則に従って、適切な粒度の関数に分割してください。
> 既存のテストが壊れないことを確認して。
分割のプロンプト例
> 以下の基準で関数を分割して:
> - 1関数30行以内
> - バリデーション、ビジネスロジック、永続化を分離
> - 各関数にJSDocコメントを追加
> - テストも関数ごとに分割
パターン3:エラーハンドリングの統一
プロジェクト全体のエラーハンドリングパターンを統一できます。
> プロジェクト内のエラーハンドリングを以下のパターンに統一して:
> - カスタムエラークラス (AppError) を使用
> - エラーコードを定数化
> - try-catchブロックでは必ずログ出力
Claude Codeが生成するコードの例を見てみましょう。
// src/errors/app-error.ts
export class AppError extends Error {
constructor(
public readonly code: string,
message: string,
public readonly statusCode: number = 500,
public readonly cause?: Error
) {
super(message);
this.name = 'AppError';
}
}
// エラーコード定数
export const ErrorCodes = {
USER_NOT_FOUND: 'USER_NOT_FOUND',
INVALID_INPUT: 'INVALID_INPUT',
DB_CONNECTION_ERROR: 'DB_CONNECTION_ERROR',
} as const;
パターン4:テストの追加・改善
テストカバレッジが低い箇所にテストを追加します。
# カバレッジレポートを元にテスト追加
npx vitest run --coverage | claude -p "カバレッジが低いファイルを特定して、不足しているテストケースを追加して"
> src/services/ 配下のテストカバレッジを80%以上にして。
> 正常系だけでなく、エッジケースと異常系もカバーして。
パターン5:APIレスポンス形式の統一
> 全APIエンドポイントのレスポンス形式を以下に統一して:
>
> 成功時: { success: true, data: T }
> 失敗時: { success: false, error: { code: string, message: string } }
>
> 既存のフロントエンドコードも合わせて修正して。
安全にリファクタリングするためのコツ
1. テストを先に確認する
> まず npm test を実行して、現在の全テストが通ることを確認して。
> 通らないテストがあれば先に報告して。
2. 段階的に進める
一度に全部変えるのではなく、モジュールごとに進めます。
> まず src/services/userService.ts だけリファクタリングして。
> 変更後にテストが通ることを確認してから次に進んで。
3. 差分を確認する
> git diff で変更内容を見せて。大きすぎる場合はファイルごとに要約して。
4. ブランチを分ける
git checkout -b refactor/error-handling
claude
> エラーハンドリングのリファクタリングを開始して...
実践:レガシーコードのモダン化
古いコードベースを段階的にモダン化する例です。
> このプロジェクトで以下のモダン化を実施して:
> 1. var を const/let に置換
> 2. コールバック関数を async/await に変換
> 3. require を import に変換
> 4. 各変更後にテストが通ることを確認
> 5. 一つずつ進めて、各ステップの結果を報告して
まとめ
Claude Codeを使えば、これまで数日かかっていたリファクタリングを数時間で完了できます。ポイントは、具体的なルールを提示すること、段階的に進めること、そして必ずテストで検証することです。まずは小さなモジュールから試してみてください。
Ad Space (rectangle)
#Claude Code
#リファクタリング
#コード品質
#自動化
#TypeScript