閉じる

DRY原則・KISS原則・YAGNI原則とは?初心者向けにわかりやすく解説

ソフトウェア開発では、きれいなコードを書くことがとても大切です。

その中でも有名なのが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回書かれています。

C言語
#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原則に従った改善例

共通のロジックを関数に切り出すことで、重複をなくすことができます。

C言語
#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に反する書き方の例

次は、偶数かどうかを判定するだけなのに、わざわざ複雑な書き方をしている例です。

C言語
#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原則に従った改善例

同じ処理でも、もっと直接的でシンプルに書けます。

C言語
#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つの整数の足し算だけ」であれば、まずはその最小限の実装に集中します。

C言語
#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は少しずつフォーカスが異なります。

原則フルスペル主な焦点典型的な効果
DRYDon’t Repeat Yourself重複の排除修正箇所が減り、バグが減る
KISSKeep It Simple, Stupidコードのシンプルさ理解しやすく、レビューしやすい
YAGNIYou Aren’t Gonna Need It機能の追加タイミング無駄な実装を減らし、開発を効率化

この表から分かるように、3つの原則は互いに補完し合う関係にあります。

たとえば、YAGNIを意識して余計な機能を作らなければ、結果としてコードがシンプルになり、KISSにもつながります。

また、DRYを守ることで、変更時の手間が減り、将来的な拡張もしやすくなります。

初心者が意識する順番

初心者の方が優先的に意識するとよい順番を、1つの考え方としてご紹介します。

  1. KISS原則(まずはシンプルに)
    最初のうちは、特に「複雑にしすぎない」ことが重要です。短く書くよりも、分かりやすく書くことを優先します。
  2. DRY原則(重複に気づいたらまとめる)
    同じようなコードを2回以上書いたら、「これは関数にできないかな」と意識してみると良い練習になります。
  3. YAGNI原則(先回りしすぎない)
    「将来のための汎用的な仕組み」に時間を使いすぎていないか、ときどき振り返るとよいです。

このように段階的に意識していくことで、無理なく3つの原則を身につけていくことができます。

まとめ

DRY原則・KISS原則・YAGNI原則は、それぞれ一言で言い表せるシンプルなルールですが、実際の開発では非常に大きな効果を持つ考え方です。

DRYは「同じことを何度も書かない」、KISSは「できるだけシンプルに」、YAGNIは「今いらないものは作らない」という姿勢を徹底することで、コードは読みやすく、修正しやすくなります。

まずは「このコードはもっとシンプルにできないか」「同じ処理を繰り返していないか」「本当に今必要な機能だけに集中できているか」を意識しながら、小さなプログラムから少しずつ実践してみてください。

設計原則・パターン

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!