見出し画像

システムアーキテクチャ超概論①

気がつくと前回の記事からぴったり1年が経ってしまいましたが、今日はシステムアーキテクチャについて書いてみたいと思います。

システムアーキテクチャ。最近、アーキテクチャという単語をよく耳にするようになった、という方も多いのではないでしょうか?
私も色々なところでアーキテクチャという話を聞きますし、使っています。でも同時に「アーキテクチャってつまり何のか分からない」「簡潔に説明して!」というお話も、よく聞きます。
システムアーキテクチャはISO/IEC/IEEE42010等の標準等で定義されていますが、これがなかなか掴みにくい表現になっていますので、ここではその辺りをすっ飛ばして、すっごい簡潔に説明するとことにチャレンジしてみたいと思います。(いろいろと省略するものの間違ってはいない、という辺りを目指して書いてみます)

システムアーキテクチャとは

超簡単に表現すると、システムアーキテクチャとは、システムのコンセプトです。そのコンセプトを示すためにシステムが達成すべき「目的」、その目的を達成するためにシステムが「やること」、その「やること」をどう実現するかの「実現手段」の関係性を用います。
この目的、やること、実現手段は英語で説明する際にはto, by ,usingと表現されることもあります。こちらの方が感覚的にわかりやすい方もいるかもしれません。国内だと慶應SDMでは目的、機能、物理という表現で教わりますが、今回は敢えて機能、物理という表現を使わずに説明してみたいと思います。(理由はおいおい)

画像2

前述した標準のなかでは「目的」「やること」「実現手段」を示すことまでは述べられていませんが、システムアーキテクチャの設計を支援する様々なアーキテクチャフレームワークには基本的にこれに類するものが含まれており、システムのコンセプトを示す上で必要な要素になります。
言い換えると、システムがなぜやるのか、なにをやるのか、どうやるのか、の説明が必要という意味ですので、理にかなった要素ではないでしょうか?そして、これらの要素を単独で示すとその適切さが分からないので、要素間がどう繋がっているかを示すことが非常に重要になります。

すっごい簡潔に言うと、システムアーキテクチャの超基本説明は以上です、ということで良いかもしれません。

システムアーキテクチャとして示すべき基本セット

先程の図では、目的、やること、実現手段が1つずつしか書いていないので3つの箱を縦に並べただけで終わりましたが、実際には目的を達成するために「やること」は複数ありますし、「実現手段」も1つにはなりません。
そこで、システムが目的を達成するために「やること」をどの「実現手段」が行うのか示す(割り当てる)必要があります。そのうえで複数の実現手段の間の関係性として「やりとりされるもの」「関係性の実現手段」を示すと、システムが全体としてどうやって目的を達成するのかが表現できますので、これでシステムアーキテクチャとしての基本セットを用意したことになります。

画像3

(上の図では「実現手段A」が「やること①」「③」をやる。「実現手段B」が「やること②」をやる。「やること①」と「②」の間で「やりとりされるもの①」がある。「やりとりされるもの①」は「関係性の実現手段」で実現される。以下略)

「やること」の割り当てられた実現手段は「サブシステム」と呼びますが、つまりシステムの構成要素をサブシステムに分解して示したものがアーキテクチャといえます。

アーキテクチャを表現したものとして、例えば「機能」や「データ」の要素と要素感の関係性を示しているものもありますが、これらはシステムアーキテクチャを構成する一部となります。

超概論とはいえ、もう少しだけ説明

今回は「アーキテクチャってつまり何なのさ?」を大掴みにしてもらうための超概論を試みていますが、やはり流石に、未だ説明が必要なことは幾つかあります。
例えば「やること」とざっくり書いてしまいましたが、これって例えばどんなこと?という話が必要ですし、システムのコンセプトを示す上で「目的」「やること」「実現手段」にプラスして書くべきこともあります(この辺は何のシステムを設計しているかによります)。それに関連する超重要な概念として「ビューポイント」の紹介も必要です。
その辺りは次回「システムアーキテクチャ超概論②」に回すとして、今回は最後に、「目的」「やること」「実現手段」について考える上でポイントになりそうな点を、もう少しだけ補足をしておきたいと思います。

画像3

【目的の補足】
•システムを作ろうとしている限り「目的」は必ず存在する。
•ただし「目的」は往々にしてシンプルに整理されていない。
•「目的」は階層構造を持ち、細分化していくと「やること」と区別がつきにくくなる。

【やることの補足】
•「やること」に抜け漏れがあると目的は達成されない。
•「やること」を定義するには、システムを使う上での前提を決める必要がある。
•「実現手段」の存在しない「やること」は実現できない。
•目的と同じ様に「やること」は階層性を持つ。
•システムのコンセプトがわかるレベルで「やること」を示せば良いわけだが、「やること」は1つの実現手段に割り当たるまで細分化して示す必要がある。(1つのやることを複数の実現手段に割り当ててはいけない。)

【実現手段の補足】
•「実現手段」は、その種類を知らないと思いつけない。

まとめ

ここでは「アーキテクチャを理解する上での基本なんだけど、意外と認識されていないかも?」の辺りに絞って記載してみました。
ポイントとしては、

システムアーキテクチャを表現する上で基本になるのはシステムが達成すべき「目的」、その目的を達成するためにシステムが「やること」、そして、やることを実現する「実現手段」と、それらの関係性

になります。
だいぶ抽象的な話に終始してしまったので、次回は具体例も交えてみたいと思います。

以上、アーキテクチャという言葉に出会ったものの、その意味を測りかねている方のご参考になれば幸いです。そう遠くない日に、次回「システムアーキテクチャ超概論②」を書いてみたいと思います。

この記事が気に入ったらサポートをしてみませんか?