背景
![webapp01.gif webapp01.gif](https://cs27.org/?plugin=ref&page=Research%2FSOA%2F%B3%B5%CD%D7&src=webapp01.gif)
インターネット技術の進歩により,社会における様々なサービス(オンラインバンキング,オンライン予約システム,e-Learning等)がネットワークを通して提供されてきています.それらのサービスを実現するソフトウェアは,市場ニーズに応えるべくますます高機能化しています.現在多くのネットワークサービスはWebサーバ上のソフトウェアによって提供され,ユーザはWebブラウザを用いてサービスを利用する方法が一般的です.Webブラウザが提供するフォームやボタンなどのWebインターフェースを用いることで,比較的リッチなインターフェースを持ったアプリケーションを,クライアント側の導入コストや機種依存問題などを最小限におさえて実現できます(Webアプリケーションと呼ばれます).
Webアプリケーションは,一般的にベンダ独自の手法にのっとって開発され,サービスへのインターフェースやユーザに送られるHTMLのフォーマット等はアプリケーションごとにまちまちです.従って,Webアプリケーションは再利用性に乏しく,「ある既存のサービスAとBを組み合わせて新たなサービスを作る」といったサービス同士の連携を行うことは困難でした.そのため,新たなサービスを実現するために,少なからずスクラップ&ビルドをせざるを得ず,莫大な開発コストがかかっています.
Webサービスとは
![webservice001.gif webservice001.gif](https://cs27.org/?plugin=ref&page=Research%2FSOA%2F%B3%B5%CD%D7&src=webservice001.gif)
そこで,サービスの再利用・連携を大きく意識したWebサービスという技術が生れました.Webサービスとは,クライアント側の任意のアプリケーションから(Webブラウザを介することなく),Webサーバ上のサービスへアクセスするための標準的な枠組みのことを指します.Webサービスでは,HTTPの上位にSOAPというプロトコルを用い,XMLによってデータをやり取りします.サービスのインターフェースはWSDLと呼ばれるXMLで記述され,メソッドとして公開されます.
従来のWebアプリケーションでは,データのやり取りや解釈に,(Webブラウザを通して)必ず人手が介在していました.しかし,Webサービスの枠組みを用いると,人手を介さない標準的な機械対機械(サービス対サービス)の連携を実現できるのです.つまり,アプリケーションは遠隔にあるサービスをあたかも通常のメソッド呼び出しのように利用できるのです.
サービス指向アーキテクチャ(SOA)
Webサービス技術を用いることで,ソフトウェアの機能はネットワーク越しに,しかも,プラットフォームに非依存な形で利用・提供できるようになります.このことから,ソフトウェアはもはやローカルなマシンにインストールして使うのではなく,リモートな「サービス」として利用しようという考え方が可能となります(Software as a Service, SaaS).しかも,公開された複数のサービスを組み合わせることで,さらに高機能な連携サービスが実現可能になります.
このように,ソフトウェアの機能をサービスという単位で捉え,それらを連携・統合して新たなサービスを迅速に開発していこうという考え方を,サービス指向アーキテクチャ (Service-Oriented Architecture, SOA)と呼びます.
SOAは,オブジェクト指向のようなプログラミングに対するパラダイムではなく,システム全体やサービスをどういう捉え方で構成していくかというアーキテクチャパラダイムです.各個別のサービスの実装には,オブジェクト指向言語が使われ,Webサービスがそれらをサービス公開するための実装技術として使われることが多いです.
課題
上でみたように,SOA/Webサービスは,ネットワーク上に分散したソフトウェアを,サービスという単位で統合・連携することを可能とする画期的な技術として注目を集めています.しかし,Webサービスの技術が誕生してから未だ日が浅く,Webサービスを用いてどのように実際のサービスやソフトウェアを開発してよいのか,はっきりとした方法論が確立していません.かといって,従来のオブジェクト指向開発向けに提案された方法論を全てそのまま適用できないと考えています.
従来のオブジェクト指向プログラミングでは,オブジェクトの再利用率を高めるため,一つのクラスを小さく汎用的に作ったり,継承などを用いる等して,オブジェクト同士を密に結合(Tight Coupling)させる場面がよくあります.また,多くの場合,オブジェクト間の通信は,マシン上のオンメモリで行われ,ネットワークをまたぐことを意識していません.
一方,Webサービスでは,オブジェクトより粒度の高いサービスをソフトウェアの機能単位とみなし,サービス同士をネットワーク越しに疎結合(Loose Coupling)させるという,サービス指向アーキテクチャ(Service Oriented Architecture)の考えに基づいています.公開されたサービスは,基本的にインターフェースを変更する事は許されない(厳密な型付け,Strictly-Typed)反面,サービスの内部ロジックや通信路上のメッセージのフォーマットなどは一切気にする必要がないのです.また,サービスの連携は基本的にネットワーク越しに行われるので,ネットワークによる負荷を意識しなければなりません.
これらのことから,Webサービスを用いたサービス開発は,従来のWebアプリケーションの開発と比べて,随分異なると予想されます.本研究では,Webサービスアプリケーションを,どのように開発したらしたらよいのか,どのようなキラーアプリケーションがあるか,等をソフトウェア工学の観点から探っていきます.