コードの不吉な匂い

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

リファクタリング品質

コードの不吉な匂いとは

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

匂いの優先度

匂いの優先度を以下にまとめる。

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

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

ボーイスカウトルール

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

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

この記事は役に立ちましたか?

関連用語

関連する記事