0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SOLID原則は関数型プログラミングでも原則として利用できるか?

Last updated at Posted at 2025-04-23

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による全体まとめサイトもぜひご覧くださいฅ´ω`ฅ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?