つい最近、何かの集まりかなにかで、「このシステムのアーキテクチャがどうのこうの、、、」みたいな話を聞きました。なんだか違和感を感じたのと、そういえば自分も昔いろいろ言われたことがあったなと思い出したので、コンセプチュアルになってしまいますが記事を書いてみます。
違和感は何だったか
システムアーキテクチャをシステム設計みたいな言葉と同義で使われていた気がしたのです。
アーキテクチャは設計(デザイン)では無いはずです。
アーキテクチャは、何ができて(得意で)、何ができないか(不得意か)、ということを表し、そういう特性を持つものはこういう考え方で作られるべきである、という指針を与えるものです(ITシステム以外の、例えば建築の分野でも全く同じ解釈ができるかわからないのですが)。
つまり、アーキテクチャが示す指針に基づいてシステムを設計する、ということになります。指針と設計がバラバラだとイケてないシステムが出来上がります。
ちょっと古い例になりますが、マイクロサービスアーキテクチャで行こうと決めたのに、機能の粒度や分割方法(つまり設計)がまずくて地獄が待っていた、とかでしょうか。こういう例の場合、そもそもアーキテクチャの選択を間違ったのか、その後の設計がまずかったのか、なんとも言えません。なんでもできる万能のアーキテクチャというのは普通はありえなくて、あるアーキテクチャを選択すると、何かができない、または不得意になります。テクノロジーの進化で不得意度合いが軽減されることはありますが、できない/不得意なことをちゃんと認識することが、まずはじめに大事なことだと思います。
まとめ
改めて言われるまでもない、と怒られるかもしれませんね。。また、これがわかったら何か良いことがあるかと言われると、悪いことは無いはずだ、という程度のものかもしれません。それと、ここに書くことが絶対の答えでもないとは思っています。
ただ、システムの作りを階層的に俯瞰するときに、最上位にくるものがきっとアーキテクチャになるので、理解は深まりそうな気がします。