ISBN 9784797347784
アジャイルソフトウェア開発の奥義第2版 : オブジェクト指向開発の神髄と匠の技
概要
SOLID原則とアジャイルプラクティスでOOP設計を体系化する
想定読者
OOP基礎を習得済みで、設計原則・アジャイル開発手法を実務レベルで体系的に身につけたい中級エンジニア
こんな人には向いていない
- プログラミング自体が初めてで文法やクラスの概念をまだ習得中の完全初学者(前提知識なしでは抽象度が高すぎる)
- SOLID原則を実務で日常的に適用済みで、戦略的DDDやヘキサゴナルアーキテクチャの深化を主目的としている上級者(本書の比重が原則の基礎説明寄りに感じられる)
- スクラムやカンバンの具体的な運用改善を求めている人(本書のアジャイル論はXPとコーディングプラクティスが中心であり、プロセス管理フレームワークの詳述ではない)
この本で身につくこと
- SRP・OCP・LSP・ISP・DIP の各原則が「どの設計判断でどう機能するか」を具体的なコード例とともに説明できる
- 依存性逆転(DIP)を活用して外部依存をインターフェースに封じ込め、テスト可能なモジュール構造を実装できる
- XP(エクストリームプログラミング)のプラクティス(TDD・リファクタリング・継続的インテグレーション)の目的と相互依存を理解し、日常の開発行動に結びつけられる
- GoFデザインパターンを SOLID 原則と対応させ、「なぜこのパターンが変更に強いか」を原理から語れる
- アジャイルマニフェストの12原則を具体的なコーディング・レビュー慣行に対応づけ、チームへの説明に使える
ハイライト(外部からの言及)
SOLID原則の説明が良かった記憶があります。その他にも示唆に富んでいたような記憶がありますが、読んだのがだいぶ前なのでどんな内容だったか忘れてしまいました(また読んでみます) — 出典
OOP→DDD の学習ロードマップで本書を5番目に配置した著者の率直な読書体験。「また読んでみます」の一言が、実務経験を積んだ後の再読価値を暗示しており、知識が熟成してから価値が増す書籍であることを示す
再度「アジャイルソフトウェア開発の奥義」からの引用だが、State Patternを使うことで、状態マシンのアクション部分と論理部分を強力に分離することができる(ロバート, 2004, p534) — 出典
Swift でお気に入りボタンを State Pattern 実装した記事が p534 を直接引用。本書のパターン解説が特定言語に依存せず現場コードに適用できることを、実装記事が出典として選ぶ形で実証している
S型のオブジェクトo1の各々に、対応するT型のオブジェクトo2が1つ存在し、Tを使って定義されたプログラムPに対してo2の代わりにo1を使ってもPの振る舞いが変わらない場合、SはTの派生型であると言える。 — 出典
LSP を深掘りする解説記事が本書のリスコフ置換原則の定義を一次ソースとして引用。原文の数学的厳密さが「難しくてよくわからない」と評されるほどであり、それが概念の正確な理解を求めるエンジニアが原典を参照し続ける理由となっている
読了後にできること
Before(読む前): SOLID 原則の名前は知っているが、コードレビューや設計議論でどの原則がどの問題に対処するのかを根拠立てて説明できない
After(読み終えた後): SRP・OCP・LSP の違いを具体的なコード例で説明でき、DIP を使って外部依存をインターフェースに封じ込めてテスト可能な設計を実装できる
章立て
第1章 アジャイル開発
第1部 アジャイル開発。アジャイルプラクティス・XP 概要・計画・テスト・リファクタリング・プログラミングエピソードを扱う
第2章 アジャイル設計
第2部 アジャイル設計。SOLID 原則の出発点となる本書の中核章
第3章 給与システムのケーススタディ
第3部 ケーススタディ。Command / Strategy / Facade / Singleton / Null Object 等のパターンを実装で示す
第4章 給与システムのパッケージング
第4部 パッケージ設計原則(REP / CCP / CRP / ADP / SDP / SAP)を体系化した章
第5章 気象観測所のケーススタディ
第5部 Composite / Observer / Adapter / Bridge / Proxy 等のパターン適用
第6章 ETSのケーススタディ
第6部 Visitor / State パターンとフレームワーク設計の総合演習
関連記事 / 参考情報
- 新人プログラマに正月休み中を使って読んでみてほしい技術書をセレクトしてみた。 — OOP基礎から設計原則・アジャイルまでを体系的に学ぶ書籍選定で本書を中心的な推薦図書として紹介
- [初心者向け]破滅的なクソコードを書かないために意識したい3つのこと — 悪い設計パターンを避けるための実践的指針の中で、本書の設計原則が根拠として参照されている
- オブジェクト指向プログラミングとドメイン駆動設計を学ぶのに適切な書籍とおすすめの読む順番 — OOP→DDD の学習ロードマップで本書を SOLID 原則の一次ソースとして明示的に位置づけ
- DDD関連書籍メモ — DDD を学ぶ文脈で本書を設計原則の基盤書として参照するブックリスト
- オレオレ技術書ロードマップ(ゲームプログラマ編) — ゲーム開発者向けの技術書ロードマップで、本書が OOP 習得後の中間ステップとして組み込まれている
- 【SOLID】リスコフの置換原則を完全に理解したい — LSP を徹底解説する記事で本書を定義・動機の出典として明示的に引用
- SOLID原則のまとめ — SOLID 5原則を整理した記事で各原則の理解の出典として本書が参照されている
- アジャイル開発の理念と目的について — アジャイル開発の理念を解説する記事で本書のアジャイル側の論点が背景として参照されている
学習のヒント
- SOLID 原則の各章(SRP → OCP → LSP → ISP → DIP の順)が本書の核心であり、複数の Qiita 記事がこの部分を出典として引用している。アジャイル開発の概論部分は後回しにして原則章を先に読んでも理解できる構成になっており、設計改善が急務な読者はそこから入るのが実用的
- OOP → DDD のロードマップ上での本書の位置は「中間地点」。SOLID 原則と DIP を本書で固めてから DDD 本(エリック・エヴァンス等)に進むと、リポジトリパターンや境界づけられたコンテキストの依存関係議論が腑に落ちやすい。複数の記事がこの順序を推奨している
- GoF パターン章は、特定言語の実装記事(Swift の State パターン、PHP の Singleton 等)が本書を出典として引用していることから、言語を問わず設計の動機を理解するための原典として有効。自分の主言語でコードを書き直しながら読むと定着が早い
- 2008年出版のため、ビルドツールや CI 環境の具体的な記述は現在の開発環境と乖離している箇所がある。アジャイルプラクティスの「意図」を掴む読み方をし、具体的なツール選定は最新ドキュメントで補完するのが現実的
前提知識
- クラス・継承・インターフェースを使ったオブジェクト指向コードを一度でも書いた経験
- ユニットテストの概念(何を検証するのか)をなんとなく理解している
- チームでのコードレビューやリファクタリングを経験しており、「なぜこの設計は変更に弱いのか」を考えたことがある
次に読む本
Clean Architecture
本書で SOLID 原則を習得した後、システム全体の依存関係をどう整理するかを Uncle Bob 自身が体系化した発展書。DIP の考え方がシステム境界の設計に拡張される
ドメイン駆動設計(エリック・エヴァンス)
複数の Qiita 記事が本書 → DDD という学習ロードマップを推奨。SOLID 原則と DIP を固めてから読むとリポジトリパターンや集約設計の議論が理解しやすい
リファクタリング 第2版(マーチン・ファウラー)
本書が SOLID 原則と XP プラクティスの理論・動機を体系化しているのに対し、『リファクタリング 第2版』は既存コードを安全に改善する具体的カタログを提供する。設計原則を「知っている」から「コードで実践できる」へ移行する段階で参照するのが読む順序として合理的
出版社による内容紹介
ソフトウェア開発の原則・デザインパターン・プラクティス完全統合。すべての悩めるプログラマのための処方箋。Software Development誌Jolt Award受賞作。
この本がどの学習段階で役立つかは、 関連する ロードマップ から確認できます。