今後数回にわたり情報システムの「アーキテクチャ」について考えていきたい。IT業界にいる方でアーキテクチャという言葉を聞いたことがない人はいないだろう。特に,経済産業省を中心として,日本政府内の情報システム構築でEA(Enterprise Architecture)という手法を採用していく動きが出てきた(関連記事)ことから,アーキテクチャが重要キーワードとしてますます注目を浴びる状況となっている。

 しかし,このEAの話を聞いたときに「今までやってきたシステムの基本設計の標準化とどう違うのか?」という疑問を持った人は多かったのではないだろうか? この連載では,このような疑問に答えるとともに,一般企業が自社システムのアーキテクチャを構築する上での「現実的な」アプローチを考えていきたいと思う。

◆アーキテクチャとはそもそも何なのか?

 ガートナーの推定では,今までに米国企業が作成したEAの半数以上がシェルフウエア(分厚いバインダができただけで実際に活用されておらず,シェルフの肥やしになっている状態)となっている。このような状態にならないためには,何を考えるべきかを考えていきたい。

 ところで,アーキテクチャという言葉には常にあいまいもことしたイメージがある。そもそも,アーキテクチャという言葉を明確に定義できる人は少ないのではないだろうか? そして,定義ができたとしても,それが他の人の定義と完全に一致することはないだろう。このような意味のあいまいさはいかなる技術用語についても言えることだが,アーキテクチャという言葉の意味の幅は相当に大きいと言わざるを得ない。

◆ハードウェアの外部仕様としてのアーキテクチャ

 筆者が知る限り,アーキテクチャという言葉がITの世界で最初に使われたのは,1964年に米IBMのメインフレームである「システム/360」が登場し,その命令セットが「Principle of Operation」というマニュアルで厳密に規定され,公開された時からだと思う。

 そこでは,アーキテクチャとは「プログラマから見たシステムの特性であり,概念的な構造や挙動であって,論理設計や物理的な実装などとは独立したもの」と定義されていた。かいつまんで言えば「実装から独立した外部仕様の(厳密な)規定」ということになるだろう。実際,筆者もアーキテクチャの反対語はインプリメンテーション(実装)だと教わったこともある。

 この意味のアーキテクチャは,たとえばIA(Intel Architecture)-32というように,今でも使用されている。プロセサの世界以外でも,たとえば,IBM製品のネットワーク・プロトコルの仕様の共通体系であるSNA(System Network Architecture)のように実装と独立した標準仕様という意味でアーキテクチャという言葉が使われることがある。

 その一方で,スーパースカラー・アーキテクチャなどという言い方もある,これはプログラマからは見えないマイクロプロセサの内部構造の話であり,すでに,上記の「実装から独立した」という言葉の定義からは離れてしまっている(このようなタイプのアーキテクチャはマイクロ・アーキテクチャと呼ぶべきと思うが,単にアーキテクチャと呼ばれてしまうことも多い)。

◆情報システムのアーキテクチャ

 以降の回では,上記の意味のアーキテクチャではなく,一般的な企業情報システムにおけるアーキテクチャについて考えていきたいのだが,ここでも,言葉の定義は様々である。

 例えば,クライアント/サーバ・アーキテクチャ,サービス指向アーキテクチャというような言い方がある。ここでは,アーキテクチャという言葉は「仕様の厳密な規定」という要素を失って,「基本的考え方」とでも言うべき言葉になっている。より正確には,アーキテクチャ≒デザイン・パターンと言えるだろう。

 アーキテクチャという言葉をテクノロジの標準化の文脈で使う人もいる。たとえば,アーキテクチャ設計書という文書の内容が「サーバではUnixを使用し,クライアントはWindowsを使用し,ミドルウエア層はJ2EEで標準化する」というようになっている場合がある。このようなアーキテクチャを特にテクノロジ・アーキテクチャと呼ぶこともある。企業にとってテクノロジ・アーキテクチャの規定は重要だが,その標準化が完了しても企業内の標準化の問題のごく一部しか解決できない点に注意すべきだろう。

 真に重要な標準化は,テクノロジの標準化ではなく,設計の標準化だからである(テクノロジの相違はミドルウエアなどのテクノロジでカバーできるが,設計の標準化はアプリケーション・ロジックを作成しないことにはカバーできない)。

 そして,もちろん,情報システムの外部仕様の規定という意味のアーキテクチャも使われる。EAの文脈のアーキテクチャはこれに近いだろう。ここで,EAにおけるアーキテクチャの定義を始めると長くなってしまうので,次回以降に回したい。

 上記を考えてみると,アーキテクチャという言葉は,「実装から独立した外部設計」を表す場合もあるし,「実装の設計」を表すこともあり,「厳密な仕様」を表すこともあれば,「基本的な考え方」を表す場合もあるとずいぶんブレが大きい言葉ではある。おそらく共通するのは「標準としてある程度広い範囲に適用される」「決めたからには一度限りではなく,長期的に使用される」「ボトムアップではなく,トップダウンで決まる」というニュアンスだろうか。

 いずれにせよ,アーキテクチャという言葉を関係者間で事前に定義しないで,アーキテクチャについて議論するというのはきわめて危険であると言えるだろう。次回以降は,これを踏まえた上で,現実的アーキテクチャ論を展開していきたいと思う。