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?

はじめに

ソフトウェア設計の世界では「レイヤードアーキテクチャ」という言葉が広く使われていますが、実はその中には複数の思想・バリエーションが存在します。
本記事では、代表的な 3 つのアーキテクチャを比較し、実用的な観点から選び方まで整理します。


クリーンアーキテクチャ

概要

ロバート・C・マーティン(Uncle Bob)が提唱したアーキテクチャで、
依存方向を内側(ビジネスルール)に向けることが最大の特徴です。

レイヤー構造

+---------------------------+
| Frameworks & Drivers      |
+---------------------------+
| Interface Adapters        |
+---------------------------+
| Use Cases                 |
+---------------------------+
| Entities (Domain Model)   |
+---------------------------+

特徴

  • ビジネスルール(Entities)が最も重要な層
  • 外側の技術(DB、Web フレームワーク)は交換可能
  • 依存方向が明確でテストしやすい

メリット

  • 長期運用に強い
  • 技術的負債が溜まりにくい
  • ユースケースが明確になる

デメリット

  • 初期設計コストが高い
  • 小規模プロジェクトでは過剰になりがち

ヘキサゴナルアーキテクチャ(Hexagonal Architecture)

概要

別名 Ports and Adapters
アプリケーションの中心(ドメイン)を守り、外部との接続を「ポート」と「アダプタ」で抽象化します。

構造イメージ

          +-------------------+
          |   UI Adapter      |
          +-------------------+
                 | Port
+---------------------------------------+
|              Application              |
|   (Domain + UseCase + Ports)          |
+---------------------------------------+
                 | Port
          +-------------------+
          |  DB Adapter       |
          +-------------------+

特徴

  • 入出力を「ポート」で抽象化
  • 外部システム(DB、API、UI)を「アダプタ」で接続
  • テスト用アダプタを簡単に作れる

メリット

  • 外部依存を完全に隔離できる
  • テストが非常に容易
  • DDD と相性が良い

デメリット

  • ポート・アダプタの概念に慣れる必要がある
  • 設計が抽象的になりやすい

オニオンアーキテクチャ(Onion Architecture)

概要

玉ねぎのように内側へ向かって層が重なる構造。
中心に ドメインモデル を置き、外側にインフラ層が配置されます。

レイヤー構造

+---------------------------+
| Infrastructure            |
+---------------------------+
| Application Services      |
+---------------------------+
| Domain Services           |
+---------------------------+
| Domain Model (Core)       |
+---------------------------+

特徴

  • ドメインモデルが最重要
  • 依存方向は常に内側へ
  • クリーンアーキテクチャと思想が近い

メリット

  • ドメイン中心の設計がしやすい
  • 外部技術の変更に強い
  • DDD の戦術的パターンと親和性が高い

デメリット

  • 設計の自由度が高く、チームで統一しにくい
  • 小規模ではオーバーエンジニアリングになりやすい

どれを選ぶべきか?

観点 クリーン ヘキサゴナル オニオン
学習コスト
DDD との相性
テスト容易性
小規模向き
大規模向き
外部依存の隔離

結論(実務的な視点)

  • DDD を採用するなら → クリーン or ヘキサゴナル
  • 外部依存を強く隔離したい → ヘキサゴナル
  • シンプルにドメイン中心にしたい → オニオン
  • チームの経験が浅い → クリーンアーキテクチャが無難

実際には、
3 つは思想が近く、ハイブリッドで使われることも多いです。


まとめ

  • レイヤードアーキテクチャには複数の種類があり、どれも「ドメインを中心に据える」方向に進化している
  • クリーンアーキテクチャは依存方向を厳密に管理
  • ヘキサゴナルはポートとアダプタで外部を抽象化
  • オニオンはドメインモデルを中心に据える構造
  • 実務では、チームの経験・プロジェクト規模・変更頻度に応じて選ぶのが最適
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?