【こーどすめる】

コードスメル とは?

💡 コードの「嫌な臭い」—問題のサイン
📌 このページのポイント
コードスメルの代表例 長すぎるメソッド 300行超のメソッド… 重複コード processA() // 同じ処理… processB() // 同じ処理… コピペ 同じ処理がアチコチに 神クラス login() sendEmail() calcPrice() renderUI() saveDB() validate() export() …他30メソッド 1クラスに責務集中
コードスメルの代表例
ひよこ ひよこ

代表的なコードスメルは?

ペンギン先生 ペンギン先生

①Long Method(長すぎるメソッド、20行超が目安)、②God Class(何でもやる巨大クラス)、③Duplicated Code(コピペされた重複コード)、④Magic Number(意味不明な数値リテラル)、⑤Feature Envy(他のクラスのデータばかり触るメソッド)。これらは経験を積むと「臭い」を感じ取れるようになるよ

ひよこ ひよこ

Long Methodってどう直す?

ペンギン先生 ペンギン先生

Extract Method(メソッドの抽出)で小さなメソッドに分割するよ。1つのメソッドは「1つのこと」だけやるのが理想。コメントで「// ここからバリデーション」と区切っている部分は、そのまま別メソッドに切り出せるサイン。メソッド名が良ければコメントも不要になるんだ

ひよこ ひよこ

スメルに気づくコツは?

ペンギン先生 ペンギン先生

コードレビューで他人のコードを読む習慣、②「このコードを初めて見た人が理解できるか?」と自問する、③SonarQubeESLintのComplexity(循環的複雑度)ルールを活用、④「変更するのが怖いコード」はスメルの宝庫。良いコードを読む経験を積むと、スメルへの嗅覚が鋭くなるよ

ひよこ ひよこ

スメルがあっても動くなら直さなくていい?

ペンギン先生 ペンギン先生

今は動くけど、将来の変更コストが上がるのがスメルの怖さだよ。「動くから触らない」を繰り返すと、やがて誰も触れないレガシーコードになる。ただし全てを今すぐ直す必要もない。「触る予定がある場所」から優先的にリファクタリングする「ボーイスカウトルール」が現実的だね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「コードスメル」って出てきたら「リファクタリングが必要なコードの兆候」と思えればだいたいOK!
📖 おまけ:英語の意味
「Code Smell」 = コードの臭い
💬 コードが「臭う」=何か問題がありそうな兆候。Kent Beckが命名したよ
← 用語集にもどる