リファクタリング: TDD の第3フェーズ
TDD の RED-GREEN-REFACTOR サイクルにおける最終ステップ。テストが通った後、機能を変更せずにコード構造を改善することに焦点を当てる。
重要な安全対策
リファクタリング前に動作するコードをコミットする
これが保護機構として機能する。問題が発生した場合に元に戻せ、git 履歴で改善を明確に分離できる。
戦略的優先順位
4つの階層で優先順位を付ける:
Critical(即座に対処)
- •論理エラー
- •知識の重複(DRY 違反)
- •深いネスト
High(このセッション中に対処)
- •説明のない値(マジックナンバー)
- •不明確な識別子
- •長い関数
Nice(後でスケジュール)
- •軽微な改善
- •専用ユーティリティの追加
Skip(変更しない)
- •すでに適切に構造化されている
DRY 原則のニュアンス
同じビジネス概念が複数回現れ、要件変更時に一緒に変更される場合に抽象化する
構造的に似ていても、意味的に異なる概念は分離したままにする。
絶対的な境界
失敗するテストによって駆動されていないコードは書かない
これは以下を防ぐ:
- •投機的な機能
- •早すぎる最適化
- •不要な複雑さ
検証プロセス
リファクタリングを完了したと見なす前に:
- • テストが変更なしで通る
- • 動作の変更がない
- • 可読性が測定可能に改善されている
- • 投機的なコードがない
コミットフォーマット
code
refactor: <説明>
リファクタリングコミットは機能作業と混在させない。
リファクタリングのパターン
関数の抽出
長い関数から意味のあるまとまりを独立した関数に抽出する。
変数の抽出
複雑な式を説明的な名前の変数に抽出する。
ネストの削減
早期リターンやガード節を使用してネストレベルを減らす。
魔法の数値の除去
リテラル値を名前付き定数に置き換える。