SYSTEM STRATEGY / ARCHITECTURE
SOAとは?業務機能をサービスとして組み合わせる設計思想
SOA(Service Oriented Architecture:サービス指向アーキテクチャ)は、「在庫を調べる」「注文を受け付ける」「支払う」といった業務上の機能を、ほかのシステムから利用できる独立したサービスとして整理し、組み合わせる設計思想です。単にプログラムのファイルを分割することではありません。
01何が困るのか:同じ在庫確認を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=業務機能を、公開された使い方を持つ独立したサービスとして整理し、連携・再利用する考え方。
目的は、独立したプログラムを大量に作ることではありません。「注文」という業務で必要な機能を別のシステムでも使い、変更があっても全体を作り直さずに済むようにすることです。