コンポーネントとは?
まず、「コンポーネント」とは、ソフトウェアを構成する独立した部品のことを指します。
具体的には、1つまたは複数のクラスやモジュールのまとまりであり、再利用性や保守性を高めるために設計されています。
例として、以下のような機能を持つシステムを考えます
- ユーザー認証
- メール送信
- データ分析
これらの機能をそれぞれ「コンポーネント」として分けることで、独立性を持たせ、システム全体をシンプルに管理できるようにします。
クリーンアーキテクチャーにおける「凝縮性」とは?
コンポーネントを設計する際、重要なのは「凝縮性(Cohesion)」です。凝縮性とは、コンポーネント内の要素(クラスやモジュール)がどれだけ強く関連し合っているかを指します。
凝縮性が高いコンポーネントは、以下のような特徴を持っています
- 同じ目的を持つクラスやモジュールがまとまっている。
- 変更の理由が共通している。
例:認証コンポーネント
- ユーザー認証
- パスワード検証
- トークンの発行
これらは全て「認証」に関連しているため、1つのコンポーネントとして凝縮性が高い状態です。
コンポーネント凝縮性に関わる3つの原則
コンポーネント凝縮性には下記3原則が存在します。
再利用等価の原則(REP)
「再利用されるコードは、独立してリリース可能であるべき」という原則です。
- ポイント: 再利用するコードは、関連するクラスやモジュールだけを含むべきです。他の不要なコードを取り込まないようにします。
- 例:認証コンポーネントがデータ分析機能を含んでしまうと、再利用が困難になります。

再利用等価の原則(REP)を簡単解説!
再利用等価の原則(REP)の基本を初心者向けに解説!背景、メリット、具体例、課題、実践的な対策をわかりやすく紹介します。
閉鎖性共通の原則(CCP)
「同じ理由で変更されるコードは、1つのコンポーネントにまとめるべき」という原則です。
- ポイント: 変更の理由が異なるコードを同じコンポーネントに含めると、1箇所を修正するたびに他の無関係な部分にも影響が出ます。
- 例:メール送信機能が認証コンポーネントに含まれていると、認証ロジックを変更したときにメール送信部分にも影響が出る可能性があります。

CCPとは?閉鎖性共通の原則を解説!
閉鎖性共通の原則(CCP)を初心者向けに解説!考え方の背景、メリット、具体例、課題、SRPとの関係をわかりやすく説明します。
全再利用の原則(CRP)
「コンポーネント内のクラスは、すべて一緒に再利用されるべき」という原則です。
- ポイント: 同じコンポーネント内のクラスは、必ず一緒に使われるように設計します。再利用されないクラスを混ぜると、無駄な依存関係が増えてしまいます。
- 例:認証機能に関係のないレポート生成クラスが含まれていると、そのモジュールを使うたびに不要な依存関係が増えます。

全再利用の原則(CRP)をわかりやすく解説
全再利用の原則(CRP)の基本を初心者向けに解説!背景、メリット、具体例、課題、ISPとの関係をわかりやすく紹介します。
凝縮性のテンション図

コンポーネントの設計では、以下の3つの原則が互いにテンション(対立関係)を持っています
- REP(再利用等価の原則)
- 再利用性を最大化するためには、関連性のあるコードをまとめる必要があります。
- CCP(閉鎖性共通の原則)
- 変更の理由が同じものを1つのコンポーネントにまとめる必要があります。
- CRP(全再利用の原則)
- 同じモジュール内のクラスは、すべて一緒に再利用されるようにする必要があります。
テンション図を説明
- REPとCCPの対立:
再利用性を高めるために多くの機能を1つにまとめすぎると、変更の理由が複数になり、閉鎖性共通の原則を壊してしまいます。 - CCPとCRPの対立:
変更の理由でモジュールを分割すると、クラス間の関連性が薄れて、全再利用の原則が守れなくなることがあります。 - CRPとREPの対立:
再利用性を重視しすぎると、モジュールに多くのクラスが含まれる可能性があり、クラス間の凝縮性が失われます。
解決策:
これらのテンションを考慮しながら、バランスを取ることが重要です。小さすぎず、大きすぎない適切なコンポーネントサイズを見極めましょう。
まとめ
- コンポーネント凝縮性とは: コンポーネント内のクラスが強く関連し合い、一緒に変更され、一緒に再利用されるべきという考え方です。
- テンション図: 原則同士が対立する場面を理解し、プロジェクトによって最適なバランスを見つけることが重要です。
コメント