🤝
DDDアーキテクチャ・設計 2026年4月4日

共有カーネル(Shared Kernel)

📁 パターン 👁 -- 閲覧

共有カーネル(Shared Kernel)

定義

共有カーネル(Shared Kernel)とは、2つの境界づけられたコンテキストが、ドメインモデルの一部(サブセット)を共同で所有・管理するパターン。共有されたモデルは両チームの合意なしに変更してはならない。

チームA(注文コンテキスト)

        共有カーネル: Money, CustomerId, OrderId

チームB(請求コンテキスト)

なぜ重要か

完全に独立したコンテキストを維持すると、共通概念(金額、ID、住所など)をそれぞれのコンテキストで重複定義することになる。共有カーネルは重複を排除しながら、両チームが同じ概念を使い続けることを保証する。

ただし、共有することは結合を生む。変更には両チームの協議と合意が必要になる。

適用場面

  • 密接に連携する2チームが、共通の値オブジェクト(金額、日付範囲、識別子)を共有するとき
  • チーム間のコミュニケーションコストが低く、共同での管理が現実的なとき
  • 完全な分離より共有のコストの方が低いと判断できるとき

他のパターンとの比較

パターン特徴
共有カーネル一部を共同所有。変更時は両チームの合意が必要
カスタマー/サプライヤー上流が提供し下流が消費。下流は変更を依頼できる
追従者(Conformist)上流モデルをそのまま取り込む。交渉なし
腐敗防止層(ACL)下流が翻訳層で保護。完全に独立したモデルを維持

注意点

共有カーネルは「小さく」保つことが原則。共有が増えるほど変更の影響範囲が広がる。「これも共有してしまえ」という誘惑に抗い、絶対に必要なものだけを共有する。

関連概念

出典

実践ドメイン駆動設計(Vaughn Vernon)第3章・第13章