コードの不吉な匂い
リファクタリングが必要であることを示唆するコード上の兆候や構造的な問題のパターン
リファクタリング品質
コードの不吉な匂いとは
コードの不吉な匂い (Code Smell) は、Martin Fowler が『リファクタリング』(1999 年) で体系化した概念で、バグではないが設計上の問題を示唆する兆候である。匂いを放置すると技術的負債が蓄積する。
代表的な匂い
| 匂い | 説明 | リファクタリング |
|---|---|---|
| 長すぎるメソッド | 1 メソッドが 50 行以上 | メソッドの抽出 |
| 巨大なクラス | 責務が多すぎる | クラスの分割 |
| 重複コード | 同じロジックが複数箇所 | 共通関数に抽出 |
| フィーチャーエンビー | 他クラスのデータを過度に参照 | メソッドの移動 |
| プリミティブ執着 | string や number で全てを表現 | 値オブジェクトに置換 |
| 長いパラメータリスト | 引数が 4 つ以上 | オブジェクトにまとめる |
具体例
// ❌ 長すぎるメソッド + プリミティブ執着
function processOrder(
userId: string, productId: string, quantity: number,
email: string, address: string, zipCode: string,
) {
// 100 行のロジック...
}
// ✅ 値オブジェクト + メソッドの分割
function processOrder(order: Order) {
const validated = validateOrder(order);
const priced = calculateTotal(validated);
return submitOrder(priced);
}
匂いの検出ツール
| ツール | 検出対象 |
|---|---|
| ESLint (complexity) | 循環的複雑度 |
| SonarQube | 技術的負債の可視化 |
| TypeScript strict | 型の不整合 |
| Code Review | 人間の判断 |
匂いの優先度
| 優先度 | 基準 |
|---|---|
| 高 | 変更頻度が高いコードの匂い |
| 中 | 新機能追加時に障害になる匂い |
| 低 | 安定しているコードの匂い |
変更頻度の高いコード (ホットスポット) の匂いを優先的に解消する。
ボーイスカウトルール
「コードを見つけた時よりも綺麗にして去る」。匂いを見つけたら、その場で小さなリファクタリングを行う。
コードの不吉な匂いの関連書籍も参考になる。