YAGNI原則とは?必要になるまで実装しないという強力な開発指針
プログラマーやシステムエンジニアの間でよく語られる原則のひとつに、**YAGNI(You Aren’t Gonna Need It)があります。
これは直訳すると「それ、結局必要にならないよ」という意味で、“まだ使われるか分からない機能は作らない”**というシンプルかつ強力な指針です。
YAGNIはアジャイル開発やXP(エクストリーム・プログラミング)で特に重視される考え方で、以下のようなシーンで役立ちます。
-
仕様が固まっていない段階での“予防的実装”が増える
-
「便利だから」と汎用化しすぎてコードが複雑化する
-
将来を見越した拡張ポイントが結局使われない
つまりYAGNIは、実際に必要になるまでは機能追加や抽象化を行わないことで、ムダな工数や複雑性を排除する方法論なのです。
なぜ人はYAGNIに反する実装をしてしまうのか?
私自身も経験がありますが、開発者はどうしても未来の拡張を想定したくなります。
-
「どうせ後で必要になるだろう」
-
「今のうちに汎用化しておけばスマートだ」
-
「あとで書き直すのは大変だから先に準備しておこう」
こうした“善意”が、結果的に機能の複雑化や納期遅延につながります。
YAGNIはその暴走を止め、「まず動くものを作る」という本質的な価値に立ち返らせてくれる考え方といえます。
【体験談】YAGNIを知らなかった頃にやらかした失敗
私がYAGNIを痛感したのは、とある社内ツールの開発でした。
最初に頼まれたのは「簡単なデータ入力フォーム」だけでしたが、私は先回りして以下のような機能を準備してしまいました。
-
将来使うかもしれないREST API連携
-
多言語対応を想定した抽象化構造
-
入力項目の動的生成機能
-
拡張しやすいプラグイン構造
しかし、実際に必要だったのは「入力してCSVで出力するだけ」という非常にシンプルな機能でした。
結果として、
・複雑な構造を理解するのに時間がかかり、保守性が低下
・将来の機能追加は一切来なかった
・リリースが遅れ、チームからも不評
という惨敗に終わりました。
後から思えば、必要になった時点で拡張すれば5分の1の工数で済んでいた案件でした。
YAGNIを実践することで得られる3つのメリット
1. 開発スピードが劇的に上がる
必要なものだけを作るので、工数が大幅にカットできます。
「仮に必要だったらどうする?」ではなく
「必要だと確定してから考える」
に切り替えることで、意思決定も早くなります。
2. コードがシンプルになり保守性が向上する
未来のために抽象化すると、現在のニーズに合わないコードが増えます。
YAGNIを意識すれば構造が必要以上に複雑にならず、理解しやすく修正もしやすいコードになります。
3. チーム内の認識齟齬が減る
「これって本当に今必要?」
を合言葉にすれば、仕様のブレも少なくなります。
特にレビュー時にYAGNIを基準にすると、議論の軸がぶれなくなり効果的です。
YAGNI原則を日常的に実践するための具体的な方法
● タスクの受け取り時に必ず“必要性の確定”を確認する
-
本当に今必要な機能か
-
どのユーザーが使うのか
-
使われる確率はどれくらいか
曖昧なら後回しにするのがYAGNIの基本です。
● “予防的抽象化”をやめる
たとえば
-
インターフェイスに切る
-
抽象クラスにする
-
設計を先に汎用化する
といった「あとで使うかも」は一旦忘れます。
必要が生じたときにリファクタリングすれば十分間に合います。
● 小さく作ってすぐフィードバックを得る
YAGNIはアジャイルとの相性が抜群です。
小さく作り、小さく改善する流れを確立すると、自然とYAGNIが守られます。
【応用編】YAGNI + リファクタリングでさらに便利になる開発術
YAGNIは“後回し”ではなく“タイミングを適切にする”考え方です。
そのため、必要になった時点で以下をセットで行うと効果が最大化します。
1. 機能が増え始めたタイミングで抽象化する
最初はベタ書きでOK。
しかし似た処理が3つ以上出てきたら抽象化すると最も効率が良いです。
2. YAGNIを守りつつ技術的負債を定期的に返す
YAGNIを理由に荒いコードを放置すると逆に負債が溜まります。
スプリントの中でリファクタリング時間を確保すると効果的です。
3. チーム全体で“YAGNIチェックリスト”を活用する
-
今必要か?
-
その機能にユーザーは存在するか?
-
誰かが困っている事実はあるか?
-
仮説ではなく要件として明文化されているか?
このチェックがあるだけで無駄な実装は激減します。
まとめ:YAGNIは“怠惰”ではなく“生産性を最大化する技術”
YAGNI原則は、「余計なものを作らない」という一言に集約されます。
しかし実際には、
-
開発スピードの向上
-
コードの簡潔化
-
チームの認識統一
-
無駄なコスト削減
など、開発に大きなプラスをもたらします。
私自身、YAGNIを学んでからは機能の取捨選択が圧倒的にうまくなり、無用な作り込みで後悔することが激減しました。
これから開発効率を上げたい方や、複雑なプロジェクトで悩んでいる方は、ぜひYAGNI原則を日常の開発に取り入れてみてください。
きっと開発が驚くほど軽やかになるはずです。

コメント