# ソフトウェアアーキテクチャの基礎 ## 概要 Mark Richards と Neal Ford による、ソフトウェアアーキテクチャの入門教科書である。原著は *Fundamentals of Software Architecture: An Engineering Approach*(O'Reilly, 2020)、日本語版は島田浩二訳でオライリー・ジャパンから 2022 年に刊行された。 本書の立場は副題「エンジニアリングに基づく体系的アプローチ」に集約される。すなわち、ソフトウェアアーキテクチャを職人芸や個人の勘の領域から切り離し、アーキテクチャ特性という測定可能な軸と、アーキテクチャスタイルという既知の設計解の分類、そしてトレードオフの明示的な分析という、反復可能な方法論の上に置こうとする。冒頭の「はじめに:公理を疑う」が示すとおり、著者らはソフトウェア開発エコシステムが動的な平衡状態にあることを前提とし、過去のアーキテクチャ書が依拠した公理そのものを疑うところから議論を始める。 ## 書誌情報 - 書名: ソフトウェアアーキテクチャの基礎 ― エンジニアリングに基づく体系的アプローチ - 原書: *Fundamentals of Software Architecture: An Engineering Approach*(O'Reilly Media, 2020) - 著者: [[Mark Richards]]、[[Neal Ford]] - 訳者: [[島田浩二]] - 出版社: [[オライリー・ジャパン]](発売元: オーム社) - 発行日: 2022 年 3 月 4 日(初版第 1 刷) - ISBN: 978-4-87311-982-3 - 構成: 全 24 章 + 付録 A。1 章(イントロダクション)、第 I 部 基礎(2〜8 章)、第 II 部 アーキテクチャスタイル(9〜18 章)、第 III 部 テクニックとソフトスキル(19〜24 章) - 原本: `.raw/books/fundamentals-of-software-architecture-ja/` ## 構成と主要テーマ ### 導入(1 章) 本書の定義と立場を置く章。アーキテクチャを構造・アーキテクチャ特性・アーキテクチャ決定・設計指針の 4 要素として定義し、以降の三部構成の読み筋を与える。 → [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 1 イントロダクション]] — アーキテクチャの 4 要素定義・アーキテクトへの 8 つの期待・交わる領域・第一/第二法則を提示する導入章 ### 第 I 部 基礎(2〜8 章) アーキテクチャを論じるための語彙を作る部。「良いアーキテクチャ」を主観から救い出すために、モジュール性を計測可能な指標へ、要求をアーキテクチャ特性へ、特性のスコープをデプロイ単位へと順に還元していく。 → [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 2 アーキテクチャ思考]] — アーキテクト思考を「設計との違い」「技術的な幅」「トレードオフ分析」「ビジネスドライバー理解」の 4 側面から捉える → [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 3 モジュール性]] — モジュール性を凝集度・結合・コナーセンスの 3 指標で計測し、リファクタリングの指針を導く → [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 4 アーキテクチャ特性]] — アーキテクチャ特性の定義・3 基準・3 分類とトレードオフ原則を提示する → [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 5 アーキテクチャ特性を明らかにする]] — ドメインの関心事と要件から明示的・暗黙的な特性を導く手順をシリコンサンドイッチ事例で示す → [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 6 アーキテクチャ特性の計測と統制]] — 特性を運用面・構造面・プロセス面で客観的に計測し、適応度関数で継続的に統制する → [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 7 アーキテクチャ特性のスコープ]] — 特性のスコープをシステム全体からアーキテクチャクォンタム単位へ絞る手法をコナーセンスから導く → [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 8 コンポーネントベース思考]] — モジュールの物理的表現であるコンポーネントの分類・最上位分割・発見手法を扱う ### 第 II 部 アーキテクチャスタイル(9〜18 章) 既知の設計解のカタログ。9 章で分類の枠(モノリシックか分散か、分散に固有の代償)を置き、10〜17 章が各スタイルを「トポロジー → 固有の論点 → アーキテクチャ特性の星取り評価」という共通の型で記述する。18 章がその一覧を選択の問題へ畳み直す。 → [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 9 基礎]] — モノリシックと分散の区分、および分散に固有の「分散コンピューティングの誤信」8 か条を導入する → [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 10 レイヤードアーキテクチャ]] — 層構成・層の分離・シンクホールアンチパターンと、シンプルさと低コストに振れた特性評価 → [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 11 パイプラインアーキテクチャ]] — パイプとフィルターのトポロジーと 4 種のフィルター。技術による分割でクォンタムは常に 1 → [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 12 マイクロカーネルアーキテクチャ]] — コアシステムとプラグインで拡張性を得るモノリシックなプラグイン型スタイル → [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 13 サービスベースアーキテクチャ]] — 粗粒度ドメインサービスとモノリシックなデータベースを組む、実用性の高いバランス型の分散スタイル → [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 14 イベント駆動アーキテクチャ]] — ブローカーとメディエーターの両トポロジー、非同期処理・エラー処理・データ損失防止を体系的に扱う → [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 15 スペースベースアーキテクチャ]] — 中央データベースを排しレプリケートインメモリキャッシュで高い弾力性とスケーラビリティを得る → [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 16 オーケストレーション駆動サービス指向アーキテクチャ]] — 再利用の追求が結合を生んだ歴史的失敗例として、その構造と評価を分析する → [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 17 マイクロサービスアーキテクチャ]] — 境界づけられたコンテキストを物理的なサービス分割として具現化し、再利用より重複を選ぶ → [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 18 適切なアーキテクチャスタイルを選ぶ]] — 唯一の正解を置かず、「モノリスか分散か」「データをどこに置くか」「通信を同期にするか」の決定の連鎖として選択を扱う ### 第 III 部 テクニックとソフトスキル(19〜24 章) アーキテクトが実際に何をする人かを扱う部。決定を記録する形式(ADR)、リスクを客観化する道具(リスクマトリックス・リスクストーミング)、伝達の技法、チームとの関わり方、そしてキャリアの保ち方へと、対象が成果物から人へ移っていく。 → [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 19 アーキテクチャ決定]] — 決定のアンチパターン 3 種と、アーキテクチャデシジョンレコード(ADR)の書式を実例で示す → [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 20 アーキテクチャ上のリスクを分析する]] — リスクマトリックスとリスクストーミング(特定・合意・軽減)でリスクを客観的に評価し軽減する → [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 21 アーキテクチャの図解やプレゼンテーション]] — 図解(UML・C4・ArchiMate)とプレゼンテーションを、表現の一貫性という一本の軸で扱う → [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 22 効果的なチームにする]] — アーキテクトの 3 つの個性と、統制の度合いを決める 5 要因、チームの警告サイン → [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 23 交渉とリーダーシップのスキル]] — 交渉相手ごとに異なる交渉術と、アーキテクチャの 4 つの C によるリーダーシップ → [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 24 キャリアパスを開く]] — 20 分ルールとテクノロジーレーダーで技術的な幅を保ち、カタで実践を積む ### 付録 → [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Appendix A 自己評価のためのチェックリスト]] — 全 24 章に対応する自己評価の設問群。定義・対概念の峻別・特性対応という観点が章を横断して反復する ## 影響と位置づけ 本書の主張は 1 章で提示される 2 つの法則に集約される。第一法則「ソフトウェアアーキテクチャはトレードオフがすべてである」は、アーキテクチャに唯一解が存在しないことを分野の性質として宣言するものであり、第二法則「『どうやって』より『なぜ』の方が重要である」は、決定そのものよりその根拠の記録に重心を置く。24 章の結びで再びこの結論が繰り返される。 方法論としての本書の特徴は、この「唯一解が無い」という立場を相対主義に終わらせず、比較の道具立てに変換した点にある。アーキテクチャ特性を計測可能な軸として定義し(4〜7 章)、適応度関数で継続的に統制し(6 章)、各アーキテクチャスタイルを同じ特性軸の星取り評価で並べる(10〜17 章)ことで、スタイル選択を特性の優先順位づけ問題へ還元している。18 章の選択論はこの装置の上に立つ。 16 章は本書の中で特異な位置を占める。オーケストレーション駆動サービス指向アーキテクチャを「再利用の追求が結合を生んだ」歴史的失敗として分析し、17 章のマイクロサービスが再利用より重複を選ぶ設計判断を、その反動として理解できる形に置いている。 ## 関連 - 概念: [[アーキテクチャ特性]] / [[アーキテクチャスタイル]] / [[モジュール性]] / [[マイクロサービスアーキテクチャ]] / [[疎結合のアーキテクチャ]] / [[トレードオフ意思決定]] - 実体: [[Mark Richards]] / [[Neal Ford]] / [[島田浩二]] / [[オライリー・ジャパン]] ## 出典 - Mark Richards, Neal Ford 著, 島田浩二 訳, *ソフトウェアアーキテクチャの基礎 ― エンジニアリングに基づく体系的アプローチ*, オライリー・ジャパン, 2022.