generated at
ソフトウェアアーキテクチャの基礎 ―― エンジニアリングに基づく体系的アプローチ


はじめに : 公理を疑う
ソフトウェア開発のエコシステムは動的な平衡状態 : 均衡が保たれつつ、長期的には動的

1 章 イントロダクション
ソフトウェアアーキテクチャ自体の定義が曖昧だし、変化が激しい
プロセスに関する問題がソフトウェアアーキテクチャの領域に入ってきている (プロセスはアーキテクチャの多くの面に影響)
それでもプロセスエンジニアリングプラクティスは分けて考えるべき
ソフトウェア開発における予測や見積りの難しさは、未知の未知に起因
DevOps はアーキテクチャの公理が見直されたことで登場
従来は運用を外部に委託していた会社が多く、アーキテクトが運用に対して防御的になっていた
運用上の能力をアーキテクチャ内部で扱えるように設計し、結果として複雑なアーキテクチャになっていた
近年は、アーキテクチャを運用と連携させ、設計を単純にし、運用メンバーに最適な対応を任せるように
アーキテクトと運用メンバーが組むことで、マイクロサービスが作られた
ソフトウェアアーキテクチャの法則
ソフトウェアアーキテクチャはトレードオフが全て
「どうやって」 よりも 「なぜ」 の方がずっと重要

I 部 基礎
2 章 アーキテクチャ思考

3 章 モジュール性

4 章 アーキテクチャ特性
アーキテクトドメインビジネス要件の定義に協力しつつ、アーキテクチャ特性の定義、発見、分析に責務を持つ
あらゆるアーキテクチャ特性を備えようとすると扱いにくい設計になってしまう
アーキテクチャをできるだけイテレーティブに設計すべき

5 章 アーキテクチャ特性を明らかにする
アーキテクチャ特性を明らかにするのは、アーキテクチャ設計や既存アーキテクチャの正当性の判断のための最初の一歩
アーキテクチャ特性を明らかにするには、ドメインの関心を翻訳できる必要
ドメインのステークホルダーとアーキテクトの言葉の壁 → ドメインの関心事からアーキテクチャ特性への翻訳
ユーザー数から、スケーラビリティ弾力性を考慮
暗黙的なアーキテクチャ特性 : 可用性信頼性など

6 章 アーキテクチャ特性の計測と統制
アーキテクチャ特性について客観的な定義を持つべき (組織内での会話が円滑になる)

7 章 アーキテクチャ特性のスコープ

8 章 コンポーネントベース思考
アーキテクトは、アーキテクチャを構成するコンポーネントを定義し、改良し、管理、統制する
コンポーネントは、アーキテクトが関わるソフトウェアシステム構成要素の中で (例外を除き) 最も小さいもの
アーキテクチャスタイルの重要な側面である最上位分割

II 部 アーキテクチャスタイル

9 章 基礎

10 章 ~ 17 章
各アーキテクチャスタイルの説明

18 章 適切なアーキテクチャスタイルを選ぶ

III 部 テクニックとソフトスキル
19 章 アーキテクチャ決定
アーキテクチャ決定が、アーキテクトに求められることのひとつ

20 章 アーキテクチャ上のリスクを分析する

21 章 アーキテクチャの図解やプレゼンテーション
本書の描画ツールは OmniGraffle (特定のツールを推奨しているわけではない)
標準ダイアグラム : Unified Modeling Language (UML)、C4 モデル図 (C4)、ArchiMate
文書とは違い、発表側が時間をコントロールする
2 つの情報チャネルがある (スライドと話者) ので、それらをうまく使う

22 章 効果的なチームにする
アーキテクトは、アーキテクチャを実装する際の制約 (= 箱) を作る
境界がきついとフラストレーションがたまり、ゆるいと混乱を招く
チェックリストを活用する
設計指針を用いてガイダンスを提供

23 章 交渉とリーダーシップのスキル
アーキテクトは多くの人から異議を唱えられる
開発チームからも、他のアーキテクトからも、ステークホルダーからも
交渉でも分割統治が使える
常に正当な理由を示すこと
リーダーとしてのソフトウェアアーキテクト

24 章 キャリアパスを開く