💻 Claude Code入門
|
📖 6分
リファクタリング ― AIと一緒にコードを改善する
リファクタリングとは
リファクタリングとは、プログラムの外部的な動作を変えずに、内部構造を改善することです。コードをより読みやすく、保守しやすく、拡張しやすくすることが目的です。Claude Codeはコード全体を理解した上でリファクタリングを行えるため、人間が見落としがちな改善ポイントも発見できます。
コードスメル ― リファクタリングが必要なサイン
以下のような「コードスメル(コードの臭い)」は、リファクタリングが必要なサインです。
| コードスメル | 症状 | 対処法 |
|---|---|---|
| 長すぎる関数 | 1つの関数が50行以上 | 関数の抽出(Extract Method) |
| 重複コード | 同じ処理が複数箇所にある | 共通関数に抽出 |
| 複雑な条件分岐 | if文が深くネストしている | ガード節、早期リターン |
| マジックナンバー | 意味不明な数値がハードコード | 定数に名前をつける |
| 大きすぎるクラス | 1クラスに多すぎる責務 | クラスの分割 |
Claude Codeでリファクタリングを行う
パターン1: 関数の抽出
> src/utils/dataProcessor.js の processData関数が長すぎます。
適切な単位で小さな関数に分割してください。
テストが通ることを確認してください。
パターン2: 命名の改善
> src/api/handler.js の変数名・関数名を、
より意味が分かりやすい名前にリネームしてください。
関連するファイルの参照も全て更新してください。
パターン3: 条件分岐の簡略化
> この関数のネストが深すぎます。
ガード節(早期リターン)パターンを使って
フラットに書き直してください。
パターン4: 重複コードの除去
> プロジェクト内で重複しているコードを見つけて、
共通のユーティリティ関数にまとめてください。
リファクタリング前後の例
以下は条件分岐の簡略化の例です。
// リファクタリング前(深いネスト)
function processOrder(order) {
if (order) {
if (order.items.length > 0) {
if (order.payment) {
// 処理...
}
}
}
}
// リファクタリング後(ガード節)
function processOrder(order) {
if (!order) return;
if (order.items.length === 0) return;
if (!order.payment) return;
// 処理...
}
安全にリファクタリングを進めるコツ
- テストを先に用意する: リファクタリング前にテストがあると、動作が壊れていないことを確認できる
- 小さなステップで進める: 一度に大きく変えず、1つずつ変更してテストを回す
- Gitでこまめにコミット: 各リファクタリングステップごとにコミットしておく
- 動作が変わっていないか確認: 「テストを実行してください」と必ず確認する
💡 キーポイント: リファクタリングは「動作を変えずに構造を改善する」ことです。Claude Codeに「リファクタリングして」と指示する際は、具体的にどの部分を、どのように改善したいかを伝えましょう。「この関数を小さく分割して」「変数名を分かりやすくして」など、具体的な指示が良い結果につながります。