システム開発

SOLID原則 そりっどげんそく

オブジェクト指向設計原則保守性疎結合リファクタリング単一責任
SOLID原則について教えて

簡単に言うとこんな感じ!

オブジェクト指向プログラミングで「変更に強く、わかりやすいコードを書くための5つのルール」だよ! それぞれの頭文字をとってSOLIDと呼ぶんだ。これを守ると「ここだけ直せば済む」「新しい機能を追加しても他が壊れない」コードが書けるようになるんだ!


SOLID原則とは

SOLID原則は、オブジェクト指向設計における5つの基本原則の頭文字を並べた造語です。ロバート・C・マーチン(Uncle Bob)が2000年代に体系化しました。適切に適用することで、変更しやすく・理解しやすく・再利用しやすいソフトウェアを設計できます。

SOLID原則はプログラマー向けの概念ですが、発注者にとっても重要です。SOLID原則が守られているコードは修正・機能追加のコストが低く、変更要件が発生したときに「このクラスだけ直せばよい」という状態が保たれます。逆に守られていないコードは、一部の変更が思わぬ場所に影響し、バグや工数の増大を招きます。


SOLID原則の5つ

原則英語名内容一言で言うと
SSingle Responsibility Principleクラスは一つの責務のみ持つ「一人一役」
OOpen/Closed Principle拡張にはオープン、修正にはクローズド「追加OK、変更NG」
LLiskov Substitution Principleサブクラスは親クラスの代わりに使える「代わりが効く」
IInterface Segregation Principleインターフェースは小さく分割する「必要なものだけ」
DDependency Inversion Principle抽象に依存し、具象に依存しない「抽象を通じて話す」

S:単一責任原則(SRP)の例

❌ 悪い例
class Order {
    void calculateTotal() { ... }   // 計算ロジック
    void saveToDatabase() { ... }   // DB保存
    void sendConfirmationEmail() {} // メール送信
}

✅ 良い例
class Order { void calculateTotal() { ... } }
class OrderRepository { void save(Order o) { ... } }
class OrderNotifier { void sendEmail(Order o) { ... } }

D:依存性逆転原則(DIP)の例

❌ 悪い例(具象に依存)
class OrderService {
    MySQLRepository db = new MySQLRepository(); // DB固定
}

✅ 良い例(抽象に依存)
class OrderService {
    OrderRepository repo; // インターフェースに依存
    OrderService(OrderRepository repo) { this.repo = repo; }
}

歴史と背景

  • 1988年 — バートランド・メイヤー(Bertrand Meyer)がOCP(開放閉鎖原則)を提唱。SOLIDの先駆け
  • 1994年 — リスコフ(Barbara Liskov)がLSP(リスコフの置換原則)をフォーマル化
  • 1996年 — ロバート・C・マーチン(Uncle Bob)がSRP・OCP等の論文を発表
  • 2000年 — マーチンが「Design Principles and Design Patterns」論文でSOLID原則を体系化
  • 2004年 — マイケル・フェザーズ(Michael Feathers)がSOLIDという頭字語を命名
  • 2008年 — マーチンの著書「Clean Code」でSOLID原則が詳しく解説され広く普及
  • 2020年代関数型プログラミングへの関心が高まる中でも、SOLIDの考え方は普遍的原則として評価される

SOLID原則の関係図

SOLID原則の5つとその目的 S 単一責任原則 1クラス1責務 → 変更箇所が明確 O 開放閉鎖原則 拡張OK/変更NG → 既存コード安定 L リスコフ置換原則 サブクラスは代替可 → 継承の安全性 I IF分離原則 小さいIFに分割 → 不要依存を排除 D 依存性逆転原則 抽象に依存 → 差し替え容易 SOLIDを守ることで得られるもの • 機能追加・変更のコスト削減 • テストが書きやすいコード • 再利用しやすい部品設計 • 担当者が変わっても読みやすい

関連する規格・RFC

※ SOLIDは特定の標準規格ではありませんが、以下と関連しています。

書籍・手法内容
「Clean Code」Robert C. Martin著SOLID原則を実践レベルで解説
「Clean Architecture」Robert C. Martin著SOLID原則を建築レベルに応用
デザインパターン(GoF)SOLID原則を実装に落とし込むための具体的パターン集

関連用語