株式会社ジオデータ開発 ロゴ
株式会社ジオデータ開発GEO DATA DEVELOPMENT Inc.

SYSTEM STRATEGY / ARCHITECTURE

SOAとは?業務機能をサービスとして組み合わせる設計思想

SOA(Service Oriented Architecture:サービス指向アーキテクチャ)は、「在庫を調べる」「注文を受け付ける」「支払う」といった業務上の機能を、ほかのシステムから利用できる独立したサービスとして整理し、組み合わせる設計思想です。単にプログラムのファイルを分割することではありません。

01何が困るのか:同じ在庫確認を3回作る会社

ある小売企業では、店舗のレジ・ネットショップ・卸売向け受注システムが別々に開発され、それぞれ独自の「在庫確認」を実装していました。倉庫が増えたり、在庫の計算ルールが変わったりすると、3つのシステムすべてに修正が必要です。修正漏れがあれば、店舗では在庫あり、ネットでは在庫なし、と矛盾した結果が表示されます。

機能をそれぞれが抱える

店舗レジ独自の在庫確認ネットショップ独自の在庫確認卸売受注独自の在庫確認ルール変更時に3か所を修正

在庫確認を共通サービスにする

店舗レジネットショップ卸売受注共通の在庫確認サービス約束された窓口を通じて利用計算ルールの変更場所を集約

共通化すれば、どの利用者も同じ在庫ルールを使えます。ただし共通サービスが止まると複数の利用者に影響するため、可用性や障害時の設計も重要です。

02SOAの「サービス」は、何を約束するのか

ここでいうサービスは「利用者にとって意味のある業務機能」です。例えば在庫確認サービスなら、「商品コードを渡すと、販売可能数が返る」という利用方法(インターフェース/契約)を明確にします。利用側は、在庫がどのテーブルに保存され、どんな言語で計算されているかを知らなくても利用できます。

ネットショップ

商品Aを3個注文したい

商品コード・数量 →
← 注文可能/不可
在庫確認サービス

在庫・引当ルールを内部で処理

「呼び出し方・入力・出力・エラー時の取り扱い」を決めることで、内部の実装と利用側の結びつきを弱めます。通信方式を決めること自体がSOAの目的ではなく、業務機能を連携可能な形で設計することが本質です。

03別の業務フローに組み合わせて使う

在庫確認だけでは注文は完了しません。「在庫確認 → 注文登録 → 決済」という複数のサービスを業務の順序に沿って利用します。後日、店舗受取という業務を追加するときも、既存の在庫確認や決済サービスを再利用できます。

ネット注文店舗受取購入画面受取予約画面在庫確認注文登録決済※ 実際の処理順序や要否は業務設計により異なる

04メリットと、実務で考えるべきこと

得られること

  • 共通機能を複数のシステムで再利用できる
  • サービスの窓口を維持すれば、内部の実装を変更しやすい
  • 異なる技術や既存システムを業務単位で連携しやすい
  • 業務の変更に応じてサービスを組み替えやすい

設計上の注意

  • サービス間の通信が増えると遅延や障害経路も増える
  • 共通サービスの障害は複数業務に影響する
  • 認証・認可、契約の変更、監視が必要になる
  • 複数サービスをまたぐ処理の整合性が難しくなる

SOAは、すべてを細かく分割すればよいという意味ではありません。分けたことでかえって変更が難しくなるなら、サービスの境界を見直します。

05ERP・フィット&ギャップ分析・PDCAとの違い

これらは対立する製品名ではなく、そもそも問いの種類が違います。

考え方何をするか会社での例
SOA業務機能を独立したサービスとして連携・再利用する在庫確認をECと店舗で共用
ERP会計・購買・在庫など経営資源に関する業務を統合的に管理する仕入・在庫・会計情報を統合
フィット&ギャップ分析業務上の要求とパッケージ機能の適合・差異を調べる既製品で返品処理に対応できるか調査
PDCA計画・実行・評価・改善を繰り返す欠品削減策を定期的に改善

例えばERPの一部機能をサービスとして外部公開することもできます。つまりERPとSOAは同時に採用できるもので、「どちらか一方しか使えない」関係ではありません。

06SOAとマイクロサービスは同じ?

どちらも独立した機能を連携させるという共通点があります。ただし、SOAは企業の業務機能をサービスとして捉え、再利用・連携する広い設計思想です。マイクロサービスは一般に、より小さなサービスを独立して開発・デプロイ・運用するアーキテクチャ上の方法を重視します。

「SOAなら必ずSOAPを使う」「APIがあれば全部SOA」「一つのサービスが一つのサーバーにある」といった理解は不正確です。大切なのは、業務の意味を持つサービスの境界・契約・連携の設計です。

07操作して理解:サービスを組み替える

利用する業務を切り替え、どの共通サービスが呼ばれるかを確認してください。サービス障害も発生させると、共有の利点だけでなく影響範囲が広がる欠点も見えてきます。

サービス連携シミュレーター

設定を変更できます

同じ「在庫確認」でも、ネット注文・店舗・卸売で再利用できます。実際に業務を切り替えてみましょう。

利用する業務

ネット注文 の処理フロー

在庫確認
→
注文登録
→
決済
→
通知

在庫を調べ、注文を登録し、決済後に確認を通知します。

現在、サービス障害はありません。複数業務が同じ機能を組み合わせて利用できています。
共通サービスを使う場合

在庫計算のルール変更時には、共有する在庫確認サービスを中心に修正を検討できます。一方、障害時には利用する全業務への影響を考えます。

08まとめ:部品を分ける目的は、業務をつなぐこと

SOA=業務機能を、公開された使い方を持つ独立したサービスとして整理し、連携・再利用する考え方。

目的は、独立したプログラムを大量に作ることではありません。「注文」という業務で必要な機能を別のシステムでも使い、変更があっても全体を作り直さずに済むようにすることです。