ソフトウェア開発には「YAGNI」以外にも「DRY」「KISS」など多くの開発原則が存在します。
これらは互いに関連しながらも異なる視点を持つ原則であり、それぞれの違いと相互関係を理解することで、より深い設計哲学を身につけることができます。
本記事ではYAGNI・DRY・KISSの違いと相互関係について詳しく解説していきます。
YAGNI・DRY・KISSの基本的な違いの結論
それではまず、3つの原則それぞれの定義と基本的な違いについて解説していきます。
主要な開発原則の比較
| 原則 | 正式名称 | 核心的なメッセージ | 対象 |
|---|---|---|---|
| YAGNI | You Aren’t Gonna Need It | 今必要ないものは作るな | 機能の実装範囲 |
| DRY | Don’t Repeat Yourself | 同じことを繰り返すな | コードの重複 |
| KISS | Keep It Simple Stupid | シンプルに保て | 設計・コードの複雑さ |
3つの原則はいずれもソフトウェアの品質向上を目的としていますが、フォーカスする問題と解決アプローチが異なります。
YAGNIは「何を実装するか(スコープ)」に関する原則、DRYは「コードの重複をなくすこと」に関する原則、KISSは「設計のシンプルさを保つこと」に関する原則です。
DRY原則とは
DRY(Don’t Repeat Yourself)は、「同じ知識・ロジックをシステム内で重複して表現しない」という原則です。
Andy HuntとDave Thomasの著書「達人プログラマー」で提唱された概念であり、コードの重複は保守コストの増大・バグの温床・変更困難性の原因となるという考え方を基盤としています。
DRYは「コードを書いた後の重複解消」に焦点を当てており、YAGNIの「そもそも書かない」という観点と補完的な関係にあります。
KISS原則とは
KISS(Keep It Simple, Stupid)は、「設計・コードはできる限りシンプルに保て」という原則です。
不必要な複雑さを避け、最も単純な解決策を選択することで、保守性・可読性・信頼性を高める考え方です。
KISSはYAGNIと非常に近い思想を持ちますが、YAGNIが「機能の追加をしない」ことにフォーカスするのに対し、KISSは「実装の複雑さを排除する」ことにフォーカスします。
YAGNI・DRY・KISSの相互関係
続いては、3つの原則がどのように相互に関係しているかを確認していきます。
YAGNIとDRYの組み合わせ
YAGNIとDRYは一見矛盾するように見える場面があります。
「今は1箇所にしか登場しないコードをDRYのために抽象化すべきか」という問いに対し、YAGNIは「まだ共通化する必要はない」と答えます。
この場合、前述の3回ルールを活用し、実際に繰り返しが確認された段階でDRYを適用するというバランスが推奨されます。
YAGNIとKISSの協調
YAGNIとKISSは非常に相性のよい原則です。
不要な機能を実装しない(YAGNI)ことで自然とコードがシンプルになり(KISS)、シンプルなコードを維持する(KISS)ことで後から機能を追加しやすくなる(YAGNIの意図)という好循環が生まれます。
YAGNIとKISSを両立させることが、質の高いシンプルなコードベースを作る基盤となります。
SOLID原則との関係
YAGNI・DRY・KISSはSOLID原則(単一責任・開放閉鎖・リスコフ置換・インターフェース分離・依存性逆転)とも密接に関連します。
SOLID原則の開放閉鎖原則(変更に閉じ・拡張に開く)は、YAGNIと組み合わせることで「今必要な拡張ポイントのみを適切に設ける」という実践的な設計指針になります。
| 組み合わせ | 相互作用 |
|---|---|
| YAGNI + DRY | 繰り返しが確認されてから共通化(3回ルール) |
| YAGNI + KISS | 不要実装を省きシンプルなコードを維持 |
| YAGNI + SOLID | 今必要な拡張ポイントのみ適切に設計 |
| DRY + KISS | 重複排除しながらシンプルさを維持 |
原則の使い分けと優先順位の考え方
続いては、複数の原則が競合する場面での使い分けと優先順位の考え方を確認していきます。
原則よりも文脈を優先する
どの開発原則も絶対的なルールではなく、あくまで判断の指針です。
原則同士が競合する場面では、現在の開発フェーズ・チームの状況・プロダクトのライフサイクルを考慮した上で、最も価値の高い選択を行うことが重要です。
原則に縛られすぎることなく、柔軟な判断力を磨くことが優れたエンジニアの条件でしょう。
原則を組み合わせた実践的な指針
実践的には「今必要な機能のみを(YAGNI)、重複なく(DRY)、シンプルに(KISS)実装する」というひとつの統合的な指針として捉えることが効果的です。
3つの原則を別々に適用するのではなく、設計・実装の思考プロセスに自然に組み込む習慣をつけることで、無意識に高品質なコードを書けるようになるでしょう。
まとめ
本記事では、YAGNI・DRY・KISS原則の違いと相互関係について解説しました。
YAGNIは機能の実装スコープ、DRYはコードの重複排除、KISSは設計のシンプルさという異なる観点を持ちながら、いずれも高品質なソフトウェア開発を支える重要な指針です。
3つの原則を統合的に理解し、「今必要なものを重複なくシンプルに実装する」という一貫した姿勢を日々の開発に取り入れることが、長期的なソフトウェア品質の向上につながります。
各原則の違いと関係性を理解した上で、状況に応じたバランスのよい適用を実践していきましょう。