|
コンポーネントベース開発とSOA
この「コンポーネントベース開発のススメ」の連載は、実際に行われているコンポーネントベース開発(以降、CBD)の情報をお伝えするのが主旨ですが、まずその前に、昨今話題になる事が多いSOAについて書いておきたいと思います。
なぜCBDの情報を伝えるのにSOAを知る必要があるのか。それは、以降を読んでいただければ納得いただけるのではないかと思います。
SOAはCBDなのか
CBDを考える上で、SOAは避けては通れません。なぜならCBDとSOAは非常に似通ったものだからです。
SOAはコンポーネントベース開発と同じだと考えている人もいます。また、まったく違うものだと考えている人もいます。
私は最近まではSOAはCBDの中の一つの形態だと思っていました。しかし、どうも昨今語られるSOAの話を聞いていると、そうとは言えない気がしています。
図1 CBDとSOAの位置づけ
今回は、CBDとSOAの同じところ、違うところを見ていく事で、あるべきCBDとSOAを考えていきます。
コンポーネントとは?
CBDとSOAを考える前に、コンポーネントとは何かをはっきりさせる必要があります。まず、UML2.0のコンポーネント図を見てみます。
図2 コンポーネント図の外部ビュー
コンポーネント図でのコンポーネントの表現は非常にシンプルで、コンポーネント名以外にあるのは「提供インタフェース」と「要求インタフェース」だけです。つまりコンポーネントとは外部に提供するインタフェースと外部に要求するインタフェースを持つソフトウェアの単位になります。
しかし、これだけではどんなソフトウェアもコンポーネントといえるでしょう。コンポーネントには好ましくない構成、構造があります。それが図3になります。
図3 コンポーネントの好ましくない構成、構造
これらの好ましくない構成、構造を含まないように設計されたのが本来のコンポーネントといえます。
また、コンポーネントは他から利用されるのが前提であるため、仕様を明示していることも重要な条件になります。いくらコンポーネントになっていても、それを利用するためのコンポーネントの仕様(特にインタフェースの仕様)が公開されていなければ、それはコンポーネントとは言えません。
これらからコンポーネントは以下のように定義できます。
| 提供および要求インタフェースがシンプルで、仕様が明示されているソフトウェアの単位 |
CBDとは?
コンポーネントは定義しました。それではCBDとはどのような開発なのでしょうか。私は単純に次のように考えています。
| ユーザインタフェースを除くシステム全体をコンポーネントで構成するシステムの開発 |
今までコンポーネントを使った開発というと、次にような開発を考えられる方が多くおられました。
- 一部で再利用コンポーネントを使用した開発
- フレームワークやシステム機能コンポーネントは使用しているが、ビジネスロジックはコンポーネント化されていない開発
これらはコンポーネント再利用とは言えますが、コンポーネントベース開発とは言えません。以前は「コンポーネント=コンポーネント再利用」であったため、このように認識される事が多かったのだと思います。しかし、上記の2つのパターンではコンポーネント再利用に限界がある事は明白です。したがって、コンポーネント再利用以上に、ビジネスロジックを含めてコンポーネントとして設計、開発する事が注目されています。そのような開発がコンポーネントベース開発なのです。
コンポーネントベース開発での再利用
それでは、コンポーネントベース開発では再利用は行わないのでしょうか。コンポーネントベース開発における再利用の考え方には次の3つの考え方があります。
- 再利用は考えていない
- ユーザ社内での再利用(共有)を考えている
- 開発会社内での再利用を考えている
以前はコンポーネント再利用といえば3つ目の開発会社内での再利用の事でした。しかし、ビジネスロジックのコンポーネントに関しては、ほどんどの会社が成功しませんでした。そのため「再利用はしないコンポーネントベース開発」と「ユーザ社内で再利用(共有)するコンポーネントベース開発」にメリットがあるのではないかと期待されています。特に後者の「ユーザ社内での再利用(共有)」は、SOAという形で大きな広がりを見せようとしています。
SOAとは?
それでは、SOAはどのようなものでしょうか。SOAでは、システムが必要な機能をサービスと呼ばれるインタフェースとして提供し、そのサービスをビジネスプロセスにしたがって実行するというアーキテクチャです。この時、サービスのインタフェースの汎用化と集約化のためにESBが使われ、サービスをビジネスプロセスにしたがって実行するためにBPELが使われる場合が多くなります。
図4 SOAの概要
SOAのメリットは、ビジネスプロセスの変更時への対応が簡単である事と、サービスを多くのシステムが利用するため、重複開発がなくなる事で無駄なシステム開発を避ける事ができる事です。また、サービス変更時もインタフェースさえ同じにしておけば変更が容易である事もメリットになります。
しかし、ESBとBPELの使用はSOAの必須条件ではありません。
コンポーネントとサービスの違い
ここまでを読んでいただいた方は、コンポーネントとサービスの違いに気づいていただけたのではないでしょうか。良くサービスとコンポーネントの違いとして「粒度」という言葉がでてきますが、これは違っています。図2のコンポーネント図を見ていただくと判りますが、コンポーネントとはいくつかの提供インタフェースを保持するソフトウェアの単位であり、サービスとはその提供インタフェースのことです。そのため、SOAではコンポーネントの事をサービスコンポーネントと言う場合もあります。
図5 コンポーネントとサービス
なぜSOAではコンポーネントではなくサービスが注目されたのか。これは、BPELなどのビジネスプロセスを実行する時に必要なのは、あくまでインタフェースであって、そのインタフェースがどのコンポーネントであるかを知る必要がなかったからです。また、既存のシステムにインタフェースを作ってアクセスする事もあるため、そのためにはコンポーネント化する必要が無い事も一因となっています。そのため、SOAでは、コンポーネント設計が適切に行われない場合があります。
SOAとCBDの位置づけと違い
さてこれまでの説明をまとめると、SOAとCBDの位置づけは次のようになっています。
図6 CBDとSOAの位置づけ
まず、SOAとCBDは多くの部分で重なっています。しかし、SOA特有な部分があります。それは、サービスだけ抽出されコンポーネント設計、コンポーネントによる実装が行われない場合です。既存システムへの接続だけが目的であればこれでも問題ありませんが、実際には新しいサービスの構築は必要ですのでコンポーネント化は実施されるべきです。
次に、CBD特有な部分は再利用しない場合や開発会社内での再利用だけを行う場合です。しかし、これらが有効に行われている事は少ない状況ですので、CBDのメリットを活かすためにはユーザ会社での再利用を推進すべきです。
このように、CBDとSOAの重なる部分が、両者の良い点を併せ持ったシステム開発です。コンポーネントベース開発を視野に入れている方は、ユーザ会社での再利用を主眼に置いたコンポーネントベース開発を、SOAを主眼にしている方は、コンポーネント設計を考慮したSOAを、ぜひ推進していただきたいと思います。
次回からは、このような前提でCBDそしてSOAをまとめていきます。

株式会社コンポーネントスクエア ディレクター 技術担当 中台高宏
日立ソフトウェアエンジニアリング(株)にて、エキスパートシステムやWebアプリケーションの開発に従事し、2001年のコンポーネントスクエアの設立時より、技術担当ディレクターとして参加し、今に至る。EJBコンソーシアムでは公開情報部会の副主査を務め、公開情報規約の策定に関わる。 |
|