コードの不吉な匂い

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

リファクタリング品質

コードの不吉な匂いとは

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

匂いの優先度

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

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

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

ボーイスカウトルール

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

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

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

関連用語

関連する記事