【そりっどげんそく】

SOLID原則 とは?

💡 良いコードの「5つの基本ルール」
📌 このページのポイント
SOLID原則 — オブジェクト指向設計の5原則 S 単一責任 クラスの責任は 1つだけにする O 開放閉鎖 拡張に開き 修正に閉じる L リスコフ置換 子クラスは親の 代わりに使える I インタフェース分離 不要なメソッドに 依存させない D 依存性逆転 抽象に依存 具体に依存しない 守ると... 保守性・拡張性・テスト容易性が向上 破ると... 密結合・変更困難・バグの温床に 変更に強く、理解しやすい設計を実現するための指針 Robert C. Martin(Uncle Bob)が提唱
SOLID原則の5つの設計指針
ひよこ ひよこ

単一責任原則って何?

ペンギン先生 ペンギン先生

「クラスを変更する理由は1つだけであるべき」という原則。UserServiceクラスがユーザー登録もメール送信もCSVエクスポートもやっていたら、変更理由が3つある。登録ロジック変更、メールテンプレート変更、CSV形式変更でそれぞれ修正が必要。責任を分離してUserService、EmailService、ExportServiceに分けるんだよ

ひよこ ひよこ

開放閉鎖原則は?

ペンギン先生 ペンギン先生

「拡張に対して開いていて、修正に対して閉じている」。新しい支払い方法を追加する時に、既存のPaymentProcessorクラスのコードを修正するのではなく、新しいCryptoPaymentクラスを追加するだけで対応できる設計。インターフェースポリモーフィズムを活用するんだよ

ひよこ ひよこ

依存性逆転原則は?

ペンギン先生 ペンギン先生

「上位モジュールは下位モジュールに依存してはならない。両方とも抽象に依存すべき」。OrderServiceがMySQLRepositoryに直接依存するのではなく、OrderRepositoryインターフェースに依存する。実装クラス(MySQLPostgreSQL、InMemory)は差し替え可能。これが依存性注入の理論的根拠だよ

ひよこ ひよこ

SOLID原則を全部守るべき?

ペンギン先生 ペンギン先生

教条的に守ると過度な抽象化でかえって複雑になることがある。小さなスクリプトにSOLIDを全適用する必要はない。重要なのは「なぜこの原則があるか」を理解して、チームの規模やプロジェクトの寿命に応じて適用レベルを調整すること。数ヶ月で捨てるプロトタイプと10年保守するシステムでは適用度合いが違うよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「SOLID原則」って出てきたら「OOP設計の5つの基本原則」と思えればだいたいOK!
📖 おまけ:英語の意味
「SOLID Principles」 = 5つの設計原則
💬 Robert C. Martin(Uncle Bob)が2000年代に体系化。5原則の頭文字でSOLIDになるよ
← 用語集にもどる