はじめに
ソフトウェアアーキテクチャにおける「境界線(Boundary)」とは、
責務や関心ごとを分離するために引かれる線 を指します。
どこに線を引くかによって、システムの保守性・拡張性・テスト容易性が大きく変わります。
境界線は単なる抽象概念ではなく、設計上の「生きたルール」として機能します。
境界線を引く目的
-
責務の分離(Separation of Concerns)
- UIとビジネスロジックを分ける
- ドメインとインフラを分ける
-
独立性の確保(Independence)
- 境界を超える依存を制御し、システムを柔軟に保つ
-
変更影響の局所化(Localizing Change)
- ある部分の修正が他に波及しないようにする
境界線の典型例
1. レイヤーアーキテクチャ
- Presentation Layer(UI)
- Application Layer(ユースケース)
- Domain Layer(ビジネスルール)
- Infrastructure Layer(DB・APIなど外部依存)
各レイヤー間に明確な境界を引くことで、責務が明確になります。
2. クリーンアーキテクチャの同心円
- 境界線は円で描かれる
- 内側(Domain)は外側を知らない
- 境界線をまたぐ際は インターフェース や データ構造の変換(DTO, Mapper) を利用
3. モジュール境界
core/domaincore/datafeature/authfeature/profile
モジュールごとに境界を定義し、依存方向を制御する。
境界線を引く際のポイント
-
ビジネスルールを最優先に守る
- UIやDBは変わるが、ビジネスロジックは長生きする
-
依存方向を一定に保つ
- 外側 → 内側
- 下位レイヤーは上位に依存しない
-
契約を明示する
- インターフェース・DTO・イベントなどで境界を越える通信を制御
境界線を曖昧にした場合の問題
- UIにビジネスロジックが混ざる → テスト困難、変更困難
- DBの構造変更がドメインロジックに波及 → 脆い設計
- 境界線なしにモジュールが肥大化 → スパゲッティコード化
まとめ
境界線を引くことは、アーキテクチャ設計において最も重要な作業の一つです。
- 責務の分離
- 独立性の確保
- 変更の局所化
これらを意識して境界を設計することで、ソフトウェアは 長期的に成長し続ける強い構造 を持つことができます。