【やぐに】
YAGNI とは?
最終更新:
💡 「今使わないなら、まだ作らない」
You Aren't Gonna Need It(それは必要にならない)の略。将来必要になりそうだと予想しただけの機能は、実際に必要になるまで作らないという原則。
📌 このページのポイント
- エクストリームプログラミング(XP)から広まった考え方で、アジャイル開発でもよく使われる
- 実際に必要になったときに実装すれば十分という考え方
- 使われない機能を作る手間と、それを抱え続ける複雑さを避け、過剰設計を防ぐ
- 変更しやすいコードにするためのリファクタリングやテストはYAGNIの対象外で、むしろYAGNIを実践する前提になる
将来必要になるかもしれないのに作らないの?
予想して作った機能は、実際には使われなかったり、必要になったときには要件が変わっていたりすることがあるんだ。Martin Fowlerは、作る手間、他の機能が遅れること、コードが複雑になって開発が遅くなること、あとで作り直すことをコストとして挙げているよ。
でも拡張しにくいコードになりそう…
YAGNIは「拡張性を考えるな」ではないよ。Fowlerも、YAGNIは予想した機能のための仕組みに当てはまるもので、コードを変更しやすくする努力には当てはまらないと書いているんだ。読みやすく分けておくのは良いけど、使う予定のない実装を何種類も先に用意するのは避けよう。
具体例は?
後から変更する余裕がなかったらどうする?
そこが大事なポイントだね。Fowlerは、YAGNIはコードが変更しやすいときにだけ成り立つ戦略だと説明しているよ。テストが揃っていてリファクタリングしやすいからこそ、必要になってから安心して作れるんだ。YAGNIとテストは表裏一体だね。
まとめ:ざっくりこれだけ覚えればOK!
「YAGNI」って出てきたら「予想だけで必要になるかわからない機能は、まだ作らない原則」と思えればだいたいOK!
📖 おまけ:英語の意味
「You Aren't Gonna Need It」 = それは必要にならない
💬 Martin Fowlerによると、C3というプロジェクトで、Chet Hendricksonが次々に挙げた「もうすぐ必要になる機能」に、Kent Beckが「それは必要にならないよ」と答えた会話が由来だよ。Ron Jeffriesも1998年に「必要だと予想したときではなく、実際に必要になったときに実装しよう」と書いているんだ