読み込み中...ソフトウェア工学において、サービス指向アーキテクチャ(サービスしこうアーキテクチャ、Service-Oriented Architecture、SOA, 「エスオーエイ」あるいは「ソーア」と発音)とは、大規模なコンピュータ・システムを構築する際の概念あるいは手法の一つ。業務上の一処理に相当するソフトウェアの機能をサービスと見立て、そのサービスをネットワーク上で連携させてシステムの全体を構築していくことを指す言葉である。業務処理の変化をシステムの変更に素早く反映させたいという需要に応えうるものとして、2004年頃からIT業界において注目を集めている。
SOAに必要とされている条件は、次のような事柄である。
SOAに通じる考え方や技術は古くから存在している。オブジェクト指向やコンポーネント指向は、決められたインタフェースに従ってソフトウェアの一部分をカプセル化、部品化し、それを組み合わせて全体を構成するという考え方を基本としている。また、分散オブジェクト、メッセージング、EAI (Enterprise Application Integration) などの技術を使用し、ネットワークを介してソフトウェアを連携 (疎結合) させるといったことは、大規模なシステムにおいてはすでにある程度実施されている。
ただし、オブジェクト指向やコンポーネント指向においては、主にプログラム上の部品をソフトウェアの構成単位としており、業務処理の変化をシステムの変更に素早く反映させたいという視点においては単位が小さすぎる、とされている。(もっとも、単位の大きさ (粒度) は元来任意であり、オブジェクト指向やコンポーネント指向における部品の粒度を業務処理のそれに合わせたものがSOAにおけるサービスであると捉えることもできる。)また、従来のシステム連携技術は、特定のソフトウェア基盤の使用を前提としているか、あるいは連携させるために必要な作業や手順が煩雑である。こうしたことから、システム連携のスピードやコストにおける問題点が指摘されていた。このような問題を解決するための技術あるいは概念として、2000年頃からWebサービスが提唱されている。
ただし当初のWebサービスは、現在のSOAと同様の構想がすでに提唱されてはいたものの、実装技術としてはWebを介したソフトウェアの連携自体に主眼が置かれていた。また、連携する個々のソフトウェア (サービス) をシステム全体の中でどのように位置づけるのか (サービスの粒度の目安を何に置くのか)、多数のサービスを連携させる複雑なトランザクション処理などをどのように設計、実装するのかといった事柄が、課題として残されていた。その後、Webサービスの概念や技術の拡張に伴い、2004年頃から、「Webサービス」に代わって「SOA」がキーワードとして注目されるようになった。
現在提唱されているSOAが前提とする技術的基盤は、ほとんどの場合Webサービスである。Webサービスは、XMLやHTTPなどのインターネット標準技術を元にしており、SOAの実現に必要な事柄を技術的に支えている。純粋な概念的議論をするならば、SOAを実現する技術をWebサービスに限定する必要はない。しかし、SOAの実現に必要なインタフェースの標準化や製品実装の業界動向からかんがみて、Webサービスの使用が事実上必須の状況となっている。
Webサービスにおいては、以下の三つが基本的な技術要素とされている。これらはいずれも、メッセージや定義の記述にXMLを使用している。これらに加え、多数のサービス間の複雑な連携を設計するための技術仕様として、BPEL (Business Process Execution Language) やBPMN (Business Process Modeling Notation) が登場している。また、その設計したサービス連携を実行するための技術として、ESB (Enterprise Service Bus) が登場している。
BPELは、業務処理のプロセス (サービスを連携する順序やルール) を記述する言語である (これもXMLを使用している)。サービスの連携について記述すると同時に、個々のサービスのインタフェースを記述したWSDL形式のデータも指定する。BPELとWSDLによって、サービス連携の記述と個々のサービスとを分離させた上での、柔軟で容易な疎結合が可能となる (とされている)。BPEL形式の記述に従ってサービスの連携を実行するソフトウェアはBPELエンジンと呼ばれる。
BPMNは、業務処理のプロセス (サービスを連携する順序やルール) を図として記述するための可視化表記法である。BPMNを用いて作成した図は、BPEL形式の記述へ変換することが可能である。そのような変換を自動化するツールも提供されている。
ESBは、サービス間をつなぐ中継バスとしての役目を担う技術あるいはその実装製品を指す言葉である。サービスを1対1で直接P2P接続する場合と比べて、ESBを使用すれば、多数のサービス間接続を集中して管理、監視できるようになる。複数のESBを接続して連携させ、ルーティングやプロトコル変換などの役割を持たせることも可能である。
BPMN、BPEL、ESBや、それらの基礎となるWebサービスを完全に活用できている状態においては、BPMN形式のビジュアルな図を描くだけでシステム連携が可能となり、その図を描き換えるだけで業務処理の変更に対応できる (とされている)。
なお、個々のサービス (ソフトウェア) の実装においては、任意の技術を使用可能である。ただし、WebサービスあるいはSOAの製品実装においては、Java あるいは .NET の使用が先行している。既存の技術 (たとえばメインフレーム系の技術) を使用しているシステムをサービスとして活用する場合、そのインタフェースの作成にはJavaなどを使用するのが通常である (こうした手法はレガシーラッピングと呼ばれる)。
現在提唱されているSOAに対して、「Webサービスと大差ない、ただの宣伝文句 (バズワード) なのではないか」との批判がある。技術的基盤が事実上ほぼ同一であるということが最大の根拠である。また、「SOA」というキーワードをIT系のベンダー、コンサルタントやメディアが盛んに使用し始めた時期と、「Webサービス」というキーワードがあまり聞かれなくなった時期とが一致しており、「単なる言葉の言い換えではないか」との見方を助長している。
ただ、Webサービスが普及しなかった原因のいくつかが、SOAと呼ばれるようになった段階である程度解決されているのは事実である。また、ビジネス (業務処理) と実装技術との差異を埋めようとする現在のSOAの方向性については、肯定的に評価する向きが少なくない。
なお、「SOAとは何か」という議論において、Webサービスと対比させて、「SOAはWebサービス以前から存在していた、もっと広い概念である」「SOAは概念であり、Webサービスのような具体的な実装技術とは切り離して考えるべきである」とする言説が存在する。これは、SOAの定義において、実現する手法まで含めるか、あるいは概念にとどめるかという、立場の違いに大きく起因するものである。
さらに、SOAとWebサービスとの違いを強調しようとするあまり、SOAの実態以上にビジネスへの貢献を強調し、あるいはSOAの実現にWebサービスの使用が事実上必須である状況をかんがみない言説が存在する。そのようなことが、SOAについての議論を混乱させる要因の一つとなっている。
読み込み中...