YAGNI原則とは?「今は要らない」を守るだけでコードが劇的に良くなる理由

システム開発・テクノロジー
YAGNI原則とは?ざっくりと3行で
  • You Aren’t Gonna Need It(それ、きっと要らなくなるよ)の略で、「今必要な機能だけを作れ」という教訓のことだよ。
  • 「将来使うかもしれないから」という予想でコードを書くと、大抵は予想が外れて無駄なゴミコードになるからやめよう、という考え方なんだ。
  • これを守ることで、プログラムがシンプルになり、バグが減り、開発スピードが圧倒的に速くなるね。
銀色の猫キャラクター「デプロイ太郎」が、不必要な機能を実装することの弊害と、YAGNI原則(今必要なものだけを作る)の重要性を解説する4コマ漫画。
①将来を見越し、宇宙語対応などの過剰で不要な機能を実装しようと意気込む。 ②あらゆる機能を詰め込んだ結果、コードが複雑に絡み合いスパゲッティ化する。 ③複雑すぎて緊急のバグが修正できず、納期直前にパニックに陥る。 ④不要な機能を捨て、「今必要なものだけ作る」YAGNI原則を理解し安堵する。

【深掘り】これだけ知ってればOK!

単なる「手抜き」だと思われがちだけど、実は「未来予測の不確実性に対するリスク管理」という賢い戦略なんだよ。

YAGNI(ヤグニ)は、エクストリーム・プログラミング(XP)という開発手法における重要なプラクティスの一つです。優秀なエンジニアほど、「あとで拡張しやすいように汎用的に作っておこう」と考えがちですが(オーバーエンジニアリング)、仕様変更が激しい現代において、その「あとで」が来る確率は高くありません。未使用の機能は、テストの手間を増やし、コードを読みづらくする「技術的負債」にしかならないのです。

初心者が現場で直面しそうなシーンとして、「念のための共通化」による複雑化があります。「この処理、他の画面でも使いそうだから共通関数にしておこう」と先回りして実装した結果、その後の仕様変更で「やっぱり微妙に違う処理が必要」になり、共通関数の引数がどんどん増えてスパゲッティコード化する…という失敗です。2回、3回と同じ処理が出てきてから共通化する(リファクタリングする)のが、正しいYAGNI原則の実践です。

会話での使われ方

将来的にPDF出力も必要になるかもしれない?いや、それはYAGNIでいこう。まずはCSV出力だけで十分だ。

このクラス設計、汎用性を考えすぎて複雑になってない? YAGNI原則に従ってもっとシンプルにしよう。

お客様の要望が変わったけど、YAGNIで作っていたおかげで修正が最小限で済みました。

【まとめ】3つのポイント

  • 予知能力はない:未来のことは誰にもわからないので、今の推測でコードを書かない
  • 今に集中:現在、確実に必要とされている機能(価値)を最速で届けることに注力する
  • 維持コストの削減:書かないコードにはバグは存在しない。コード量は少ないほど正義

よくある質問

Q
YAGNI原則とKISSの原則(Keep It Simple, Stupid)の違いは?
A
YAGNIは「機能の範囲(何を作るか)」の話で、KISSは「設計の単純さ(どう作るか)」の話です。「要らない機能は作るな」がYAGNI、「作るなら単純に作れ」がKISSです。
Q
YAGNI原則は「拡張性を考慮しなくていい」という意味ですか?
A
違います。「拡張しやすいきれいな設計」にはすべきですが、「まだ使わない拡張機能そのもの」を実装してはいけない、という意味です。変更に強いシンプルなコードを保つことが重要です。
Q
いつYAGNI原則を適用すべきですか?
A
アジャイル開発のように「仕様変更が頻繁に起こるプロジェクト」で特に有効です。逆に、一度決めた仕様が絶対に変更されない(ウォーターフォール型の)厳格なプロジェクトでは、初期設計が全てなので注意が必要です。
Q
YAGNIの反対語はありますか?
A
特定の用語はありませんが、「オーバーエンジニアリング(過剰設計)」や「フューチャークリープ(機能の肥大化)」などが対義的な状況を表します。

コメント

「IT用語、難しすぎて心が折れそう……」という方のための、ハードル低めな用語辞典です。

情報レベルは「基礎中の基礎」。会話を止めないためのエッセンスだけを抽出しています。分かりやすさを追求するあまり、時々例え話が暴走しているかもしれませんが、そこは「ほどよく」聞き流していただけると幸いです。
YouTubeも運営中。チャンネル登録はこちら!!
応援のワンクリックが大きな励みになります!
IT・通信業ランキング にほんブログ村 ベンチャーブログへ
ほどよくIT用語辞典システム開発・テクノロジー
デプロイ太郎のSNSを見てみる!!
タイトルとURLをコピーしました