ハローエンジニア!SEライターのナガヤンです。
みなさん仕事を効率的にやりたいと考えると思いますが、リスクコントロールはどのようにしているでしょうか?
先日、日本甲冑合戦之会の吉村英崇さんの次のツイートを目にしました。
護身術、リスクコントロールで習ったこと
— 吉村英崇@美味しい水を飲むマン _(:3 」∠ )_ (@Count_Down_000)July 29, 2021
●技術を覚えると難しい問題に対処したくなる
●だが、起きる可能性が低いことに時間・労力をつぎ込むな
●自己満足のトレーニングをするな
●時間・労力を、現実的に起きうる可能性が高い事に注ぎこめ
●#護身術も、費用対効果を考えろって考えが新鮮だった
護身術の費用対効果なんて、あまり聞かないですが、考えてみるとたしかに重要なファクターです。
この考え方は、プログラミングにおいても存在していて、「YAGNI原則」の名で知られています。
しかし、この「YAGNI原則」はときどき間違った使われ方をしているを見かけます。
せっかくなのでこの機会に「YAGNI 原則」の本来の意味と注意点をまとめました。
このページの目次
YAGNI (ヤグニ)は、ソフトウェア開発における原則の1つで、新しい機能は必要になってから追加しようという格言です。
もともとはエクストリームプログラミングの書籍「Extreme Programming Installed」で紹介された標語で、「You Aren't Gonna Need It(あなたはそれを必要としないだろう)」のアクロニム(頭字語:一連の単語の頭文字をとったもの)です。
原書は英語ですが、ピアソン・エデュケーションから和訳版「XPエクストリーム・プログラミング導入編」も出版されています。
YAGNI は「YAGNI原則」と呼ばれるほか、「You Aren't Going to Need It(それが必要になることはないでしょう)」「You Ain't Gonna Need It(そんなの必要ないって)」と紹介されることもありますが、どれも意味は同じです。
それではなぜ、 YAGNI が大事だと言われているのでしょうか。
YAGNI の最も重要なメッセージは、「リソースを無駄な時間に費やすな!」です。
YAGNI を提唱する人々は次の理由を挙げています。
例えば、HTMLを生成するプログラムを作るとしましょう。
あなたは2週間かけて、「表現したい内容」を入力すると、「HTML」が生成されるプログラムを作りました。
気に入って何度か動かしているうちに、生成されたHTMLを見て、こうも思いました。
HTMLにインデントを入れて生成したら、ソースが美しくなるだろう。
そう思ったあなたは、さらに1週間かけて、「完璧に整ったHTML」を生成させることに成功しました!
…しかし落ち着いて考えてみてください。いったい誰が見るでしょうか?
「おおっ!このHTMLはなんだ!こんな美しいHTMLは見たことないぞ!」
とわざわざソースコードを読んで感動してくれる人は、どのくらいいるでしょうか?
おそらく10%もいないでしょう。
こうした労力に見合うことのない自己満足的な機能は、残念ながら技術的負債になってしまいます。
それゆえに、YAGNIにしたがって事前に実装をやめるべきとされています。
とはいえ、最初から完全なプログラムを作れる人はめったにいません。
現実的には「継続的リファクタリング(継続して定期的にコードを適切な状態に書き直すこと)」など、コード品質を高める手法とともに適用することになるでしょう。
YAGNI は、強力なメッセージであるがゆえに、ときに間違って運用されることがあります。
それを問題提起しているのが、Kawashima さんのスライド「それはYAGNIか?それとも思考停止か?」です。
今回読み取っておきたいのは、「YAGNI を 設計のサボり にしてはいけない」ということです。
このスライドでは、2つの「非YAGNI」が紹介されています。
1つ目の「そもそも後回しにできない」は、パンクした車をイメージすると分かりやすいです。
パンクした車で運転を続けると、危険なのもありますが、スピードが出しにくい上にさらなる故障を招きます。
このように、緊急性のある場合や、前提として避けて通れない場合は、YAGNI を適用できません。
2つ目の「あとでやるにはコストがかかりすぎる」は、健康診断をイメージすると分かりやすいかもしれません。
あるタイミングでガンの予兆が見えたとしても、そのまま放置すると周囲に転移して取り返しのつかないことになります。
これは品質が一度崩れると立て直しにくいという点で、TDD(テスト駆動開発:コードを書くより先にテストを書く開発手法)とも通じます。
このように、将来にツケを残すことになるケースでは YAGNI を適用すべきではないでしょう。
YAGNI はプログラミングの文脈で生まれた概念ですが、人生やビジネスシーンでも活用できるメソッドです。
YAGNI の考え方は、あなたがやっている仕事などの時間を削減し、効率的な動き方を身につけることができるでしょう。
せっかく知った機会ですから、いまこの瞬間から YAGNI を実践してみてはいかがでしょうか。