リファクタリングの判断基準・手順・パターン集
既存コードの振る舞いを変えずに、構造だけを改善するための汎用スキル。
責務が混在したコードから、再利用可能な単位を抽出する。
// 抽出前: 関数内に正規化ロジックが埋め込まれている
export function createUser(input: { name: string; email: string }) {
const normalizedName = input.name.trim();
const normalizedEmail = input.email.trim().toLowerCase();
return { name: normalizedName, email: normalizedEmail };
}
// 抽出後: 正規化ロジックを独立関数へ抽出
export function normalizeUser(input: { name: string; email: string }) {
return {
name: input.name.trim(),
email: input.email.trim().toLowerCase(),
};
}
export function createUser(input: { name: string; email: string }) {
return normalizeUser(input);
}
重複する分岐や計算を 1 か所に集約し、変更点を単一化する。
// 統合前: バリデーションが複数箇所で重複
function validateName(name: string) {
if (!name || name.length > 50) throw new Error("invalid name");
}
function validateDisplayName(displayName: string) {
if (!displayName || displayName.length > 50) throw new Error("invalid name");
}
// 統合後: 共通関数に集約
function validateRequiredText(value: string, maxLength: number, field: string) {
if (!value || value.length > maxLength) {
throw new Error(`invalid ${field}`);
}
}
責務に対して不適切な配置を修正し、依存方向を正規化する。
肥大化したモジュールを責務ごとに分割する。
未使用コードを削除し、認知負荷と保守コストを下げる。