境界付けられたコンテキストとは

システムアーキテクチャ

DDD

    概要

    コンテキストマップで整理されたコンテキストについて、なぜそのような切り分け方をしたのか、切り分ける意味が何かといったことを開発者以外にも伝えたい、という課題があった。

    そこで本稿では、「境界づけられたコンテキスト」について、開発者以外にも伝わるような説明を試みる。

    コンテキストの違いを意識する

    同じ言葉であっても、コンテキストが異なれば言葉の意味が変わることがある。

    例えば「注文」という言葉を例に挙げる。

    営業部門では「お客様からの依頼」を指し、倉庫では「出荷の指示」、会計部門では「請求対象のデータ」を意味するかもしれない。

    他にも以下のような例がある。

    • 「ユーザー」:開発チームではログインする人、カスタマーサポートでは問い合わせをしてくる人、マーケティングではターゲット顧客を指す
    • 「サービス」:技術者はAPIを、営業は顧客向けプランを意味する

    このように、同じ言葉でも使われる業務や立場によって意味が変わる

    この違いを明確にするのが、「コンテキスト」という考え方である。

    コンテキストとは

    コンテキストとは、言葉やルールの意味が一貫して通用する業務のまとまりのことである。

    ドメイン駆動設計(DDD)においては、これを「バウンデッドコンテキスト(Bounded Context)」と呼ぶ。

    例えば「注文」という言葉も、コンテキストによって意味が以下のように異なる。

    • コンテキストAでは、顧客の購入意思
    • コンテキストBでは、倉庫への出荷依頼
    • コンテキストCでは、請求の対象

    このように、それぞれの業務で言葉の意味やルールが変わるところを「区切って」扱うのが、コンテキストの特徴である。

    なぜコンテキストを整理するのか?

    このコンテキストを意識せずに業務を進めたり、システムを設計したりすると、さまざまな問題が発生する。

    • 「注文」テーブルに請求や出荷の情報まで詰め込んだ結果、複雑で壊れやすいシステムとなる
    • チーム間で「○○ってどういう意味?」という質問が飛び交い、認識齟齬や責任の不明確さが生じる
    • 業務改善をしようとしても、影響範囲が読めず手が出せない

    逆に、コンテキストを分けて整理しておけば、以下のようなメリットが得られる。

    • 言葉の意味が明確になる
    • 業務やシステムの責任範囲が整理される
    • チームの分担や変更がしやすくなる

    つまり、コンテキストが適切に整理されることで、システムや組織は次のような恩恵を得ることができる。

    • コミュニケーションコストの削減
    • システムの設計や実装の複雑性の低減
    • チーム間の役割分担や責任範囲の明確化

    正しくコンテキストが整理されていることは、システムと組織の両面における安定性の向上につながる。

    コンテキストの例:ECサイトの「注文」

    ECサイトの注文に関する業務を、3つの部門に分けてみる。

    部門 「注文」の意味
    フロントサイト 顧客がカートで確定した内容
    倉庫業務 出荷対象の指示データ
    会計 請求処理すべき売上データ

    これらはいずれも「注文」という言葉を使っているが、扱っている内容・目的・処理がまったく異なる

    この違いを無視してひとつの言葉でまとめてしまうと、

    • システムは複雑化する
    • 修正時の影響範囲が不明になる
    • 誤解が生まれやすくなる

    だからこそ、「コンテキスト」を分けて考えることが重要である。

    開発者だけの話ではない

    コンテキストは、開発者だけが理解していれば良いものではない。

    例えば以下のような疑問に思い当たることはないだろうか?

    • 「うちのチームはどこからどこまでが担当なのか?」
    • 「これは営業に聞くべきか?開発か?サポートか?」
    • 「この変更はどこに影響するのか?」

    こうした問いは、すべてコンテキストの整理と密接に関係している。

    業務の目的や言葉の意味が変わるところに境界を引き、その境界ごとに役割や責任を明確にする。

    この視点は、開発者に限らず、営業、サポート、企画など、あらゆる職種にとって有益である。

    まとめ

    • 同じ言葉でも意味が異なることは多い
    • その意味の違いに気づき、業務やシステムの境界として整理するのが「コンテキスト」である
    • コンテキストを明確にすることで、認識のズレやシステムの複雑性を防ぐことができる
    • チーム間の役割分担や業務改善にもつながる、全職種にとって有効な考え方である

    関連書籍