ソフトウェア開発では、きれいなコードを書くことがとても大切です。
その中でも有名なのがDRY原則・KISS原則・YAGNI原則という3つの考え方です。
どれもシンプルな言葉ですが、実際のプログラミングで守れるかどうかで、コードの読みやすさや保守性が大きく変わります。
この記事では、それぞれの意味や具体例、初心者の方が意識するポイントを、図解やサンプルコードを交えながら丁寧に解説していきます。
DRY・KISS・YAGNIとは何か
3つの原則の概要
まず最初に、3つの原則をまとめてイメージをつかんでおきます。

この3つの原則は、それぞれ別々のスローガンのように見えますが、目指しているゴールは共通しています。
それは「保守しやすく、理解しやすいコードを書くこと」です。
簡単に言い換えると、次のようになります。
- DRY原則
同じことを何度も書かず、重複をなくす考え方です。 - KISS原則
コードはできるだけシンプルに保つという考え方です。 - YAGNI原則
将来のための機能を今は作らないという考え方です。
この3つは一緒に語られることが多く、日々のコーディングでも同時に意識することが多い原則です。
DRY原則とは(重複をなくす考え方)
DRYの意味と狙い
DRY原則は「Don’t Repeat Yourself」の略です。
直訳すると「自分を繰り返すな」という意味になり、より一般的には「同じ知識やロジックを複数箇所に重複させない」というルールです。

もし同じ処理が3箇所にコピペされていると、仕様変更やバグ修正のたびに3箇所すべてを直さなければなりません。
1箇所だけ直し忘れると、片方だけ動きが違うといった問題が起きます。
これを避けるために、共通部分を1箇所にまとめるのがDRY原則の目的です。
DRY違反の具体例
次のようなC言語のコードを考えてみます。
ユーザーの点数を表示する処理が、ほぼ同じ形で2回書かれています。
#include <stdio.h>
int main(void) {
int score1 = 80;
int score2 = 92;
// 学生1の結果を表示
printf("=== Student 1 ===\n");
if (score1 >= 90) {
printf("Grade: A\n");
} else if (score1 >= 80) {
printf("Grade: B\n");
} else if (score1 >= 70) {
printf("Grade: C\n");
} else {
printf("Grade: D\n");
}
// 学生2の結果を表示
printf("=== Student 2 ===\n");
if (score2 >= 90) {
printf("Grade: A\n");
} else if (score2 >= 80) {
printf("Grade: B\n");
} else if (score2 >= 70) {
printf("Grade: C\n");
} else {
printf("Grade: D\n");
}
return 0;
}
このコードは動作としては問題ありませんが、点数から評価を決めるロジックが2回繰り返されており、DRY原則に反しています。
DRY原則に従った改善例
共通のロジックを関数に切り出すことで、重複をなくすことができます。
#include <stdio.h>
// 点数から評価を表示する関数
void print_grade(const char *student_name, int score) {
printf("=== %s ===\n", student_name);
if (score >= 90) {
printf("Grade: A\n");
} else if (score >= 80) {
printf("Grade: B\n");
} else if (score >= 70) {
printf("Grade: C\n");
} else {
printf("Grade: D\n");
}
}
int main(void) {
int score1 = 80;
int score2 = 92;
// 共通処理を関数にまとめて再利用
print_grade("Student 1", score1);
print_grade("Student 2", score2);
return 0;
}
=== Student 1 ===
Grade: B
=== Student 2 ===
Grade: A
このように関数にまとめることで、評価ロジックを変更したい場合はprint_grade関数の中だけを修正すれば済むようになります。
DRY原則は、関数化やクラス化、共通モジュールの切り出しと非常に相性が良い考え方です。
KISS原則とは(シンプルに保つ考え方)
KISSの意味と意義
KISS原則は「Keep It Simple, Stupid」の略で、少し冗談めいた言い回しになっていますが、要点は「とにかくシンプルにしよう」ということです。
ここでの「シンプル」とは、次のような状態を指します。
- 一目で何をしているか分かる
- 条件分岐が複雑に入り組んでいない
- 不要な抽象化や回りくどい実装をしていない

シンプルさは、コードを読む人への親切です。
自分自身が数ヶ月後に読み直すときにも、大きな助けになります。
KISSに反する書き方の例
次は、偶数かどうかを判定するだけなのに、わざわざ複雑な書き方をしている例です。
#include <stdio.h>
#include <stdbool.h>
// 無駄に複雑な偶数判定
bool is_even(int n) {
// 一見すると何をしているのか分かりにくい
if (((n / 2) * 2) == n) {
return true;
} else {
return false;
}
}
int main(void) {
int x = 10;
if (is_even(x) == true) {
printf("%d is even.\n", x);
} else {
printf("%d is odd.\n", x);
}
return 0;
}
10 is even.
動作としては正しいですが、考え方が遠回りで、初心者には特に分かりにくい実装になっています。
KISS原則に従った改善例
同じ処理でも、もっと直接的でシンプルに書けます。
#include <stdio.h>
#include <stdbool.h>
// シンプルな偶数判定
bool is_even(int n) {
// 2で割った余りが0なら偶数
return (n % 2) == 0;
}
int main(void) {
int x = 10;
// true/falseとの比較も省略して読みやすく
if (is_even(x)) {
printf("%d is even.\n", x);
} else {
printf("%d is odd.\n", x);
}
return 0;
}
10 is even.
このように、余計な条件や演算を取り除き、最短距離で書くことがKISS原則のポイントです。
ただし「短ければ良い」という意味ではなく、「意図がストレートに伝わる書き方」を選ぶことが大切です。
YAGNI原則とは(今いらないものは作らない)
YAGNIの意味と背景
YAGNI原則は「You Aren’t Gonna Need It」の略で、「どうせ必要にならないよ」という少し挑発的な表現です。
意味としては「今必要でない機能を、将来のために先回りして作らない」というルールになります。

ソフトウェア開発では、「将来こういう機能が欲しくなるかもしれないから、今のうちに汎用的に作っておこう」と考えがちです。
しかしその多くは、実際には使われずに終わります。
結果として、不要なコードの保守だけが増えることになります。
YAGNI違反のイメージ例
たとえば、現在は「足し算だけできればよい」電卓プログラムを作るタスクだとします。
そこで最初から次のようなことまで考え始めると、YAGNI違反になりやすくなります。
- 将来のために三角関数や行列計算もサポートしようとする
- グラフ描画機能を先に組み込もうとする
- ネットワーク越しに複数人で同時操作できる機能を用意しようとする
このような機能を実装し始めると、本来の目的である「足し算の電卓」を完成させるまでが遠くなってしまいます。
シンプルなYAGNI遵守の例
現在の要件が「2つの整数の足し算だけ」であれば、まずはその最小限の実装に集中します。
#include <stdio.h>
// 今必要なのは「2つの数を足す」だけと割り切る
int add(int a, int b) {
return a + b;
}
int main(void) {
int x = 3;
int y = 5;
printf("%d + %d = %d\n", x, y, add(x, y));
return 0;
}
3 + 5 = 8
この状態で実際に使ってもらい、もし本当に「引き算も必要だ」といった要望が出てきたタイミングで、少しずつ機能を増やしていけばよいのです。
「必要になってから柔軟に拡張する」という姿勢がYAGNI原則の中心になります。
3つの原則をどう使い分けるか
それぞれの役割の違い
ここまで見てきたように、DRY・KISS・YAGNIは少しずつフォーカスが異なります。
| 原則 | フルスペル | 主な焦点 | 典型的な効果 |
|---|---|---|---|
| DRY | Don’t Repeat Yourself | 重複の排除 | 修正箇所が減り、バグが減る |
| KISS | Keep It Simple, Stupid | コードのシンプルさ | 理解しやすく、レビューしやすい |
| YAGNI | You Aren’t Gonna Need It | 機能の追加タイミング | 無駄な実装を減らし、開発を効率化 |
この表から分かるように、3つの原則は互いに補完し合う関係にあります。
たとえば、YAGNIを意識して余計な機能を作らなければ、結果としてコードがシンプルになり、KISSにもつながります。
また、DRYを守ることで、変更時の手間が減り、将来的な拡張もしやすくなります。
初心者が意識する順番
初心者の方が優先的に意識するとよい順番を、1つの考え方としてご紹介します。
- KISS原則(まずはシンプルに)
最初のうちは、特に「複雑にしすぎない」ことが重要です。短く書くよりも、分かりやすく書くことを優先します。 - DRY原則(重複に気づいたらまとめる)
同じようなコードを2回以上書いたら、「これは関数にできないかな」と意識してみると良い練習になります。 - YAGNI原則(先回りしすぎない)
「将来のための汎用的な仕組み」に時間を使いすぎていないか、ときどき振り返るとよいです。

このように段階的に意識していくことで、無理なく3つの原則を身につけていくことができます。
まとめ
DRY原則・KISS原則・YAGNI原則は、それぞれ一言で言い表せるシンプルなルールですが、実際の開発では非常に大きな効果を持つ考え方です。
DRYは「同じことを何度も書かない」、KISSは「できるだけシンプルに」、YAGNIは「今いらないものは作らない」という姿勢を徹底することで、コードは読みやすく、修正しやすくなります。
まずは「このコードはもっとシンプルにできないか」「同じ処理を繰り返していないか」「本当に今必要な機能だけに集中できているか」を意識しながら、小さなプログラムから少しずつ実践してみてください。
