翻訳を担当した書籍『ソフトウェアアーキテクトのための意思決定術 リーダーシップ/技術/プロダクトマネジメントの活用』(インプレス)が明日2024年12月11日に発売となります。
本書は、2023年12月に出版されたSrinath Perera 著『Software Architecture and Decision-Making: Leveraging Leadership, Technology, and Product Management to Build Great Products』(Addison-Wesley Professional)の全訳となります。
著者は、Apacheのオープンソース開発者として20年以上のキャリアを持ち、Apache Axis2、Apache Airavata、WSO2(Siddhi、Choreo)といったプロダクトのアーキテクチャ策定に携わってきたソフトウェアアーキテクト、Srinath Perera氏です。
本書は、そうした豊富な経験を持つ著者が、ソフトウェアアーキテクチャにかかわる意思決定を効果的に行うために必要な知識や考え方を整理・解説した書籍です。
具体的には、ソフトウェアアーキテクチャにおける意思決定の原則や基本、そしてパフォーマンス、一貫性の保証、セキュリティ、高可用性、スケーラビリティといったソフトウェアアーキテクチャで考えるトピックごとに、知っておくべき前提、原則の適用の仕方、効果的な判断を行うために考えるべきことが学べる内容となっています。
第1章 ソフトウェアリーダーシップ入門 1.1 判断力が果たす役割 1.2 本書の目的 1.3 パート1: はじめに 1.4 パート2: 最も重要な背景 1.5 パート3: システム設計 1.6 パート4: すべてをまとめる 第2章 システム、設計、アーキテクチャを理解する 2.1 ソフトウェアアーキテクチャとは 2.2 システムを設計する方法 2.3 5つの質問 2.4 7つの原則:包括的なコンセプト 2.5 オンライン書店の設計 2.6 クラウド向けの設計 2.7 まとめ 第3章 システムパフォーマンスを理解するためのモデル 3.1 計算機システム 3.2 パフォーマンスのためのモデル 3.3 最適化のテクニック 3.4 レイテンシー最適化テクニック 3.5 パフォーマンスへの直感的な理解 3.6 意思決定における考慮事項 3.7 まとめ 第4章 ユーザーエクスペリエンス(UX)を理解する 4.1 アーキテクト向けの一般的なUXの考え方 4.2 設計のためのUXデザイン 4.3 APIのためのUXデザイン 4.4 拡張機能のためのUXデザイン 4.5 意思決定における考慮事項 4.6 まとめ 第5章 マクロアーキテクチャ:はじめに 5.1 マクロアーキテクチャの歴史 5.2 現代のアーキテクチャ 5.3 マクロアーキテクチャのビルディングブロック 5.4 意思決定における考慮事項 5.5 まとめ 第6章 マクロアーキテクチャ:コーディネーション 6.1 アプローチ1:クライアントからフローを駆動する 6.2 アプローチ2:別のサービスを利用する 6.3 アプローチ3:集中型ミドルウェアを使用する 6.4 アプローチ4:コレオグラフィを導入する 6.5 意思決定における考慮事項 6.6 まとめ 第7章 マクロアーキテクチャ:状態の一貫性の保持 7.1 なぜトランザクションなのか 7.2 なぜトランザクションを超える必要があるのか 7.3 トランザクションを超えていく 7.4 ベストプラクティス 7.5 意思決定における考慮事項 7.6 まとめ 第8章 マクロアーキテクチャ:セキュリティへの対応 8.1 ユーザー管理 8.2 相互作用のセキュリティ 8.3 ストレージ、GDPR、その他の規制 8.4 セキュリティ戦略とアドバイス 8.5 意思決定における考慮事項 8.6 まとめ 第9章 マクロアーキテクチャ:高可用性とスケーラビリティへの対応 9.1 高可用性を加える 9.2 スケーラビリティを理解する 9.3 現代のアーキテクチャのためのスケーリング:基本的なソリューション 9.4 スケーリング:取引のツール 9.5 スケーラブルなシステムの構築 9.6 意思決定における考慮事項 9.7 まとめ 第10章 マクロアーキテクチャ:マイクロサービスアーキテクチャでの考慮事項 10.1 決めること1:共有データベースの扱い 10.2 決めること2:各サービスのセキュリティ 10.3 決めること3:サービス間のコーディネーション 10.4 決めること4:依存性地獄の避け方 10.5 マイクロサービスの代替としての緩く結合されたリポジトリベースのチーム 10.6 意思決定における考慮事項 10.7 まとめ 第11章 サーバーアーキテクチャ 11.1 サービスの作成 11.2 サービスの作成におけるベストプラクティスを理解する 11.3 高度なテクニックを理解する 11.4 テクニックの実践 11.5 意思決定における考慮事項 11.6 まとめ 第12章 安定したシステムの構築 12.1 システムはなぜ障害を起こすのか。私たちはそれにどう対処できるのか 12.2 既知のエラーに対処する方法 12.3 一般的なバグ 12.4 未知のエラーに対処する方法 12.5 グレースフルグラデーション 12.6 意思決定における考慮事項 12.7 まとめ 第13章 システムの構築と進化 13.1 実際にやってみる 13.2 設計を伝える 13.3 システムを進化させる:ユーザーから学んでシステムを改善していく方法 13.4 意思決定における考慮事項 13.5 まとめ
本書を書いたモチベーションについて著者は、多くのソフトウェアアーキテクチャが知識不足ではなく判断力不足、判断の誤りによるものであるにも関わらず、ソフトウェアアーキテクチャの判断、意思決定について学ぶための書籍が十分にないことにあると語っています。
『ソフトウェアアーキテクチャ・ハードパーツ ―分散アーキテクチャのためのトレードオフ分析』(オライリージャパン)や『ソフトウェア設計のトレードオフと誤り ―プログラミングの際により良い選択をするには』(オライリージャパン)、『Facilitating Software Architecture: Empowering Teams to Make Architectural Decisions』(O'Reilly Media)など、近いモチベーションで書かれた書籍も出てきてはいるものの、確かにそうした書籍はまだまだ多くありません。
また、ADR(Architecture Decision Record)に取り組む組織も増えてきており、ソフトウェアアーキテクチャの意思決定については、ますます注目されている/重要性が増してきている状況もあります。
そうした中で、ソフトウェアアーキテクチャにかかわる意思決定についての原則や基本、全体像を、A5判304ページという比較的コンパクトな分量で学べる本書は、これからソフトウェアアーキテクチャという領域にチャレンジされる方々や、より良いアーキテクチャ上の判断を模索されている方々にとって、価値のある一冊になると考えます。
前述の類書と合わせて、本書がソフトウェア開発でより良い意思決定をしていくための一助となると幸いです。