KISS原則

英語名 KISS Principle
読み方 キス プリンシプル
難易度
所要時間 即日適用可能
提唱者 米国海軍(ケリー・ジョンソン)
目次

ひとことで言うと
#

シンプルに保て、余計なことをするな。必要以上に複雑な設計やコードを避け、誰が読んでも理解できるシンプルさを最優先する原則。

押さえておきたい用語
#

押さえておきたい用語
YAGNI
“You Ain’t Gonna Need It"の略。今必要でない機能は作るなという原則。KISSと相性が良い。
過剰設計(Over-Engineering)
現在の要件に対して必要以上に複雑な設計を行うこと。将来を見越しすぎた抽象化が典型例。
可読性(Readability)
コードが他の開発者にとってどれだけ理解しやすいかの度合い。KISSの本質はここにある。
認知的複雑度
コードを理解するために必要な脳のメモリ消費量。ネストの深さや分岐の多さで増大する。

KISS原則の全体像
#

シンプルさの追求サイクル
複雑なコード深いネスト・過剰な抽象化未来の要件への先回り実装「頭のいいコード」の誘惑シンプルなコード早期リターン・ガード節今の要件を満たす最小実装初めて読む人が理解できるKISS判定基準「これ何してるの?」と聞かれたら複雑すぎ1ヶ月後の自分が即座に理解できるかリファクタ
KISS原則の適用プロセス
1
最小実装
最もシンプルな解決策を考える
2
複雑さ検知
ネスト・行数・分岐をチェック
3
簡素化
リファクタリングでシンプルにする

こんな悩みに効く
#

  • 自分が書いたコードを1ヶ月後に読み返して理解できない
  • 「将来のため」に作った抽象化が、結局使われずに複雑さだけ残った
  • チームメンバーがコードを理解できず、開発速度が落ちている

基本の使い方
#

ステップ1: 最もシンプルな解決策を考える

問題を解決する最も単純な方法は何かをまず考える

  • 「今の要件を満たす最小限の実装は何か?」を自問する
  • デザインパターンや高度な技術を使う前に、素直な実装を検討する
  • YAGNI(You Ain’t Gonna Need It)も意識する

ポイント: シンプルとは「手抜き」ではなく、本質に集中すること。

ステップ2: 複雑さの兆候をチェックする

不必要な複雑さが混入していないか確認する

  • 1つの関数が50行を超えていないか?
  • ネストが3段以上深くなっていないか?
  • 使われていない引数や条件分岐がないか?
  • 「頭のいいコード」を書こうとしていないか?

ポイント: コードレビューで「これ何してるの?」と聞かれたら、複雑すぎるサイン。

ステップ3: リファクタリングでシンプルにする

複雑さを見つけたら、シンプルな構造に書き直す

  • 長い関数は意味のある単位で分割する
  • 条件分岐が多ければ、早期リターンやガード節を使う
  • 使われていないコードは削除する(コメントアウトではなく削除)

ポイント: 「このコードを初めて読む人が理解できるか?」を判断基準にする。

具体例
#

例1:ユーザーの権限チェックをシンプルにする

Before(KISS違反): 将来の拡張を見越して、権限チェックにAbstract Factoryパターン + Strategyパターン + カスタムアノテーションを導入。5つのクラスと3つのインターフェースで構成。現在の権限は「admin」と「user」の2種類だけ。合計250行

After(KISS適用): if (user.role === 'admin') のシンプルな条件分岐で実装。合計8行

結果: コード量は1/30に。新メンバーが読んでも即座に理解できる。権限が5種類以上に増えたときに初めてパターンの導入を検討すればよい。

例2:設定管理のリファクタリングで開発速度を回復する

状況: アプリの設定管理に「将来マルチテナント対応するかもしれない」という理由で、設定プロバイダー抽象層 + DB設定テーブル + キャッシュ層 + 設定変更のイベント通知を実装。クラス数12、設定1つ追加するのに4ファイル変更が必要。しかし2年間マルチテナントの話は出ず。

KISS適用: 設定は環境変数で管理、アプリ起動時に読み込んでインメモリに保持する素直な実装に変更。クラス数12から1に削減

結果: 設定追加の工数が2時間から5分に。チーム全員が設定の仕組みを理解できるようになり、設定関連のバグが月3件からゼロに。

例3:APIレスポンスの変換処理を単純化する

Before: 外部APIのレスポンスを変換するために、Visitor パターン + Builder パターン + 中間表現クラスを組み合わせた変換パイプラインを構築。「将来、変換ルールをプラグインで追加できるように」。実際の変換ルールは3つだけ。

After: 3つの変換関数をシンプルに直列で呼び出すだけの実装に。変換関数それぞれ10〜15行。

結果: コード量が400行から45行に削減。バグ修正時に「どの変換ステップで問題が起きているか」が即座にわかるようになった。新しい変換ルール追加も関数を1つ足すだけ。

やりがちな失敗パターン
#

  1. 「将来のため」に過剰設計する — 来るかわからない要件のために複雑な抽象化を入れる。今の要件を満たす最小限の設計にして、必要になったら拡張する
  2. シンプル=短いコードだと思う — ワンライナーで書いたが誰も読めない。可読性が高いことがシンプルの本質
  3. 技術的なかっこよさを優先する — 新しいパターンやライブラリを使いたいがために複雑化する。技術選定の基準は「チームが理解・保守できるか」
  4. シンプルを言い訳に設計を怠る — 「KISSだから」と何も考えずにベタ書きし、コピペだらけになる。シンプルさは意図的な設計努力の結果であり、怠惰ではない

まとめ
#

KISS原則は 「シンプルが最強」 という教え。複雑なコードは書くのは簡単だが、シンプルなコードを書くのは実は難しい。常に「もっとシンプルにできないか?」と自問し、不必要な複雑さを排除し続けよう。シンプルなコードこそが、最も保守しやすく、最もバグが少ない。