ソフトウエア部品の再利用を目的とする考え方はこれまでにもあった。オブジェクト指向やコンポーネント指向などだ。Part2では,これら従来技術と,SOA(サービス指向アーキテクチャ)の違いを中心に見ていこう。
オブジェクト指向やコンポーネント指向とSOA(サービス指向アーキテクチャ)の違いを,表1にまとめた。
オブジェクト指向 | コンポーネント指向 | サービス指向 | |
再利用範囲 | アプリケーション内 | アプリケーション間 | 企業間 |
粒度 | 小 | 中 | 大 |
結合度 | 強い | 緩やか | 非常に緩やか |
連携対象 | 同一アーキテクチャのみ | 同一アーキテクチャのみ | 異なるアーキテクチャも可 |
視点 | 技術視点 | 技術視点 | ビジネス視点 |
表1●従来技術とSOAの違い SOAはビジネス視点からのアプローチが重要視されるため,粒度は大きく,疎結合で結合される点が大きな違いである |
(1)再利用される範囲
SOAのサービスは,企業の内外を問わず,複数のアプリケーションをまたがって再利用できるようになっている。一方,オブジェクトやコンポーネントは,どちらかと言えば同一アプリケーション内,あるいは複数のアプリケーション間であっても企業内で再利用されるソフトウエア部品である。
(2)ソフトウエア部品の粒度
SOAのサービスはビジネス環境の変化に効率よく対応できるように,ビジネス・プロセスの一部(サブ・プロセス)を表現していることが多い。例えば,「在庫確認サービス」「発注サービス」などだ。一方,オブジェクトやコンポーネントは,プログラム作成をいかに効率化させるかという点に着目しており,業務処理の変化をシステムの変更に素早く反映させたいという観点で見ると粒度が小さ過ぎる。オブジェクトやコンポーネントがシステム側の都合で構成されるのとは対照的に,サービスはビジネス視点で構成される。
(3)結合度
オブジェクトやコンポーネントはアプリケーション同士が密接に結合(密結合)しており自由度が低かった。しかし,SOAではインタフェースの方式を決めておくだけの“疎結合”でつながっている。そのため,制約が少なく,多様な組み合わせを実現するための自由度が高い。
(4)相互運用性,相互接続性
オブジェクトやコンポーネントは同質の技術との通信を前提に設計されているが,SOAは異機種混合環境を前提にしているので,多様なプラットフォームや技術間での連携が可能である。
従来の技術に比べたSOAの特徴をまとめると,インターネット技術の普及で,異なるアーキテクチャのアプリケーションの相互運用が当たり前のものになってきたという時代背景にマッチするものであることだ。そして一番のポイントは,技術者やプログラマの視点ではなく,ビジネス視点からのアプローチが重要視されているという点である。経営層が求めるスピードにシステム基盤を追従させるためのアーキテクチャがSOAなのである。
トップダウンとボトムアップ,二つのアプローチ
SOAに基づくアプリケーション開発の進め方には,大きく二つのアプローチがある。トップダウン・アプローチとボトムアップ・アプローチである(図1)。

トップダウン・アプローチは,「SOAはビジネス・プロセス指向のアーキテクチャである」という特徴に忠実に従うものだ。企業内全体のビジネス・プロセスの観点から業務分析を行い,サービスを切り出していくやり方である。
このアプローチは,新規にサービスを設計する際に特に効果的である。なぜなら,既存資産に影響されないため,サービス粒度を適切に定義でき,柔軟なシステム基盤の構築に大きく貢献するからである。このため,SOAに基づくアプリケーション構築の理想形とされる。しかし,実際にトップダウン・アプローチでSOAによるシステム構築を進めるためには,全社的な業務分析やガバナンスなどの仕組みの構築が必要となり,敷居が高いのも事実である。
一方,ボトムアップ・アプローチは,部門単位に存在する既存アプリケーションの中で再利用可能なビジネス・ロジックを抽出,それをラッピングなどの手法によりサービス化することで,ほかのシステムから利用できるようにするアプローチである。
既存システムの機能を最大限に活用することを求める際に有効な手法である。一部門など身近なところから始めて,序々に適用範囲を広げていくといったように,ボトムアップ・アプローチは段階的に進めることができるので,スタートする際の敷居は低い。また,比較的早い段階で効果が得られるというメリットがある。しかし,多くの場合,部分最適に陥りやすく,既存のビジネス・ロジックに依存することからサービス粒度も適切なものにならないケースが多い。