SOLID原則 そりっどげんそく
オブジェクト指向設計原則保守性疎結合リファクタリング単一責任
SOLID原則について教えて
簡単に言うとこんな感じ!
オブジェクト指向プログラミングで「変更に強く、わかりやすいコードを書くための5つのルール」だよ! それぞれの頭文字をとってSOLIDと呼ぶんだ。これを守ると「ここだけ直せば済む」「新しい機能を追加しても他が壊れない」コードが書けるようになるんだ!
SOLID原則とは
SOLID原則は、オブジェクト指向設計における5つの基本原則の頭文字を並べた造語です。ロバート・C・マーチン(Uncle Bob)が2000年代に体系化しました。適切に適用することで、変更しやすく・理解しやすく・再利用しやすいソフトウェアを設計できます。
SOLID原則はプログラマー向けの概念ですが、発注者にとっても重要です。SOLID原則が守られているコードは修正・機能追加のコストが低く、変更要件が発生したときに「このクラスだけ直せばよい」という状態が保たれます。逆に守られていないコードは、一部の変更が思わぬ場所に影響し、バグや工数の増大を招きます。
SOLID原則の5つ
| 原則 | 英語名 | 内容 | 一言で言うと |
|---|---|---|---|
| S | Single Responsibility Principle | クラスは一つの責務のみ持つ | 「一人一役」 |
| O | Open/Closed Principle | 拡張にはオープン、修正にはクローズド | 「追加OK、変更NG」 |
| L | Liskov Substitution Principle | サブクラスは親クラスの代わりに使える | 「代わりが効く」 |
| I | Interface Segregation Principle | インターフェースは小さく分割する | 「必要なものだけ」 |
| D | Dependency 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原則の関係図
関連する規格・RFC
※ SOLIDは特定の標準規格ではありませんが、以下と関連しています。
| 書籍・手法 | 内容 |
|---|---|
| 「Clean Code」Robert C. Martin著 | SOLID原則を実践レベルで解説 |
| 「Clean Architecture」Robert C. Martin著 | SOLID原則を建築レベルに応用 |
| デザインパターン(GoF) | SOLID原則を実装に落とし込むための具体的パターン集 |
関連用語
- デザインパターン(GoF) — SOLID原則を実装に落とし込む具体的なパターン集
- クリーンアーキテクチャ — SOLID原則を建築レベルに応用した設計手法
- ヘキサゴナルアーキテクチャ — 依存性逆転原則を建築パターンとして体現
- テスト駆動開発(TDD) — SOLID原則が守られているとテストが書きやすくなる
- コードレビュー — SOLIDの遵守状況はコードレビューの重要チェックポイント
- 技術的負債 — SOLID原則の無視が技術的負債の主要原因のひとつ