はじめに
前回の記事(第1章)では、「アーキテクチャとは何か」「アーキテクトとはどんな役割か」を整理し、アーキテクチャを後から変更しづらい重要な決定の集合として再定義しました。
第2章では、その「判断の枠組み」をベースに、より実践的な アーキテクチャ思考(Architectural Thinking) を掘り下げていきます。
アーキテクトとして意思決定を行うためには、単に設計や技術に精通するだけでなく、
「どのレベルで考え」「どんなトレードオフを理解し」「ビジネスの背景とどう結びつけるか」を意識する必要があります。
📖ソフトウェアアーキテクチャの基礎
本書は、O’Reilly Media から出版された『Fundamentals of Software Architecture: An Engineering Approach』 の日本語版です。著者の Mark Richards と Neal Ford が、アーキテクチャを工学的視点から捉え直し、理論と実務を橋渡しする知見をまとめた一冊です。
https://www.oreilly.co.jp/books/9784873119823/
目次(全24章)
1章 イントロダクション
1.1 ソフトウェアアーキテクチャの定義1.2 アーキテクトへの期待
1.2.1 アーキテクチャ決定を下す
1.2.2 アーキテクチャを継続的に分析する
1.2.3 最新のトレンドを把握し続ける
1.2.4 決定の順守を徹底する
1.2.5 さまざまなものに触れ、経験している
1.2.6 事業ドメインの知識を持っている
1.2.7 対人スキルを持ち合わせている
1.2.8 政治を理解し、かじ取りをする
1.3 アーキテクチャと交わるもの
1.3.1 エンジニアリングプラクティス
1.3.2 運用とDevOps
1.3.3 プロセス
1.3.4 データ
1.4 ソフトウェアアーキテクチャの法則
第I部 基礎
2章 アーキテクチャ思考
2.1 アーキテクチャと設計2.2 技術的な幅
2.3 トレードオフを分析する
2.4 ビジネスドライバーを理解する
2.5 アーキテクティングとコーディングのバランスを取る
3章 モジュール性
3.1 定義3.2 モジュール性の計測
3.2.1 凝集度
3.2.2 結合度
3.2.3 抽象度、不安定度、主系列からの距離
3.2.4 主系列からの距離
3.2.5 コナーセンス
3.2.6 結合度とコナーセンスのメトリクスを統合する
3.3 モジュールからコンポーネントへ
4章 アーキテクチャ特性
4.1 アーキテクチャ特性の(部分的な)リスト4.1.1 アーキテクチャの運用特性
4.1.2 アーキテクチャの構造特性
4.1.3 アーキテクチャの横断的特性
4.2 トレードオフと少なくとも最悪でないアーキテクチャ
5章 アーキテクチャ特性を明らかにする
5.1 アーキテクチャ特性をドメインの関心事から捉える5.2 要件からアーキテクチャ特性を抽出する
5.3 事例:シリコンサンドイッチ
5.3.1 明示的な特性
5.3.2 暗黙的な特性
6章 アーキテクチャ特性の計測と統制
6.1 アーキテクチャ特性の計測6.1.1 運用面の計測
6.1.2 構造面の計測
6.1.3 プロセス面の計測
6.2 統制と適応度関数
6.2.1 アーキテクチャ特性の統制
6.2.2 適応度関数
7章 アーキテクチャ特性のスコープ
7.1 結合とコナーセンス7.2 アーキテクチャ量子と粒度
7.2.1 事例:Going、Going、Gone
8章 コンポーネントベース思考
8.1 コンポーネントの分類8.2 アーキテクトの役割
8.2.1 アーキテクチャの分割
8.2.2 事例:シリコンサンドイッチにおける分割
8.3 開発者の役割
8.4 コンポーネントを識別する流れ
8.4.1 初期コンポーネントを識別する
8.4.2 コンポーネントに要件を割り当てる
8.4.3 ロールや責務を分析する
8.4.4 アーキテクチャ特性を分析する
8.4.5 コンポーネントを再構成する
8.5 コンポーネントの粒度
8.6 コンポーネント設計
8.6.1 コンポーネントの発見
8.7 事例:「Going、Going、Gone」におけるコンポーネントの発見
8.8 アーキテクチャ量子再び:モノリシックアーキテクチャと分散アーキテクチャの選択
第II部 アーキテクチャスタイル
9章 基礎
9.1 基礎的なパターン9.1.1 巨大な泥団子
9.1.2 ユニタリーアーキテクチャ
9.1.3 クライアント/サーバー
9.2 モノリシックアーキテクチャと分散アーキテクチャ
9.2.1 誤信1:ネットワークは信頼できる
9.2.2 誤信2:レイテンシーがゼロ
9.2.3 誤信3:帯域幅は無限
9.2.4 誤信4:ネットワークは安全
9.2.5 誤信5:トポロジーは決して変化しない
9.2.6 誤信6:管理者は一人だけ
9.2.7 誤信7:転送コストはゼロ
9.2.8 誤信8:ネットワークは均一
9.2.9 分散コンピューティングにおけるその他の考慮事項
10章 レイヤードアーキテクチャ
10.1 トポロジー10.2 層の分離
10.3 レイヤーの追加
10.4 その他の考慮事項
10.5 このアーキテクチャスタイルを採用する理由
10.6 アーキテクチャ特性の評価
11章 パイプラインアーキテクチャ
11.1 トポロジー11.1.1 パイプ
11.1.2 フィルター
11.2 事例
11.3 アーキテクチャ特性の評価
12章 マイクロカーネルアーキテクチャ
12.1 トポロジー12.1.1 コアシステム
12.1.2 プラグインコンポーネント
12.2 レジストリ
12.3 コントラクト
12.4 事例とユースケース
12.5 アーキテクチャ特性の評価
13章 サービスベースアーキテクチャ
13.1 トポロジー13.2 トポロジーの種類
13.3 サービスの設計と粒度
13.4 データベース分割
13.5 アーキテクチャ例
13.6 アーキテクチャ特性の評価
13.7 このアーキテクチャスタイルがふさわしいとき
14章 イベント駆動アーキテクチャ
14.1 トポロジー14.2 ブローカー
14.3 メディエーター
14.4 非同期の能力
14.5 エラー処理
14.6 データロスの防止
14.7 ブロードキャスト能力
14.8 リクエスト・リプライ
14.9 リクエストベースとイベントベースの間を取る
14.10 ハイブリッドなイベント駆動アーキテクチャ
14.11 アーキテクチャ特性の評価
15章 スペースベースアーキテクチャ
15.1 一般的なトポロジー15.1.1 処理ユニット
15.1.2 仮想ミドルウェア
15.1.3 データポンプ
15.1.4 データライター
15.1.5 データリーダー
15.2 データ衝突
15.3 クラウドとオンプレミス
15.4 レプリケーションキャッシュと分散キャッシュ
15.5 ニアキャッシュの考慮
15.6 実装例
15.6.1 コンサートチケット販売システム
15.6.2 オンラインオークションシステム
15.7 アーキテクチャ特性の評価
16章 オーケストレーション駆動サービス指向アーキテクチャ
16.1 歴史と哲学16.2 トポロジー
16.3 分類
16.3.1 ビジネスサービス
16.3.2 エンタープライズサービス
16.3.3 アプリケーションサービス
16.3.4 インフラストラクチャサービス
16.3.5 オーケストレーションエンジン
16.3.6 メッセージフロー
16.4 再利用...と結合
16.5 アーキテクチャ特性の評価
17章 マイクロサービスアーキテクチャ
17.1 歴史17.2 トポロジー
17.3 分散
17.4 境界づけられたコンテキスト
17.4.1 粒度
17.4.2 データ分離
17.5 API層
17.6 運用面での再利用
17.7 フロントエンド
17.8 通信
17.8.1 コレオグラフィとオーケストレーション
17.8.2 トランザクションとサーガ
17.9 アーキテクチャ特性の評価
17.10 参考文献
18章 適切なアーキテクチャスタイルを選ぶ
18.1 アーキテクチャにおけるトレンドの変遷18.2 判断基準
18.3 モノリスの事例:シリコンサンドイッチ
18.3.1 モジュラーモノリス
18.3.2 マイクロカーネル
18.4 分散型のケーススタディ:Going、Going、Gone
第III部 テクニックとソフトスキル
19章 アーキテクチャ決定
19.1 アーキテクチャ決定に関するアンチパターン19.1.1 資産防御アンチパターン
19.1.2 グラウンドホッグデーアンチパターン
19.1.3 メール駆動アーキテクチャアンチパターン
19.2 アーキテクチャ上重要なもの
19.3 アーキテクチャデシジョンレコード
19.3.1 基本構造
19.3.2 ADRを保存する
19.3.3 ドキュメントとしてのADR
19.3.4 標準のためにADRを用いる
19.3.5 事例
20章 アーキテクチャ上のリスクを分析する
20.1 リスクマトリックス20.2 リスクアセスメント
20.3 リスクストーミング
20.3.1 特定
20.3.2 合意
20.3.3 軽減
20.4 ユーザーストーリーリスク分析
20.5 リスクストーミング例
20.5.1 可用性
20.5.2 弾力性
20.5.3 セキュリティ
21章 アーキテクチャの図解やプレゼンテーション
21.1 図解21.1.1 ツール
21.1.2 標準ダイアグラム:UML、C4、ArchiMate
21.1.3 図解ガイドライン
21.2 プレゼンテーション
21.2.1 時間を操る
21.2.2 段階的な構築
21.2.3 インフォデッキとプレゼンテーション
21.2.4 スライドは物語の半分
21.2.5 不可視化
22章 効果的なチームにする
22.1 チーム境界22.2 アーキテクトのパーソナリティ
22.2.1 コントロールフリーク
22.2.2 アームチェアアーキテクト
22.2.3 効果的なアーキテクト
22.3 どうやって管理する?
22.4 チームの警告サイン
22.5 チェックリストの活用
22.5.1 開発者のコード完成チェックリスト
22.5.2 ユニットテストと機能テストのためのチェックリスト
22.5.3 ソフトウェアリリースのためのチェックリスト
22.6 ガイダンスの提供
22.7 まとめ
23章 交渉とリーダーシップのスキル
23.1 交渉とファシリテーション23.1.1 ビジネスステークホルダーとの交渉
23.1.2 他のアーキテクトとの交渉
23.1.3 開発者との交渉
23.2 リーダーとしてのソフトウェアアーキテクト
23.2.1 アーキテクチャの4つのC
23.2.2 プラグマティックでありながらもビジョナリーであること
23.2.3 手本を示してチームをリードする
23.3 開発チームに溶け込む
23.4 まとめ
24章 キャリアパスを開く
24.1 20分ルール24.2 パーソナルレーダーの開発
24.2.1 ThoughtWorksテクノロジーレーダー
24.2.2 オープンソースのビジュアライゼーションビット
24.3 ソーシャルメディアの使用
24.4 別れの挨拶
付録A 自己評価のためのチェックリスト
参考文献
訳者あとがき
索引
関連書籍
第2章アーキテクチャ思考を読む
今回は、 第2章「アーキテクチャ思考」 を要約・紹介したものになります。
特に本章では、次のような問いに焦点が当てられています。
- 設計(Design)とアーキテクチャの違いとは何か?
- 技術的な「深さ」と「幅」をどうバランスさせるか?
- 技術選定におけるトレードオフをどう見極めるか?
- なぜビジネスドライバーが重要なのか?
これらを理解することで、単なる“設計者”から“判断できるアーキテクト”へと視座を上げることができます。
アーキテクチャにおける重要なトレードオフを理解するには、
開発者は コンポーネント、モジュール性、結合、コナーセンス に関する基本的な概念を
正しく理解しておく必要があります。(p.57)
次章以降で扱うモジュール性やアーキテクチャスタイルを読み解く前提として、
この「アーキテクチャ思考」をしっかり押さえておきましょう!!
2.1 アーキテクチャと設計の違い
ソフトウェアアーキテクチャと設計(デザイン)は、明確に線を引けるものではありません。
両者は連続的な関係にあり、違いは「粒度と影響範囲」にあります。
観点 | アーキテクチャ | 設計 |
---|---|---|
意思決定の粒度 | システム全体・構成要素間の関係 | モジュールやクラス単位の内部構造 |
影響範囲 | 広い(システム全体・チーム横断) | 狭い(ローカルなコンポーネント内) |
変更コスト | 高い(後から変更が難しい) | 比較的低い(リファクタリングで修正可能) |
主な目的 | システムの構造を定義し、トレードオフを管理する | 実装を効率化し、コード品質を高める |
成果物 | コンポーネント図、通信モデル、依存関係の設計 | クラス図、関数設計、コード |
アーキテクチャは「後から変更しづらい重要な決定の集合」であり、
システムの方向性や制約を形づくるものです。
一方、設計は「アーキテクチャを具現化するための詳細な工夫」と言えます。
🔍 例
- アーキテクチャ決定:サービス間通信を非同期メッセージングで行う
- 設計レベルの選択:Kafkaを使うか、RabbitMQを使うか
つまり、アーキテクトは「何を実現するために、どのような構造を採るのか」を定め、
開発者はその構造の中で「どう実装するか」を設計します。
⚖️ 両者の境界は状況依存
現実のプロジェクトでは、「アーキテクト」と「開発者」の責務の境界線は流動的です。
たとえばマイクロサービスアーキテクチャのように、各チームが独立して開発・運用を行う場合、
設計レベルの判断(DB選択、通信方式など)がチーム単位のアーキテクチャ決定になることもあります。
このように「アーキテクチャと設計」は分離して考えるよりも、
異なるスケールでの意思決定として捉えるのが実践的です。
✅ 要点まとめ
・ アーキテクチャは「構造と制約」を定義する。・ 設計は「その構造を具現化するための具体的な方法」を定める。
・ 両者の境界は固定的ではなく、組織や開発スタイルによって変わる。
・ トレードオフの意識を持ち、どこまでをアーキテクチャとして扱うかを明確にすることが重要。
2.2 技術的な深さと技術的な幅(Technical Breadth & Depth)
アーキテクトに求められるスキルセットは、単なる技術力ではありません。
本章では「技術的な深さ(Depth)」と「技術的な幅(Breadth)」のバランスをどう取るかが解説されています。
↕ 技術的な深さ(Depth)
特定の技術領域をどれだけ深く理解しているかを指します。
例えば、次のような力が「深さ」に該当します。
- 1つのプログラミング言語やフレームワークを極めている
- パフォーマンスチューニングやメモリ構造など、低レイヤの挙動を把握している
- 特定分野(例:AI、クラウド、セキュリティ、DB設計)の専門家として周囲をリードできる
技術的な深さは、チームの信頼を得るために欠かせません。
ただし、アーキテクトにとっては「深さ」だけでは不十分です。
深すぎる専門性は、他領域とのトレードオフを見失うリスクをはらんでいます。
↔ 技術的な幅(Breadth)
一方で「幅」は、複数の技術スタックやアプローチを俯瞰的に理解し、
どの技術を、どの状況で選ぶべきかを判断できる力 を意味します。
- REST / gRPC / メッセージングの違いを理解し、最適な通信方式を選べる
- クラウド / オンプレ / エッジなどの構成を比較して判断できる
- チームの規模・文化・納期に合わせて適切な技術を導ける
幅を広げることは「トレードオフを理解する力」を高めることにつながります。
深さが“専門家としての強み”なら、幅は“アーキテクトとしての判断軸”です。
⚖️ 深さと幅のバランス
書籍では、次のような比喩が紹介されています。
「アーキテクトは、深さのある開発者が幅を広げていく存在である」
つまり、アーキテクトは“スペシャリスト”から“ゼネラリスト”へ移行するのではなく、
深さの土台を維持したまま、横方向に知識を広げていく ことが求められます。
(※図例:「わかっていること」が技術的な深さで、「わかっていること」と「わかっていないとわかっていること」の量
が技術的な幅)
🧭 実践的なアドバイス
- 深さ:1〜2分野で「誰よりも詳しい」と言える領域を持つ
- 幅:他の技術を理解し、選択の根拠を説明できる 程度の知識を持つ
- 定期的に「自分の技術レーダー」を更新し、古くなった知識をアップデートする
(例:ThoughtWorks Technology Radar など)
💡 アーキテクトの武器は「技術」そのものではなく、
「状況に応じて最適な技術を選べる判断力」である。
✅ 要点まとめ
・ 深さ=専門知識、幅=俯瞰力・ どちらか一方ではなく、両者のバランスがアーキテクトの価値
・ 技術トレンドを追うだけでなく、**「なぜそれを選ぶのか」** を説明できることが重要
2.3 ソリューションと技術のトレードオフ
アーキテクトの最も重要な責務のひとつが、トレードオフの理解と判断 です。
すべての設計には「何かを得るために何かを犠牲にする」バランスが存在します。
どんなに優れたアーキテクチャも万能ではなく、選択には常にコストが伴います。
⚖️ トレードオフとは何か
トレードオフとは、2つ以上の相反する要求のバランスを取る行為
(例:スケーラビリティ vs 一貫性、パフォーマンス vs 柔軟性)
たとえば、
- マイクロサービス を採用すればスケーラビリティは向上するが、分散トランザクションや監視の複雑性が増す
- 単一データベース構成 は一貫性を保ちやすいが、スケールアウトが難しくなる
- キャッシュの導入 は高速化につながるが、データ整合性のリスクが生じる
どのアプローチにも「副作用」があり、アーキテクトはそれを理解した上で判断しなければなりません。
🧩 技術そのものより「目的」に着目する
本書では「技術を選ぶ前に、解決したい課題を明確にすること」の重要性が強調されています。
目的が曖昧なまま技術を選択すると、トレードオフを見誤る。
たとえば、「イベント駆動アーキテクチャを採用したい」という発想から始めるのではなく、
「疎結合な非同期通信が必要」という課題から考えるべきです。
技術はあくまで手段であり、アーキテクチャは目的を実現するための最適化の結果であることを忘れてはいけません。
🧠 トレードオフを分析する3つの観点
観点 | 内容 | 例 |
---|---|---|
技術的観点 | パフォーマンス、スケーラビリティ、信頼性など | クラウドネイティブ化による冗長性の向上 |
運用的観点 | デプロイ容易性、監視、保守コストなど | CI/CD導入による継続的改善の促進 |
ビジネス的観点 | ROI、開発スピード、リスク許容度など | MVP優先による短期リリース戦略 |
アーキテクトは、これら3つのレイヤーを横断して判断します。
技術だけでなく、「誰の課題を、どの時間軸で解決するか」 を明確にすることがカギです。
💬 例:REST vs gRPC のトレードオフ
要素 | REST | gRPC |
---|---|---|
パフォーマンス | やや低い(テキストベース) | 高い(バイナリ通信) |
可読性 | 高い(JSONベース) | 低い(Protocol Buffers) |
ブラウザ互換性 | 高い | 低い |
適用例 | 公開API、外部連携 | 内部マイクロサービス通信 |
どちらが「優れているか」ではなく、どの状況に適しているか で判断するのがアーキテクトの思考です。
🧭 実践:トレードオフを可視化する
トレードオフをチーム全体で共有するには、アーキテクチャ決定記録(ADR: Architecture Decision Record) の活用が効果的です。
ADRには以下を記載します。
- 決定した内容(Decision)
- 背景・根拠(Context)
- 採用しなかった選択肢(Alternatives)
- 想定される影響(Consequences)
これにより、時間が経っても「なぜその決定をしたのか」が明確に残ります。
✅ 要点まとめ
・ トレードオフは「技術的正しさ」ではなく「状況への最適化」・ 技術は目的ではなく手段
・ アーキテクトは、技術・運用・ビジネスの3つのレイヤーで意思決定を行う
・ ADRなどを活用して、決定と背景をドキュメント化する
2.4 ビジネスドライバーの重要性
アーキテクチャを設計する上で、最も過小評価されがちな要素が「ビジネスドライバー」です。
多くの技術的意思決定は、実はビジネス上の目的や制約から派生しています。
そのため、アーキテクトは「なぜこのシステムを作るのか?」という問いに、技術の言葉ではなくビジネスの言葉で答えられなければなりません。
💡 ビジネスドライバーとは?
ビジネスドライバー(Business Driver) とは、
企業やプロジェクトの目的・戦略・制約を定義する要素であり、
アーキテクチャ上の意思決定に直接影響を与える要因のこと。
具体的には、次のような要素が該当します。
カテゴリ | 例 |
---|---|
市場要因 | リリーススピード、競合との差別化、顧客満足度 |
コスト要因 | 初期投資、運用コスト、ROI(投資対効果) |
リスク要因 | 法規制、セキュリティ、可用性、技術的負債 |
組織要因 | チーム構成、スキルセット、運用体制 |
これらの要素は、技術選定やアーキテクチャスタイルの選択に大きく関わってきます。
⚙️ 技術的判断はビジネス判断の延長にある
アーキテクチャの優劣を「技術的に正しいかどうか」で測るのは誤りです。
本当に重要なのは「ビジネス上の目標をどれだけ支援できるか」です。
たとえば──
- スタートアップでは「リリーススピード」が最重要 ⇒ モノリスが最適
- 大規模企業では「チーム独立性」と「スケーラビリティ」 ⇒ マイクロサービスが適切
- 金融や医療では「監査性」「堅牢性」 ⇒ レイヤードアーキテクチャが有効
このように、どのアーキテクチャが優れているか ではなく、
どのアーキテクチャがビジネスドライバーに合っているか が焦点になります。
🧭 アーキテクトの役割:ビジネスと技術の橋渡し
アーキテクトは「技術の専門家」であると同時に、「ビジネスの翻訳者」でもあります。
経営層やプロダクトマネージャーの言葉を理解し、それを技術的決定に変換する力が求められます。
アーキテクトの最終的な目的は、
技術を導入することではなく、ビジネスを成功させることである。
ビジネス要件を理解せずに「スケーラブルなアーキテクチャを採用した」としても、
それが実際の目的(短期リリース、運用コスト削減など)に反していれば意味がありません。
💬 具体例:ECサイトを例に考える
ビジネスドライバー | 技術的判断 |
---|---|
1年以内にサービスをリリースしたい | 開発速度を重視し、モノリシック構成を選択 |
毎月のキャンペーンで一時的にアクセスが急増する | キャッシュ戦略やスケールアウト対応を設計 |
決済の信頼性を最優先にしたい | トランザクション整合性を担保した分散DB構成 |
このように、アーキテクチャの判断は常にビジネスの文脈の中で行われるべきです。
🧩 補足:ビジネスドライバーを特定する質問
アーキテクトとしてプロジェクトに入る際、次の質問をすると効果的です:
- このシステムの最も重要な成功指標(KPI)は何か?
- 「失敗した」と言えるのはどんな状況か?
- 技術的品質とビジネス目標、どちらを優先すべき局面はどこか?
これらを通して、アーキテクチャの方向性をビジネスに沿わせることができます。
✅ 要点まとめ
・ ビジネスドライバーは、アーキテクチャの“根本的な目的”を定義する。 ・ 技術選定は目的ではなく手段。優れたアーキテクトは「ビジネスを理解する技術者」。 ・ どの設計が“良い”かではなく、“どのビジネスに合っているか”を判断軸にする。 ・ ビジネスドライバーを明確にすることで、技術のトレードオフ判断が明確になる。2.5 アーキテクティングとコーディングのバランス
アーキテクトは、設計と実装の“どこまで”に関わるべきか?
この問いは多くの現場で議論になります。
本章では「アーキテクトはコードを書くべきか?」というテーマに対して、
「バランスを取ることが重要」という立場から整理されています。
⚙️ アーキテクトはコードを書くべきか?
結論から言うと、Yes – ただし目的を持って書くべき です。
コードを書くことには以下のような利点があります。
- 現場の技術的課題を“肌感覚”で理解できる
- チームとの信頼関係を築ける
- 設計と実装の乖離を防げる
- 新技術やライブラリの実用性を実際に検証できる
「アーキテクトがコードを書かないと、設計は理想論になりがち」
というのは、現場でよく聞く言葉です。
一方で、アーキテクトが実装にのめり込みすぎると、
チーム全体を俯瞰し、アーキテクチャ上の課題に気づく視野を失うリスクがあります。
🧩 コーディングとアーキテクティングのバランス
書籍では、アーキテクトの役割を 「ガイドする人」 として定義しています。
つまり、自らすべてを実装するのではなく、方向性を示し、チームを導くこと が主な責務です。
バランス | 説明 | 落とし穴 |
---|---|---|
手を動かしすぎるアーキテクト | 現場感はあるが、全体設計が後回しになる | 短期的最適化に陥る |
手を動かさないアーキテクト | 戦略的視野はあるが、現実との乖離が生まれる | チームとの信頼を失う |
理想的なアーキテクト | 必要な範囲で実装し、技術的判断の根拠を現場から得る | 視野と実践の両立 |
アーキテクトの価値は「コードを書くこと」ではなく、
コードを書くことで得た洞察を設計判断に活かすこと にあります。
🧠 “現場で設計を磨く”という姿勢
アーキテクトは、ホワイトボード上で図を描くだけの存在ではありません。
現場に入り、チームと一緒にコードを読み、テストを走らせ、パフォーマンスを確認し、
そこから見える課題をアーキテクチャ改善にフィードバックしていくことが求められます。
このようにして、アーキテクチャは“理論”から“実践知”へと磨かれていきます。
💡 実践ヒント
- スプリントの中で、週に1日は開発タスクに関わる
- チームレビューに定期的に参加し、設計と実装のギャップを確認する
- PoC(概念実証)レベルのコードを自ら試すことで、新技術を安全に評価する
- ただし、実装に深入りしすぎて「ボトルネック」にならない よう注意する
「アーキテクトがコードを書かなくなると、判断のリアリティを失う。
だが、コードしか書かなくなると、アーキテクトではなくなる。」
✅ 要点まとめ
・ アーキテクトは「設計と実装の橋渡し役」 ・ コードを書くことは目的ではなく、理解と信頼のための手段 ・ 現場で得た知見を設計に還元し、理論と実践を循環させることが重要 ・ “手を動かす知性”を持つアーキテクトこそ、チームを導ける存在になるまとめ
第2章「アーキテクチャ思考」では、アーキテクトがどのように“考え”、どのように“判断”すべきかが体系的に整理されています。
単なる設計ノウハウではなく、「どの視点で意思決定を行うか」というアーキテクトの思考様式そのものがテーマです。
本章を通して見えてきた重要なポイントを整理すると──
-
アーキテクチャと設計の違い:
設計は「どう実装するか」、アーキテクチャは「何を実現する構造にするか」。
両者は階層的に関係し、明確な境界は状況によって変わる。 -
技術的な深さと幅のバランス:
深さ(専門性)を土台に、幅(俯瞰力)を広げることでトレードオフを理解できる。
アーキテクトは「全方位の浅知識」ではなく、「深さのある俯瞰者」である。 -
トレードオフを理解する力:
技術選定に“正解”はなく、常に利点と代償が存在する。
アーキテクトの価値は「どの条件下で、何を優先すべきか」を判断すること。 -
ビジネスドライバーを起点に考える:
技術の選択はビジネスの目的を支援するための手段。
「なぜこの技術を選ぶのか」を、ビジネスの言葉で説明できることが重要。 -
アーキテクトとコーディングのバランス:
コードを書くことは目的ではなく、現場との対話手段。
理論と実践を往復し、設計判断のリアリティを保つことが求められる。
終わりに
第1章では「アーキテクチャとは何か」を再定義しましたが、
第2章では「アーキテクトはいかに考えるべきか」が描かれています。
ここで描かれるアーキテクト像は、“正しい答えを知る人”ではなく、“正しい質問を投げかけられる人” です。
トレードオフを理解し、ビジネスを踏まえて技術を選び、チームと共に最適な解を導く。
そのための思考フレームが、この章で示された「アーキテクチャ思考」です。
“アーキテクトとは、システムの技術的健康を守る医師であり、
組織の未来を見据える航海士である。”
次章(第3章「モジュール性」)では、この思考を実際の設計構造に落とし込み、
凝集度・結合度・コナーセンス(共変関係) といった概念を通して、
「良いアーキテクチャとは何か」をより具体的に掘り下げていきます。
第2章までで、ようやく“地図🗺”が描けました。
ここからは、その地図を片手に、いよいよアーキテクチャの構造そのものへと踏み込んでいきましょう!!