【やぐに】

YAGNI とは?

最終更新:
💡 「今使わないなら、まだ作らない」

You Aren't Gonna Need It(それは必要にならない)の略。将来必要になりそうだと予想しただけの機能は、実際に必要になるまで作らないという原則。

📌 このページのポイント
YAGNI — You Aren't Gonna Need It 過剰設計 必要な機能 ✓ たぶん使う機能 ? いつか使うかも… ? コスト増・複雑化・遅延 → YAGNI適用 必要な機能だけ作る ✓ 必要になったら追加 (その時の要件で判断) シンプル・速い・保守しやすい 「今必要ないものは作らない」— XPから広まった原則
YAGNIのイメージ
ひよこ ひよこ
将来必要になるかもしれないのに作らないの?
ペンギン先生 ペンギン先生
予想して作った機能は、実際には使われなかったり、必要になったときには要件が変わっていたりすることがあるんだ。Martin Fowlerは、作る手間、他の機能が遅れること、コードが複雑になって開発が遅くなること、あとで作り直すことをコストとして挙げているよ。
ひよこ ひよこ
でも拡張しにくいコードになりそう…
ペンギン先生 ペンギン先生
YAGNIは「拡張性を考えるな」ではないよ。Fowlerも、YAGNIは予想した機能のための仕組みに当てはまるもので、コードを変更しやすくする努力には当てはまらないと書いているんだ。読みやすく分けておくのは良いけど、使う予定のない実装を何種類も先に用意するのは避けよう。
ひよこ ひよこ
具体例は?
ペンギン先生 ペンギン先生
今の要件にないのに、次のようなものを先に作るのはYAGNIに反しやすいよ。①「いつかマルチテナント化するかも」でDB設計を複雑にする。②「いつか海外展開するかも」で全画面を多言語対応にする。③「いつか必要かも」でプラグインの仕組みを先に作る。ただ、近いうちに必要だとはっきりしているなら話は別なので、要件で判断しよう。
ひよこ ひよこ
後から変更する余裕がなかったらどうする?
ペンギン先生 ペンギン先生
そこが大事なポイントだね。Fowlerは、YAGNIはコードが変更しやすいときにだけ成り立つ戦略だと説明しているよ。テストが揃っていてリファクタリングしやすいからこそ、必要になってから安心して作れるんだ。YAGNIとテストは表裏一体だね。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「YAGNI」って出てきたら「予想だけで必要になるかわからない機能は、まだ作らない原則」と思えればだいたいOK!
📖 おまけ:英語の意味
「You Aren't Gonna Need It」 = それは必要にならない
💬 Martin Fowlerによると、C3というプロジェクトで、Chet Hendricksonが次々に挙げた「もうすぐ必要になる機能」に、Kent Beckが「それは必要にならないよ」と答えた会話が由来だよ。Ron Jeffriesも1998年に「必要だと予想したときではなく、実際に必要になったときに実装しよう」と書いているんだ

参考資料

← 用語集にもどる