アーキテクチャは、所定の関心事に対応する関連要素の一貫したグループ分けを定義する。例えば、注文処理システムのアーキテクチャは、受注要素、アカウント管理、顧客管理、注文処理、外部システムとの統合、持続性、およびセキュリティのグループ分けを定義する。
これらのグループ分けには、それぞれ異なるスキルセットが必要になる。従って、いったんアーキテクチャを定義したら、ソフトウェア開発チームの構造をそれに合わせることが完全に理にかなう。しかし、アーキテクチャが当初のチーム構造の影響を受けたり、その逆のケースも多々ある。この落とし穴は、一般的にはとても理想的とはいえないアーキテクチャに結び付くため、回避することが最も好ましい。「Conwayの法則」には、「4つのグループにコンパイラを開発させると4パスコンパイラが出来上がる」とある。実際には、アーキテクチャを作成している組織を反映したアーキテクチャを意図せず作成する場合が多い。
しかし、純粋に事務的な理由から、既存のチーム構造と利用可能なスキルが可能なことを大幅に制約し、設計者がこれを考慮に入れる必要があるため、この多少理想化された見方が常に現実的ではないことも真実だ。
正式に文書化されていなかったり、システムが極めてシンプルで要素が1つしかなくても、どのシステムにもアーキテクチャが存在することは注目に値する。通常、アーキテクチャを文書化することはかなり有益なことだ。アーキテクチャは文書化されていた方が、されていないより慎重に検討され、結果的により効率的になる。アーキテクチャの記録プロセスが、当然ながら配慮の行き届いた検討に結び付くためだ。
逆に、アーキテクチャが文書化されていないと、これが規定された要件を保守性や最優良事例への適応といった対応品質の点で満たすことは(不可能でなくとも)難しくなる。既存の大半のアーキテクチャは文書化されていないと思われるが、これらは意図的というより偶発的なものだ。
アーキテクチャにはさまざまな種類があり、最も有名なものが土木工事などの各種建造物の構造に関連するものだ。ソフトウェアエンジニアリングの分野でさえ、さまざまな形式のアーキテクチャを目にするようになる。例えば、ソフトウェアアーキテクチャのコンセプトのほかにも、エンタープライズアーキテクチャ、システムアーキテクチャ、構成アーキテクチャ、情報アーキテクチャ、ハードウェアアーキテクチャ、アプリケーションアーキテクチャ、インフラアーキテクチャなどのコンセプトがある。これからは、設計作業の具体的な範囲を定義するほかの用語も目にするようになるだろう。
残念ながら、業界にはこれらの用語の意味についても、相互関連についても一致した定義がなく、その結果、同じ用語が異なる意味を持っていたり(同音異義語)、複数の用語が同じ意味を持っていたりする(同義語)。しかし、これらの用語の範囲は図3から推論できる。この図と以下の説明を見れば、納得できないものや自社では使っていないものも必ず出てくる。しかし、これらの用語が業界に実際に存在することと、そこに一致した意味がないことを示すことが肝心なのだ。
図3は以下の要素を示している。
予想されるとおり、設計者(ソフトウェア設計者やハードウェア設計者など)とアーキテクティング(ソフトウェアアーキテクティングやハードウェアアーキテクティングなど)のように対応した形式がある。
これらの定義を見てきたが、答えの出ていない問題も多い。エンタープライズアーキテクチャとシステムアーキテクチャの違いは何だろうか? エンタープライズはシステムなのか? 情報アーキテクチャは、データに対する要求の高いソフトウェアアプリケーションの一部で見られるデータアーキテクチャと同じなのだろうか? 残念ながら、これらの疑問に対する一致した答えはない。
いまのところは、このように異なる定義が存在するものの、これらの用語やその関連については業界に一貫した定義がないことだけ認識しておきたい。従って、自分が所属する組織に関連する用語を選択し、これを適切に定義しておくことを推奨する。こうすれば、少なくとも一定の整合性を実現し、コミュニケーションミスの可能性を削減することができる。
本稿は、ソフトウェアアーキテクチャの核となる特性の定義に重点を置いてきた。しかし、まだ答えの出ていない疑問が多く残っている。ソフトウェア設計者の役割は何だろうか? 設計者が関係する重要な作業は何だろうか?「アーキテクティング」のメリットは何だろうか? これらをはじめとするさまざまな疑問には、本シリーズの続きで答えていく
Copyright © ITmedia, Inc. All Rights Reserved.