inhouse_se
inhouse_se 私たちは、ソフトウェアアーキテクチャの仕事を、1. システムの構造2. システムがサポートしなければならないアーキテクチャ特性3. アーキテクチャ決定4. そして設計指針 の組み合わせであると定義した。

ソフトウェアアーキテクトとは何か?

## ソフトウェアアーキテクトにはキャリアパスがない
なぜソフトウェアアーキテクトに明確なキャリアパスがないのか? 理由は4つあります。
### 1.ソフトウェアアーキテクチャ事態の定義が業界で定まっていないから
まずそもそも「ソフトウェアアーキテクチャ事態の定義が業界で定まっていない」というのが事実として挙げられます。 暫定的に「ソフトウェアアーキテクチャのマインドマップ」を作成しましたが、これも数年後には変わっているでしょう。
### 2.アーキテクトの役割が拡大し続けているから
次に、ソフトウェアアーキテクトの役割が拡大し続けているという点が挙げられます。 - 10年前には、ソフトウェアアーキテクトは、モジュール性やコンポーネント、パターンといったアーキテクチャにおける純粋な技術的側面だけを扱っていればよかった。 - 現在、ソフトウェアアーキテクチャの役割は、マイクロサービスのようなより広範囲の能力を活用する新しいアーキテクチャスタイルの台東により拡大してきている。
### 3.ソフトウェア開発エコシステムが急速に進化しているためにアーキテクチャが変化し続けているから
「ソフトウェアアーキテクチャとは、一度実装すると変更が難しいい、基本的な構造の選択に関するものである」 という記述はもう古い。 今や、マイクロサービスのような斬新的に構築していくという考え方にたった現代的なアーキテクチャが登場しているからだ。 著作「進化的アーキテクチャ」のマインドマップ:https://mobile.twitter.com/Akapon2010/status/1505481288220033027
### 4.ソフトウェアアーキテクチャのについての資料の大半が、単なる歴史的経緯となってしまっている
Wikipediaのソフトウェアアーキテクチャのページで、大量の専門用語や相互参照された広大な知識の大海に困惑しない人はいないだろう。 しかし、Wikipediaにある専門用語は、その多くが役割を終えたものや失敗したものの試みだ。 https://en.wikipedia.org/wiki/Software_architecture **数年前には間違いなく有効なソリューションだったものも、文脈の変わった現代では機能しないものとなっている。** つまり、時代背景によってアーキテクチャはいくらでも変わるということだ。 仮想化のなかった20年前に「マイクロサービスアーキテクチャ」を思いついていたとしても実用に足らないものだったろう。 *「革命的なアーキテクチャを思いついた!Windowsのライセンスが50個とアプリケーションサーバーのライセンスが30個とデータベースサーバーのライセンスが50個必要になるけどな!」*
## ソフトウェアアーキテクチャの仕事を定義してみる
これまでソフトウェアアーキテクチャの仕事が困難である理由を探してきたが、それでもあえてアーキテクトの仕事を定義する 私たちは、ソフトウェアアーキテクチャの仕事を、 1. システムの構造 2. システムがサポートしなければならないアーキテクチャ特性 3. アーキテクチャ決定 4. そして設計指針 の組み合わせであると定義した 以下それぞれ詳細を説明する
### 1.ソフトウェアアーキテクトの仕事:システムの構造の決定
システムの構造とは、そのシステムを実装するアーキテクチャスタイルの種類を指す。 - [マイクロサービス](https://techblog.short-tips.info/inhouse_se/2008microservice_arch.md) - [レイヤード]() - [マイクロカーネル](https://techblog.short-tips.info/inhouse_se/2003micro_kernel.md) などなどである
### 2.ソフトウェアアーキテクトの仕事:アーキテクチャ特性
ソフトウェアアーキテクトの特性とは、ソフトウェアアーキテクチャの成功基準を定めるものだ。 - 可用性 - 信頼性 - テスト容易性 - スケーラビリティ - セキュリティ - アジリティ - 耐障害性 - デプロイ用意性 - 学習容易性 システムが適切に稼働するためにはこれらの特性を考慮することが求められる
### 3.ソフトウェアアーキテクトの仕事:アーキテクチャ決定
アーキテクチャ決定は、システムをどのように構築するべきかのルールを定めるものだ。 例えば*レイヤードアーキテクチャ上でビジネス層とサービス層のみがデータベースに直接アクセスできる*というアーキテクチャ決定を定めることで、プレゼンテーション層が直接データベースを呼び出すのを制限する。 アーキテクチャ決定とは、**システムの制約を形作り、何が許されて何が許されないかを定めた開発チームへの指針へとつながる**
### 4.ソフトウェアアーキテクトの仕事:設計指針
設計指針は堅苦しいルールではなくガイドラインである。 例えば、*開発チームはマイクロサービスアーキテクチャのサービス間の非同期メッセージングを利用してパフォーマンスを向上させるべき* という設計指針が示されている。
## ソフトウェアアーキテクトとは何か?
title:ソフトウェアアーキテクトとは何か? description:私たちは、ソフトウェアアーキテクチャの仕事を、1. システムの構造2. システムがサポートしなければならないアーキテクチャ特性3. アーキテクチャ決定4. そして設計指針 の組み合わせであると定義した。 img:https://s3.amazonaws.com/xmindshare/preview/2R2h-wDFCWcM-45469.png category_script:True