YAGNI
表示
(You ain't gonna need itから転送)
"You aren't gonna need it"[1][2] (YAGNI)[3]とは、エクストリーム・プログラミング(XP)から生まれた原則であり、「プログラマは、それが実際に必要となるまで機能を追加しない方が良い」というものである[4]。直訳すると「あなたはそれを必要でなくなるだろう」、意訳すると「そんなの必要ないって」などという意味で、他の表現として"You aren't going to need it" (YAGTNI) [5][6]や"You ain't gonna need it"[7]というものもある。
XPの共同創設者であるロン・ジェフリーズは、「それが実際に必要になったときに実装するべきあって、必要になると予見したときに実装するべきでない」と述べている[8]。ジョン・D・カーマックは、「将来の要件やアプリケーションを考慮して設計することが、トータルでプラスになることはほとんどないことを、経験の浅い開発者が理解するのは難しい」と書いている[9]。
YAGNIは、XPのプラクティスである"do the simplest thing that could possibly work"(DTSTTCPW、うまくいく方法のうち最もシンプルなものでやれ)の背後にある原則である[2][3]。これは、継続的リファクタリング、継続的自動単体試験、継続的インテグレーションなど、いくつかの他のプラクティスと組み合わせて使用されることを意図している。YAGNIが他のプラクティスのサポートに依存しているのは、XPの本来の定義の一部である。
理由
[編集]YAGNI原則を提唱する人々は、その理由として以下を挙げている。
- 後で使うだろうという予測の元に作ったものは、実際には10%程度しか使われない。したがって、それに費やした時間の90%は無駄になる[10]。
- 余計な機能があると、仕事が遅くなり、リソースを浪費する[10]。
- 予期しない変更に対しては、設計を単純にすることが備えとなる。そして、必要以上の機能を追加すると、設計が複雑になってしまう[10]。
- 人生の時間は、貴重である。したがって、人間の能力は、ただコードを書くためではなく、現実の問題に集中するために使うべきである[8]。
- 結局は、その機能は必要ないかもしれない。もしそうなったら、あなたがその機能を実装するのに費やした時間も、他のみんながそれを読むのに費やした時間も、その機能が占めていたスペースも、すべて無駄になってしまうだろう[8]。
- コードをすばやく実装するために最も良い方法は、あまりコードを書かないことである。そして、バグを減らすために最も良い方法も、あまりコードを書かないことである[8]。
脚注
[編集]- ^ Extreme Programming Installed, Jeffries, Ronald E.; Ann Anderson, Chet Hendrickson (2001). 265 pages, p. 190, webpage: Books-Google-dIsC, quote: "YAGNI: 'You Aren't Gonna Need It.' This slogan, one of XP's most famous..., reminds us always to work on the story we have, not something we think we're going to need."
- ^ a b Extreme Programming examined, Succi, Giancarlo; Michele Marchesi, 2001, 569 pages, webpage: Books-Google-VSCh, quote: "XP says 'do the simplest thing that could possibly work ' because 'you aren't gonna need it'."
- ^ a b Object-oriented & classical software engineering, Schach, Stephen R. (2007). 618 pages, p., webpage: Book-Google-hWwh, quote: "Two acronyms now associated with extreme programming are YAGNI (you aren't gonna need it) and DTSTTCPW (do the simplest thing that could possibly work)."
- ^ Lindstrom, Lowell; Carmen Zannier; Erdogmus, Hakan, eds (2004). Extreme Programming and Agile Methods – XP/Agile Universe 2004: 4th Conference on Extreme Programming and Agile Methods. Lecture Notes in Computer Science. Berlin: Springer. p. 121. ISBN 3-540-22839-X
- ^ Fowler, Martin; Kent Beck (8 July 1999). Refactoring: Improving the Design of Existing Code. Addison-Wesley Professional, 431 pages, p. 68, webpage: BGoogle-1M. ISBN 978-0201485677. Quote: "you aren't going to need it".
- ^ Poppendieck, Mary; Tom Poppendieck (2003). Lean Software Development: An Agile Toolkit, p.59, webpage: BGoogle-hQ. Quote: "Kent Beck, Extreme Programming Explained, Chapter 17, uses the acronym YAGNI (You Aren't Going to Need It) for this practice and explains its rationale."
- ^ Olsen, Russ (2007). Design Patterns in Ruby, p.13, webpage: [1]. ISBN 9780321490452. Quote: "This design principle comes out of the Extreme Programming world and is elegantly summed up by the phrase You Ain't Gonna Need It (YAGNI for short)."
- ^ a b c d Jeffries, Ron (April 4, 1998). “You're NOT gonna need it!”. 2007年11月7日閲覧。
- ^ Carmack, John [@ID_AA_Carmack] (2021年6月18日). "It is hard for less experienced developers to appreciate how rarely architecting for future requirements / applications turns out net-positive. t.co/lusGdzkfd3" (英語). 2022年8月16日時点のオリジナルよりアーカイブ。X(旧Twitter)より2022年12月2日閲覧。
- ^ a b c extremeprogramming.com - You aren't going to need it. (YAGNI)>