コードの不吉な匂い

リファクタリングが必要であることを示唆するコード上の兆候や構造的な問題のパターン

リファクタリング品質

コードの不吉な匂いとは

コードの不吉な匂い (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 人間の判断

匂いの優先度

優先度 基準
変更頻度が高いコードの匂い
新機能追加時に障害になる匂い
安定しているコードの匂い

変更頻度の高いコード (ホットスポット) の匂いを優先的に解消する。

ボーイスカウトルール

「コードを見つけた時よりも綺麗にして去る」。匂いを見つけたら、その場で小さなリファクタリングを行う。

コードの不吉な匂いの関連書籍も参考になる。

関連用語