YAGNI

YAGNI (You aren't gonna need it) とは、エクストリーム・プログラミング(XP)から生まれた原則であり、「プログラマは、それが実際に必要となるまで機能を追加しない方が良い」というものである。直訳すると「あなたはそれを必要でなくなるだろう」、意訳すると「そんなの必要ないって」などという意味で、他の表現として"You aren't going to need it" (YAGTNI) や"You ain't gonna need it"というものもある。

XPの共同創設者であるは、「それが実際に必要になったときに実装するべきあって、必要になると予見したときに実装するべきでない」と述べている。ジョン・D・カーマックは、「将来の要件やアプリケーションを考慮して設計することが、トータルでプラスになることはほとんどないことを、経験の浅い開発者が理解するのは難しい」と書いている。

YAGNIは、XPのプラクティスである"do the simplest thing that could possibly work"（DTSTTCPW、うまくいく方法のうち最もシンプルなものでやれ）の背後にある原則である。これは、継続的リファクタリング、継続的自動単体試験、継続的インテグレーションなど、いくつかの他のプラクティスと組み合わせて使用されることを意図している。YAGNIが他のプラクティスのサポートに依存しているのは、XPの本来の定義の一部である。

 理由 
YAGNI原則を提唱する人々は、その理由として以下を挙げている。
後で使うだろうという予測の元に作ったものは、実際には10%程度しか使われない。したがって、それに費やした時間の90%は無駄になる。
余計な機能があると、仕事が遅くなり、リソースを浪費する。
予期しない変更に対しては、設計を単純にすることが備えとなる。そして、必要以上の機能を追加すると、設計が複雑になってしまう。
人生の時間は、貴重である。したがって、人間の能力は、ただコードを書くためではなく、現実の問題に集中するために使うべきである。
結局は、その機能は必要ないかもしれない。もしそうなったら、あなたがその機能を実装するのに費やした時間も、他のみんながそれを読むのに費やした時間も、その機能が占めていたスペースも、すべて無駄になってしまうだろう。
コードをすばやく実装するために最も良い方法は、あまりコードを書かないことである。そして、バグを減らすために最も良い方法も、あまりコードを書かないことである。

 脚注 

関連項目


 Don't repeat yourself

 バート・ランス#壊れていないなら直すな (if it ain't broke, don't fix it)
 KISSの原則
 実用最小限の製品
 MoSCoW分析

 過剰性能
 最適化 (情報工学)
 単一責任の原則
 SOLID
 UNIX哲学
 （悪い方が良い）


Category:ソフトウェア開発哲学
Category:プログラミング原則