話題のSOAについて考える : その1 SOAって、ナンだろう?エヴァンジェリスト・コラム(1/2 ページ)

ITに関する広範な知識と経験を持つエヴァンジェリストによるコラム。今回は「SOA」についての解説となる。

» 2006年08月10日 08時00分 公開
[米持幸寿/日本IBM,ITmedia]

SOAを正しく訳すと?

 最近、SOA(Service-Oriented Architecture)という言葉をよく耳にします。そのまま日本語に直訳すると「サービス指向アーキテクチャ」となりますが、言葉の意味をもう少し理解して正しく翻訳するならば、「サービスを指向したアーキテクチャ化」のほうが適しているでしょう。

 SOAとは、システム構築の概念です。SOAの考え方では、システムの関数(普通はソフトウェア)を、外部のソフトウェアから呼び出し可能な「インターフェイス」を持たせた状態で稼働させます。

 この「呼び出し可能な状態で稼働している関数」が「サービス」です。このインターフェイスに、外部のプログラム(コンシューマと呼びます)から「プロキシ(代理)」や「スタブ(半券)」と呼ばれる仕組みを通してアクセスし、呼び出すようなソフトウェアの構造が、「サービス指向型の構造(図1)」なのです。

 SOAとは、「こういうソフトウェアの構造を採用すること」であり、そしてこの基本構造を組み合わせたシステムの基本概念です。ここには、ソフトウェアの構造を柔軟に変更できる、というメリットがあります。まずはこの概念をきちんと理解することが必要です。

 プログラミングをしない人には「関数」「インターフェイス」という概念はあまり縁がないでしょう。「プロキシ」とか「スタブ」という用語も、分散システム技術の経験などがないと聞きなれない言葉だと思いますので、合わせて説明します。

 

SOAにおける関数とインターフェイス

 ここからは、プログラムコードを参照します。まずは、<ソースコード1>を見てください。

 今日では、単独のソースコードで動作するソフトウェアはほとんどありません。ちょっとしたバッチファイルやスクリプト、学習用に作ったプログラムや趣味のためのプログラミングならいざ知らず、きちんとしたシステムのソフトウェアは、何百というソースコードを組み合わせて完成させます。このため、ばらばらに作成したソフトウェアを結合(バインド)する必要があります。ソースコードを結合する方法でもっとも古典的なものは「リンクエディット」です。

 <ソースコード1>では、上部のルーチンから、下部のルーチンを呼び出しています。上部にあるコードでは、「address」という文字変数に「東京都渋谷区道玄坂」という文字列をセットし、「add2zip」をコールしています。

 add2zipは、下部にあるプログラムで、ここでのデータベース処理コードは省略していますが、住所を郵便番号に変換し、郵便番号を返す(return)処理をします。とりあえずこの関係を理解してください。

 昔はこのような関係を「メインルーチン」と「サブルーチン」と呼んでいました。今では構造化言語などの概念が浸透したので、下部のようなルーチンを「関数」と呼ぶようになりました。サブルーチンと関数の違いは、「関数は戻る」という点にあります。サブルーチンは構造化言語以前の概念なので、行ったきり戻ってこない(どこか、ほかへ飛んでいってしまう)可能性があるのです。

 さて下部の関数は、このコードを見るだけで「なにを渡すとなにが戻ってくるか」が分かるようになっています。コンパイラやリンカー(リンクエディットするソフトウェア)などもこの情報を使います。ところで、

String add2zip(String address)


この記述からは、次のことが分かります。

  • この関数の名称は「add2zip」
  • この関数の引数はString型がひとつで、名称が「address」
  • この関数の戻り値はString型がひとつ

このような情報を「インターフェイス」といいます。この例ではJavaを使って説明しています。同じようなインターフェイスはC++やC#などの他の言語でも定義できます。

       1|2 次のページへ

Copyright© 2010 ITmedia, Inc. All Rights Reserved.