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

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

最終更新:
💡 タマネギの中心に、守りたい業務ルール

業務のモデルを中心に置き、ソースコードの依存を外側から内側へ向ける設計。UIやデータ保存の実装を外側に置き、中心のルールを具体的な技術から切り離す。

📌 このページのポイント
オニオン:業務ルールを中心にUI・保存などの実装中心部の振る舞いドメイン業務のモデルコードの依存は外側から内側へ内側の取り決めを、外側の実装が満たす層を分ける目的は、中心を外の都合から守ること
層の数は一例。矢印はコードの依存を表し、実行時の呼び出しやデータの流れとは区別します。
ひよこ ひよこ
どうしてタマネギなの?
ペンギン先生 ペンギン先生
中心をいくつかの層が囲む形で説明するからだよ。中心には、注文や料金など業務の状態と振る舞いを表すドメインモデルを置く。外側には、画面やデータ保存などの具体的な実装を置くんだ。層の数は、どのアプリでも同じではないよ。
ひよこ ひよこ
普通にUI・業務・DBを分けるのと、何が違う?
ペンギン先生 ペンギン先生
区切るだけでなく、ソースコードが何を参照するかを決めるんだ。業務ルールが特定のDB操作に直接依存していると、保存方法の変更が業務のコードにも広がりやすい。オニオンでは、外側が内側に依存し、内側は外側の具体的な技術を参照しないようにするよ。
ひよこ ひよこ
DBを知らないのに、どうやって注文を保存するの?
ペンギン先生 ペンギン先生
たとえば内側に「注文を保存する」というインターフェースを置き、外側にその実装を用意するよ。実行時には、その実装を使えるように組み立てる。DBそのものがプログラムに依存するという意味ではなく、保存を担当する外側のコードが、内側の取り決めを実装するんだ。
ひよこ ひよこ
DBを変えても、変更はゼロ?
ペンギン先生 ペンギン先生
外側の変更を中心へ広げにくくする設計であって、変更が必ずゼロになる保証ではないよ。保存形式や要件が変われば、検討やテストも必要。ただ、業務ルールを外部の実装から分けておくと、中心の振る舞いをDBなしで確認しやすくなるんだ。
ひよこ ひよこ
小さなアプリにも使ったほうがいい?
ペンギン先生 ペンギン先生
構造を増やす負担と、将来の変更への効果を考えよう。提唱者のJeffrey Palermoは、2008年の記事で、長く使う業務アプリや複雑な振る舞いを持つアプリを想定しているよ。六角形やクリーンアーキテクチャとも共通する考え方はあるけれど、名前だけで全部同じ構造と覚える必要はないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「オニオンアーキテクチャ」って出てきたら「業務ルールを中心に置き、コードの依存を内側へ向ける設計」と思えばだいたいOK!
📖 おまけ:英語の意味
「Onion Architecture」 = 玉ねぎアーキテクチャ
💬 Jeffrey Palermoが2008年に提唱したよ。層を重ねた構造がタマネギに見えることからこの名前がついたんだよ

参考資料

← 用語集にもどる