【やぐに】

YAGNI とは?

💡 「今使わないなら作るな」
📌 このページのポイント
YAGNI — You Aren't Gonna Need It 過剰設計 必要な機能 ✓ たぶん使う機能 ? いつか使うかも… ? コスト増・複雑化・遅延 YAGNI適用 必要な機能だけ作る ✓ 必要になったら追加 (その時の要件で判断) シンプル・速い・保守しやすい 「今必要ないものは作らない」— アジャイル開発の原則
YAGNIのイメージ
ひよこ ひよこ

将来必要になるかもしれないのに作らないの?

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

統計的に「将来必要になるかも」と思って作った機能の多くは実際には使われない。使われない機能もコードの保守コストはかかる。必要になった時に作れば、その時点の要件に最も適した実装ができる。事前に作ると要件を推測するから、的外れな実装になりがちなんだよ

ひよこ ひよこ

でも拡張しにくいコードになりそう…

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

YAGNIは「拡張性を考慮するな」ではなく「使わない機能を先に実装するな」だよ。インターフェースを使って依存性を逆転させるのは良い設計。でもそのインターフェースの実装を5種類も先に用意するのはYAGNI違反。「拡張できる構造」は作っていいけど「拡張そのもの」は必要になるまで待つんだ

ひよこ ひよこ

具体例は?

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

①「将来マルチテナント化するかも」でDB設計を複雑にする→今はシングルテナントでOK。②「将来国際化するかも」で全文字列を多言語対応にする→今は日本語だけでOK。③「将来プラグイン機構が必要になるかも」でプラグインシステムを先に作る→今の要件を直接実装すればOK。必要になったらリファクタリングしよう

ひよこ ひよこ

リファクタリングする余裕がなかったらどうする?

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

それはYAGNIの問題ではなくプロジェクト管理の問題だよ。テストが充実していればリファクタリングは怖くない。YAGNIは「テストを書いてリファクタリングできる環境」が前提。テストなしでYAGNIを実践すると、後から変更するのが怖くて技術的負債が溜まる。YAGNIとテストは表裏一体だね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「YAGNI」って出てきたら「今必要ない機能は作らない原則」と思えればだいたいOK!
📖 おまけ:英語の意味
「You Aren't Gonna Need It」 = それは必要にならない
💬 Ron Jeffriesが提唱。XPの「勇気」の価値観に基づく原則だよ
← 用語集にもどる