用語比較

「サービス」「ドメイン」「機能」って何が違うの?設計でよく混乱する3つの言葉を整理する

「この用語、毎回出てくるけど結局何が違うの?」――要件定義のたびにそんなモヤモヤを感じたことがあるなら、その感覚は正しい。「サービス」「ドメイン」「機能」は似て非なるもの。それぞれの輪郭を一度ハッキリさせれば、設計書の理解も、会話のすれ違いも、ぐっと減る。

サービス・ドメイン・機能の違いはなぜ混乱するのか

3つの言葉は使われる文脈が重なるため、混乱を招く。特に設計書や開発ドキュメントでは、明確な定義が省略されやすい。結果、チーム内で「同じ単語なのに違う意味」で会話が進む。

Martin Fowlerは「Service という言葉は、文脈によってまったく異なる意味を持つ」と述べている。これは設計の現場で生じる用語のブレを象徴する発言。Red Hatのドキュメントでも、「Service、Feature、Domainの違いを曖昧にしないことがソフトウェア品質の第一歩」と記載されている。

機能とはなにか ― ユーザーができること

機能(Feature)は、アプリやサービスを通じてユーザーが実行できる操作や動作を指す。

  • 商品を検索できる
  • ログインできる
  • クレジットカードで決済できる

「できること」=機能。アプリをリモコンだとすれば、ボタンが機能にあたる。押したときに何が起こるか。それが機能の定義となる。

ドメインとはなにか ― ビジネスの世界そのもの

ドメイン(Domain)は、そのアプリケーションやサービスが取り扱う「世界」の範囲を示す。ユーザーではなく、企業やビジネスの視点で切り取られた対象領域。

  • 銀行なら「融資」「口座」「審査」
  • 医療なら「診察」「投薬」「患者管理」

DDD(ドメイン駆動設計)では、「ドメインとは、問題を解決するための知識と活動の集合」と定義されている。

比喩で言えば、ドメインは“街の地図”。地図が示す範囲がアプリのドメインとなる。地図の中にある建物(サービス)、建物の中の設備(機能)という関係で考えると整理しやすい。

サービスとはなにか ― 機能を提供する入り口

サービス(Service)は、ある機能を外部に提供する役割を持つ「窓口」。

  • ログインサービス
  • 支払いサービス
  • 在庫確認サービス

機能そのものではない。機能を「使えるようにする」ための装置。

例えば、自動販売機を思い浮かべる。飲み物を冷やすのが機能、飲み物を売るのがサービス。中にある仕組み(冷却、補充、排出)は隠されているが、サービスとしてはボタンとお金の投入口だけが見えている。

APIやマイクロサービスは、サービスを「機能化」した具体例。外部からリクエストを受けて、内部で処理を実行し、結果を返すという流れを取る。

GoogleやNetflixのサービス設計

Google Cloudのマイクロサービス設計ガイドでは、「ビジネスドメインごとにサービスを分離することが理想」とされている。つまり、1サービス=1ドメインの一部。

Netflixは、ユーザー体験の最適化のために、数百のマイクロサービスを使い分けている。視聴履歴の管理、レコメンデーション、再生制御、それぞれに専用サービスが存在する。

これらの事例に共通するのは「ドメインに対応するサービスがあり、そのサービスが機能を外に見せる」という構造。

よくある誤解とその整理

  • 機能をドメインと誤解
    → 「ログイン機能」がドメインであることはない。「認証・認可」というドメインの一部に含まれる機能
  • サービスを機能の集合と誤解
    → サービスは機能を提供する「窓口」。複数の機能が1サービスでまとめられることもあるが、それは目的次第
  • ドメイン=サービスと誤解
    → ドメインは「何のために存在するか」、サービスは「どうやって提供するか」

チェックリスト:

  • 誰の視点か?(ユーザー/開発者/ビジネス)
  • どこまでの範囲を含むか?
  • 再利用されるか?単発か?
  • 呼ばれる側か、呼び出す側か?

まとめ

「機能」はユーザーのための動作。「ドメイン」は業務知識の範囲。「サービス」はそれらを提供する仕組み。それぞれは独立した概念でありながら、設計の現場では密接に関わっている。

違いを理解すれば、開発フェーズでの要件整理がスムーズになる。誤解のない設計は、実装と運用のコストを大きく下げる。混乱していた言葉が整理されることで、チーム間のコミュニケーションも格段に精度を増す。設計に強くなる第一歩は、言葉を正確に使うことにある。