SOLID原則は本来、オブジェクト指向プログラミング(OOP)における設計指針として広く知られています。
しかし現代では、JavaScriptやTypeScriptなど、関数型の考え方を取り入れた言語が広く使われており、OOP以外の文脈でも「設計原則」が求められます。
本記事では、これまでのシリーズで扱ってきた OOPと関数型プログラミング(FP)における設計原則の比較 を振り返りつつ、「関数型におけるSOLID原則の活用」についてまとめました。
📚 比較シリーズのリンク
各原則について、OOPとFPの具体的な実装例を交えて比較しています。
詳しくは以下をご覧ください。
✅ 各原則ごとの比較(OOP vs FP)
原則 | OOPの視点 | FPの視点 |
---|---|---|
SRP(単一責任の原則) | クラス単位で責務を分離 | 関数単位で副作用を分離 |
OCP(開放/閉鎖原則) | 継承やポリモーフィズムで拡張 | 関数マップやデータ駆動で拡張 |
LSP(リスコフの置換原則) | 意味的な継承関係に注意 | 型ガードと構造で安全性を確保 |
ISP(インターフェース分離原則) | 不要な機能を含まない分離 | 必要な関数だけを組み合わせる |
DIP(依存性逆転の原則) | インターフェースと依存注入 | 高階関数や引数で依存を注入 |
共通点と違い
- 両者とも「責務の分離」「拡張性の確保」「テスト容易性」など設計上の ゴールは共通 している。
- 抽象化
- OOPは 構造(クラスやインターフェース)で抽象化し、
- FPは関数とデータで抽象化する。
- FPでは、状態を持たない分、副作用を外部から注入する形で「責務」を柔軟に管理 できる。
🔍 では、FPでも有効か?
結論から言えば、 「YES」 です。
関数型プログラミングではクラスやインターフェースを使わない代わりに、関数の合成、型による分離、副作用の管理といった手法で、SOLIDの各原則が自然と達成される場面が多くあります。
OOPとFPでは表現方法が異なるものの、「設計の目的」 は共通しています。
つまり、保守しやすく、拡張性の高い、明確な責務を持つ構造を作ることです。
🚀 まとめ
- SOLID原則はOOPの文脈で誕生しましたが、その精神は関数型プログラミングでも活用可能です。
- 重要なのは 「原則を形だけで捉えるのではなく、目的を理解して応用すること」 です。
- TypeScriptやJavaScriptのようなパラダイム横断的な言語において、両者の視点を学ぶことは設計力を高めることに繋がります。
📖 本記事が参考になったら、VitePressによる全体まとめサイトもぜひご覧くださいฅ´ω`ฅ