【あんちぱたーん】

アンチパターン とは?

最終更新:
💡 「やってはいけない」設計の見本帳

一見良さそうに見えるのに、実際には後で問題を引き起こす設計や実装のやり方。名前を付けて共有することで、チームで早めに気づけるようにする。デザインパターン(良い解決策の型)と対比して使われる言葉。

📌 このページのポイント
良い設計パターン vs アンチパターン ✓ 良い設計パターン 単一責任の原則 依存性の注入 疎結合な設計 ✗ アンチパターン 神クラス(God Class) スパゲッティコード コピー&ペースト開発 VS
良い設計パターンとアンチパターンの対比
ひよこ ひよこ
代表的なアンチパターンは?
ペンギン先生 ペンギン先生
①God Object(何でもやる巨大クラス)、②Spaghetti Code(制御の流れが複雑に絡み合ったコード)、③Golden Hammer(お気に入りの技術を何にでも使う)、④Premature Optimization(早すぎる最適化)、⑤Cargo Cult Programming(意味を理解せずに真似やコピペをする)。どれも「最初は楽だけど後から苦しくなる」パターンだよ
ひよこ ひよこ
アンチパターンを知る意味は?
ペンギン先生 ペンギン先生
名前が付いていると「これゴッドオブジェクトになってない?」とチーム内で問題を共有しやすいんだ。「このクラスは500行あって責任が多すぎて…」と長く説明するより、「God Objectになりかけてる」の一言で伝わる。問題を早めに見つけるための共通語彙になるよ
ひよこ ひよこ
早すぎる最適化って何がダメなの?
ペンギン先生 ペンギン先生
ドナルド・クヌースが1974年の論文で「早すぎる最適化は諸悪の根源」と書いたことで有名だね。ただ同じ箇所で、重要な3%の部分の最適化は逃すべきではないとも書いているよ。どこが遅いか分からない段階で勘で最適化すると、コードが複雑になるのに効果は薄い。まず計測して、本当に遅い部分を最適化するのが基本だよ
ひよこ ひよこ
アンチパターンに陥ったらどうする?
ペンギン先生 ペンギン先生
リファクタリングで段階的に解消するのが基本。God Objectは責務を分割、Spaghetti Codeは関数やクラスに整理、コピペコードは共通化。一度に直そうとせず、テストを書きながら少しずつ改善する。「来た時よりきれいにして帰る」つもりで、コードを触るたびに少し良くしていこうね
ひよこ ひよこ
良いパターンを使っていれば安心なの?
ペンギン先生 ペンギン先生
そうとも限らないんだ。マーティン・ファウラーも、同じ解決策がある状況では良いパターンで、別の状況ではアンチパターンになると書いているよ。パターンの名前だけで判断せず、今の状況で本当に問題を解決しているかを確かめることが大事なんだ
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「アンチパターン」って出てきたら「一見良さそうだけど実は悪い設計の定番」と思えればだいたいOK!
📖 おまけ:英語の意味
「Anti-pattern」 = 対パターン
💬 Anti(反対の)とPattern(パターン)を組み合わせた言葉だよ。1995年にアンドリュー・ケーニッヒが雑誌の記事で使い、「表面上は解決策に見えるけど、実は解決策ではないもの」という意味で紹介されたんだ

参考資料

← 用語集にもどる