EAとSOAってあんまり関係ないよね
以前のエントリーでサービスと言う言葉の多重定義から生まれる混乱ついて書きました。同じようなことが、「アーキテクチャ」という言葉についても言えると思います(これについて昔書いたコラム)。
で、アーキテクチャという元々の意味は、「複数のハードウェアモデルで共通に使用される命令セットの外部設計」みたいな意味でした(IBMのS/360アーキテクチャ)。アーキテクチャ(外部設計)の反対語はインプリメンテーション(実装、内部設計)なんて教わったこともあります。X86アーキテクチャとかいう場合も同じ意味ですね。
ところが、クライアント・サーバ・アーキテクチャとなるとちょっとニュアンスが違います。ここでは、構築手法というような意味ですね。プログラムをクライアントとサーバに分けて作りましょうという手法全般について言っているわけであって、特定の外部設計のことを指しているわけではありません。
もうひとつ、テクノロジーの選択肢みたいなものをアーキテクチャと呼ぶこともあります。以前、某米国ベンダーの人(外人)の話を聞いたとき、「リファレンス・アーキテクチャ、要するにわが社のお勧め製品リストですが~」と話していて、ずいぶん正直だなーと思ったことがあります。
さて、EAにおけるアーキテクチャは第一の意味でしょう。要するに企業として共通化された外部設計ということです。一方、SOAのアーキテクチャは第二の意味、つまり、ソフトウェアを部品化(サービス化)しましょうと言う考え方そのものです。
SOAの話をする時に、EAの話も出てくることが多いですが、両者は同じ「アーキテクチャ」という言葉を使っていても全然別のものだと思います。もちろん、EAは企業内システムのすべての要素に関係するので、その意味ではSOAとEAは関係しているのですが、特に強い結びつきがあるかというとそうでもないのではないかと。
サービスと言う言葉と同様、アーキテクチャという言葉のあいまいさも弊害をもたらしていると思います。そう考えると、SOA(サービス指向アーキテクチャ)って世の中を混乱させるために生まれてきたような言葉ですね ^_^;
ちょっと文章わかりにくかったかもしれないので追加。
「1年かけてわが社のEAを作ろう」とは言えます。1年かけて全アプリケーションで共通して使える基本設計書みたいのを作ろうという意味です。
「1年かけてわが社のSOAを作ろう」とは言えないですね。「SOAを使ってわが社のシステムを再構築しよう」とか「わが社のシステムにSOAを適用しよう」なら言えます。SOAをクライアント・サーバ・アーキテクチャに置き換えてみると、もう少しクリアになるかもしれません。
要するにEAの「アーキテクチャ」とSOAの「アーキテクチャ」は類似してはいるのですが、前者が具体的な設計を指すのに対して、後者は設計手法を指す点で、言葉としては根本的な違いがあるということです。