YAGNI原則とは?本来の意味と注意点を解説

記事更新日: 2021/11/25

ライター: ナガヤン

ハローエンジニア!SEライターのナガヤンです。

みなさん仕事を効率的にやりたいと考えると思いますが、リスクコントロールはどのようにしているでしょうか?

先日、日本甲冑合戦之会の吉村英崇さんの次のツイートを目にしました。

 

護身術の費用対効果なんて、あまり聞かないですが、考えてみるとたしかに重要なファクターです。

この考え方は、プログラミングにおいても存在していて、「YAGNI原則」の名で知られています。

 

しかし、この「YAGNI原則」はときどき間違った使われ方をしているを見かけます。

せっかくなのでこの機会に「YAGNI 原則」の本来の意味と注意点をまとめました。

YAGNIとは?

YAGNI (ヤグニ)は、ソフトウェア開発における原則の1つで、新しい機能は必要になってから追加しようという格言です。

もともとはエクストリームプログラミングの書籍「Extreme Programming Installed」で紹介された標語で、「You Aren't Gonna Need It(あなたはそれを必要としないだろう)」のアクロニム(頭字語:一連の単語の頭文字をとったもの)です。

著者
Chet Jeffries, Ron Anderson, Ann Hendrickson
書籍名
『Extreme Programming Installed』
価格
6,949円
発売日
2000/10/16
評価
Amazon

原書は英語ですが、ピアソン・エデュケーションから和訳版「XPエクストリーム・プログラミング導入編」も出版されています。

 

YAGNI は「YAGNI原則」と呼ばれるほか、「You Aren't Going to Need It(それが必要になることはないでしょう)」「You Ain't Gonna Need It(そんなの必要ないって)」と紹介されることもありますが、どれも意味は同じです。

なぜ YAGNI なのか 

それではなぜ、 YAGNI が大事だと言われているのでしょうか。

YAGNI の最も重要なメッセージは、「リソースを無駄な時間に費やすな!」です。

 

YAGNI を提唱する人々は次の理由を挙げています。

YAGNI を実践すべき根拠
  • きっと使う"だろう"という予測で作られた機能は、実際には10%程度しか使われない。
  • 余分な機能があると、仕事に時間がかかり、リソースを浪費する。
  • 余分な機能は設計を複雑化させ、予期しない変更が起こった時、より多くの変更コストを支払うことになる。
  • 人生の時間は貴重である。ゆえに、コードを書くためではなく、現実の問題に集中するために費やすべきだ。
  • コードをすばやく実装する最も良い方法は、余分なコードを書かないことだ。
  • バグを減らすために最も良い方法も、余分なコードを書かないことだ。

 

例えば、HTMLを生成するプログラムを作るとしましょう。

あなたは2週間かけて、「表現したい内容」を入力すると、「HTML」が生成されるプログラムを作りました。

 

気に入って何度か動かしているうちに、生成されたHTMLを見て、こうも思いました。

HTMLにインデントを入れて生成したら、ソースが美しくなるだろう。

そう思ったあなたは、さらに1週間かけて、「完璧に整ったHTML」を生成させることに成功しました!

 

…しかし落ち着いて考えてみてください。いったい誰が見るでしょうか?

「おおっ!このHTMLはなんだ!こんな美しいHTMLは見たことないぞ!」

とわざわざソースコードを読んで感動してくれる人は、どのくらいいるでしょうか?

 

おそらく10%もいないでしょう。

こうした労力に見合うことのない自己満足的な機能は、残念ながら技術的負債になってしまいます。

それゆえに、YAGNIにしたがって事前に実装をやめるべきとされています。

 

とはいえ、最初から完全なプログラムを作れる人はめったにいません。

現実的には「継続的リファクタリング(継続して定期的にコードを適切な状態に書き直すこと)」など、コード品質を高める手法とともに適用することになるでしょう。

YAGNIは思考停止か? 

YAGNI は、強力なメッセージであるがゆえに、ときに間違って運用されることがあります。

それを問題提起しているのが、Kawashima さんのスライド「それはYAGNIか?それとも思考停止か?」です。

 

今回読み取っておきたいのは、「YAGNI を 設計のサボり にしてはいけない」ということです。

このスライドでは、2つの「非YAGNI」が紹介されています。

2種類の非YAGNI
  • それ、そもそも後回しにできないよ。
  • 今やっとかないと後でやるにはコストがかかりすぎる。

引用元:それはYAGNIか? それとも思考停止か?fromYoshitaka Kawashima

非YAGNI その1「そもそも後回しにできない」

1つ目の「そもそも後回しにできない」は、パンクした車をイメージすると分かりやすいです。

パンクした車で運転を続けると、危険なのもありますが、スピードが出しにくい上にさらなる故障を招きます。

このように、緊急性のある場合や、前提として避けて通れない場合は、YAGNI を適用できません。

非YAGNI その2「あとでやるにはコストがかかりすぎる」

2つ目の「あとでやるにはコストがかかりすぎる」は、健康診断をイメージすると分かりやすいかもしれません。

あるタイミングでガンの予兆が見えたとしても、そのまま放置すると周囲に転移して取り返しのつかないことになります。

これは品質が一度崩れると立て直しにくいという点で、TDD(テスト駆動開発:コードを書くより先にテストを書く開発手法)とも通じます。

このように、将来にツケを残すことになるケースでは YAGNI を適用すべきではないでしょう。

YAGNI を使いこなして、自由に使える時間を手に入れよう

YAGNI はプログラミングの文脈で生まれた概念ですが、人生やビジネスシーンでも活用できるメソッドです。

YAGNI の考え方は、あなたがやっている仕事などの時間を削減し、効率的な動き方を身につけることができるでしょう。

せっかく知った機会ですから、いまこの瞬間から YAGNI を実践してみてはいかがでしょうか。

この記事を書いたライター

ナガヤン

著者プロフィール

こんにちは、SEライターのナガヤンです!
サーチバンクをご覧いただき、ありがとうございます。

サーチバンクでは、エンジニア中心のメンバーで、私たちだからこそできる、べんりで楽しくなる情報を発信していきます!

これからの働き方を考えるメディア「JobTier」にて、対談記事を書いていただきました!

この記事に関連するラベル

ページトップへ