「今必要じゃないなら作るな」という設計原則。Extreme Programming(XP)の共同創始者 Ron Jeffries が提唱した “You Aren’t Gonna Need It” の略。
概要
「将来こういう要件が来るかもしれないから」という予測に基づいて、今は使われない汎用化・抽象化・設定項目を先回りで作り込むことを戒める原則。XP の実践者たちは、必要になってから作っても手戻りは小さいが、要らなかった汎用化を後から剥がすコストは大きい、という経験則からこれを重視した。
よくある違反パターン
| パターン | 実際に起きること |
|---|---|
| 「拡張性のため」の抽象化レイヤー | 呼び出し元が 1 つしかないのに interface や factory を挟む |
| 使われない設定オプション | 「将来切り替えられるように」のフラグが誰にも使われないまま残る |
| 先回りの汎用化 | 3 パターン目が来る前に「n パターン対応」の共通化コードを書く |
| 空の拡張ポイント | 「後で追加するかもしれない」ためだけの空のフック・プラグイン機構 |
DRY・SoC との緊張関係
DRY や SoC は「重複を許すな」「関心を分離せよ」と背中を押す一方、YAGNI は「今要らない一般化はするな」とブレーキをかける。両者は対立するのではなく、「今ある重複・関心事」を整理するのが DRY/SoC、「まだない未来の要件」を先取りしないのが YAGNIという役割分担で補い合う。
AI 駆動開発との関係
LLM は指示された機能を実装する際、聞かれてもいない汎用化・オプション・抽象化レイヤーを自発的に足しがち(「念のため」設定項目を増やす、使われない分岐を用意するなど)。実態調査の結果、当初「拡張性のために残す」と計画していたコードがそもそもどこからも呼ばれていなかった(dead code)と判明し、YAGNI に沿って丸ごと削除に倒す、というパターンは棚卸しの現場で頻出する。
関連記事
- Python ジョブ群編【実践編 第8章】 — 「スタブをどう管理するか」を精緻に設計する前に、実態調査で dead code と判明し丸ごと削除した実録
- セキュリティ編【実践編 第10章】 — 呼び出しゼロの認可コードを「攻撃面」と判断し YAGNI で削除、復活条件まで決定ログに残した実録