オニオンアーキテクチャ【onion architecture】

オニオンアーキテクチャとは?

ソフトウェア設計の考え方の一つで、システムの構造を玉ねぎ状の同心円に見立て、業務ロジックを中心に、データベースユーザーインターフェース(UI)などの技術要素を外側に配置する手法。2008年にアメリカの著名なソフトウェアエンジニア、ジェフリー・パレルモ(Jeffrey Palermo)氏が提唱した。
オニオンアーキテクチャのイメージ画像

「依存の方向は常に内側へ」というルールに基づいて全体を設計する。最も中心には業務上の判断や処理を担うドメインモデルとビジネスルールが置かれ、その外側にアプリケーション固有の処理手順を定める層が続く。さらに外側にはデータベースや画面表示・操作、外部サービスとの接続といった具体的な技術実装が並ぶ。外側の層は内側を参照してよいが、内側の層は外側を一切参照しないという一方向の依存関係が、設計全体の安定性を支えている。

この構造の恩恵は、業務ロジックが外部の技術変化から切り離される点にある。データベースMySQLからPostgreSQLへ切り替えても、UIをWebページからスマートフォンアプリへ刷新しても、中心部のコードはほぼ影響を受けない。外側の実装だけを差し替えればよいため、長期にわたって保守・拡張が続くシステムでも、核となる業務ロジックを安定したまま保ちやすい。

テストの面でも利点がある。中心部が特定のデータベースや外部サービスに依存していないため、それらを実際に用意しなくても業務ロジック単体で検証が行える。開発の早い段階から中核部の品質を確認できる設計である。

似た手法として「レイヤードアーキテクチャ」(layered architecture)があるが、こちらは上位層が下位層に依存する積み重ね構造であり、依存の向きをすべて中心へ統一するオニオンアーキテクチャとは思想が異なる。オニオンアーキテクチャはドメイン駆動設計と組み合わせて使われることも多く、業務の知識をコードとして明確に表現する助けとなる。

この記事の著者 : (株)インセプト IT用語辞典 e-Words 編集部
1997年8月より「IT用語辞典 e-Words」を執筆・編集しています。累計公開記事数は1万ページ以上、累計サイト訪問者数は1億人以上です。学術論文や官公庁の資料などへも多数の記事が引用・参照されています。