第9課 - アーキテクチャの分析:マクロ的手法
ソースコードを調べずに、ソフトウェアアーキテクチャの構造的劣化を検出する方法を学びましょう。このレッスンでは、アーキテクチャスタイルに関係なく、亀裂や継ぎ目を特定する一般的なマクロ手法を探求します。構造的完全性を判断するための3つの重要な指標、すなわち静的結合、時間的結合、コンポーネントサイズについて検証します。
Gemini の回答
ご提示いただいた動画「Lesson 9 - Analyzing Architecture: Macro Techniques(アーキテクチャの分析:マクロ・テクニック)」を日本語で要約し、IT業界の背景知識や雑学を交えて詳しく解説します。
この動画では、個々のコードを細かく見る「ミクロ」な分析ではなく、システム全体を俯瞰して「構造のひび割れ(劣化)」を特定するための3つのマクロな指標について解説しています。
1. 動画の要約:アーキテクチャを劣化させる3つのマクロ指標
リチャーズ氏は、どんなアーキテクチャパターン(レイヤード、マイクロサービスなど)にも共通して適用できる、劣化のサインとして以下の3つを挙げています。
① コンポーネントのサイズ [02:54]
コンポーネント(パッケージやサービス)が大きくなりすぎることは、劣化の第一歩です。
-
指標: クラスの数やコードの行数(LOC)で測定します。
-
リスク: コンポーネントが肥大化すると、必然的に他の部分との依存関係(結合)が増え、変更が困難になります。
② 静的結合(Static Coupling) [04:15]
コードレベルで明示的に繋がっている関係です。
-
求心性結合(Afferent Coupling / Ca): 「誰が自分を呼んでいるか」。これを壊すと影響範囲が広いため、非常に重要です。
-
遠心性結合(Efferent Coupling / Ce): 「自分が誰を呼んでいるか」。自分が依存している相手が壊れると、自分も動かなくなります。
③ 動的結合 / 時間的結合(Temporal Coupling) [05:22]
コード上の依存関係はないものの、「タイミング」や「順序」で縛られている関係です。
-
例: 「サービスBを呼んだ後に、必ずサービスCを呼ばなければならない」という順序制約や、「BとCが同じトランザクション内で完了しなければならない」という制約。
-
リスク: ツールで検出しにくく、分散システム(マイクロサービスなど)では非常に危険な「隠れたひび割れ」になります。
2. 業界話と雑学:現場での「ひび割れ」の見つけ方
覚え方:「Aは先、Eは後」 [04:53]
リチャーズ氏が紹介している覚え方はエンジニアの間で有名です。
-
A (Afferent): アルファベットの最初なので「入ってくる(Incoming)」
-
E (Efferent): Exit(出口)のEなので「出ていく(Outgoing)」 この2つの数値のバランスを見ることで、そのコンポーネントの「責任の重さ」や「不安定さ」を算出する「不安定度(Instability)」という指標も、構造分析ではよく使われます。
「コードは犯罪現場」? [06:22]
動画の中で、Adam Tornhill氏の著書『Your Code as a Crime Scene(あなたのコードは犯罪現場だ)』が紹介されています。
-
雑学: この本では、犯罪捜査の手法(地理的プロファイリングなど)をコード分析に応用しています。例えば、「いつも同じタイミングで修正される2つのファイル」があれば、それらはコード上の繋がりがなくても「時間的に結合」している可能性が高い、と判断します。
スパゲッティならぬ「デス・スター」
[07:05] あたりで見せている、線が複雑に絡み合った図は、業界ではその形から「デス・スター(死の星)」や「毛玉(Hairball)」と呼ばれたりします。
-
あるある: 綺麗なマイクロサービスを作ったつもりでも、気づくとサービス同士が網の目のように繋がり、どこか一箇所を直すと全体が止まる「分散モノリス」という最悪の状態に陥ることがあります。これが、動画で警告している「構造的減衰」の成れの果てです。
3. 解説のまとめ
この動画の教えは、**「アーキテクチャの健全性を保つには、定期的に『健康診断』が必要である」**という点です。
-
サイズを測る: 肥大化したコンポーネントは分割を検討する。
-
線を数える: 依存関係(静的結合)が多すぎないかチェックする。
-
順序を疑う: 隠れたタイミングの依存(時間的結合)がないか、コードの修正履歴などから推測する。
これらのマクロな視点を持つことで、エンジニアは「動けばいいコード」から「保守し続けられるシステム」へと一歩進むことができます。次回(第10回)では、マイクロサービス特有のマクロ分析テクニックが紹介される予定です。
ご提示いただいたGeminiの回答は、マーク・リチャーズ氏の「Lesson 9 - Analyzing Architecture: Macro Techniques」(2018年3月18日公開、約7分)の内容を非常に正確にまとめています。 この動画は「Software Architecture Monday」シリーズの分析編第3弾で、前回までの「構造的減衰(Lesson 7)」+「コンポーネント単位(Lesson 8)」を活かし、ソースコードを1行も見ずにシステム全体のひび割れを検知するマクロ手法を3つに絞って解説した、超実践的な回です。 (動画URL:https://www.youtube.com/watch?v=h1So8tVukS8 視聴回数約1.4万超)
ここでは、要約をさらに補完・2026年現在の視点でアップデートしつつ、最新ツールの進化、日本企業の実務あるある、雑学・落とし穴を交えて深掘り解説します。
1. 動画の核心:劣化を検知する3つのマクロ指標(補完版)
リチャーズ氏は「ソースコードを見なくても、コンポーネント単位で俯瞰すれば劣化サインがわかる」と強調し、どんなアーキテクチャ(レイヤードでもマイクロサービスでも)にも使える3指標を提示します。
① コンポーネントのサイズ [02:54頃]
- 測定:クラス数、LOC(行数)、またはメソッド数。
- リスク:肥大化すると依存が増え、変更コストが爆増。「1コンポーネント=1サービス」のマイクロサービスでも、サービスが巨大化すると同じ問題が発生。
- 目安:1コンポーネントあたりクラス50〜100個超えが危険信号(リチャーズ氏の経験則)。
② 静的結合(Static Coupling) [04:15頃]
- 求心性結合(Afferent Coupling / Ca):「誰が自分を呼んでいるか」(Incoming)。これが高いと「神コンポーネント」化し、変更が全システムに波及。
- 遠心性結合(Efferent Coupling / Ce):「自分が誰を呼んでいるか」(Outgoing)。これが高いと不安定(他に依存しすぎ)。
- 不安定度(Instability) = Ce / (Ca + Ce) (0に近いほど安定、1に近いほど不安定)。 リチャーズ氏の覚え方「Aは先(Alphabet)、Eは後(Exit)」は今もエンジニアの定番語呂合わせ。
③ 動的結合 / 時間的結合(Temporal Coupling) [05:22頃]
- コード上は依存なしなのに「順序・タイミング」で縛られている隠れた関係。
- 例:サービスB呼び出し後に必ずCを呼ぶ、同一トランザクション内で完了させる、など。
- 最大の危険:ツールで自動検知しにくく、分散システムで「分散モノリス(Distributed Monolith)」を生む元凶。
動画の結論:この3指標を定期的にチェックすれば、「デス・スター(毛玉)」のような複雑な依存地獄を早期に発見できる。
2. 2026年現在の進化形:マクロ分析の自動化ツール
動画当時は「手描き図+経験則」でしたが、2026年現在はAI+行動分析でほぼ自動化されています。
| 指標 | 2018年(動画時代) | 2026年主流ツール(実務鉄板) | 日本企業での普及 |
|---|---|---|---|
| コンポーネントサイズ | 手動カウント | CodeScene / SonarQube(AIホットスポット検知) | ★★★★★ |
| 静的結合(Ca/Ce) | 手計算 or NDepend | ArchUnit + CodeScene(Instability自動スコア) | ★★★★★ |
| 時間的結合(Temporal) | 経験頼み | CodeScene Behavioral Analysis(Git履歴解析) | ★★★★☆ |
- CodeScene(Adam Tornhill氏本人が作ったツール)が最強 動画で紹介された『Your Code as a Crime Scene』の実装版。Git履歴から「いつも同じタイミングで変更されるファイル」を検知 → 時間的結合を視覚化。2026年現在はAIコードヘルストレンド+Jira連携で、さらに「どのチームがひび割れを作っているか」までわかる。
- Fitness Functionsとの連携(Lesson 7復習) 「Instability > 0.5のコンポーネントはアラート」をCIテスト化。これでマクロ指標が自動健康診断になる。
3. 業界話・雑学・日本企業あるある(2026年視点)
- 「Aは先、Eは後」語呂合わせ リチャーズ氏のこのフレーズは今も世界中のアーキテクチャ研修で使われ続けています。 日本あるある:アーキテクチャレビューで「Caが高すぎ!」と言われて初めて「求心性って何?」となる若手が毎年続出。
- 「コードは犯罪現場」哲学 Adam Tornhill氏の名著『Your Code as a Crime Scene』(第2版2024年刊行)。 犯罪捜査の「地理的プロファイリング」をコードに適用 → 「いつも一緒に修正されるファイル=時間的結合の犯人」。 2026年はCodeSceneがさらに進化し、「認知負荷マップ」まで出せるようになり、チームの「脳の疲労」まで可視化。
- 「デス・スター(毛玉 / Hairball)」の恐怖 動画後半で出てくる「線がぐちゃぐちゃの図」は業界で「Death Star」や「Hairball」と呼ばれる最悪パターン。 日本企業あるある:
- マイクロサービスを10個作ったつもり → 気づいたらサービス間同期呼び出しが蜘蛛の巣 → 「分散モノリス」化。
- 特に金融・保険のレガシー移行プロジェクトで頻発。CodeScene導入で「毛玉スコア」が可視化され、経営層が「これはヤバい」と即予算承認するケースが増えている。
- マクロ分析を怠った末路 「コンポーネントサイズだけ見てた」→ 時間的結合を見逃し、夜間バッチが突然死。 2026年現在は「Architecture Fitness Function + CodeScene」を組み合わせるのがデファクトで、月1回の「マクロ健康診断」が標準運用になっています。
まとめ(アーキテクトに贈る一言)
リチャーズ氏のLesson 9は、「ソースコードを1行も見ずに劣化を検知する」というアーキテクトの究極スキルを示した回です。
- 見るべきはサイズ・静的結合・時間的結合の3指標
- ツールが進化した今、「目視」から「自動健康診断」へ完全に移行可能
今日からできるおすすめアクション:
- CodeSceneの無料トライアル(またはSonarQube Community)を自分のリポジトリに適用。
- 「Instability > 0.5」のコンポーネントを1つピックアップしてFitness Function化。
- Git履歴解析で「時間的結合トップ5」をチームに共有 → 「毛玉解消計画」スタート。
これを習慣化すると、「気づいたらシステムがデス・スター化…」という悪夢から完全に解放されます!
動画は短いのに衝撃大。Lesson 7→8→9を3連続で見ると、アーキテクチャ分析の全体像が完璧に繋がります。 次回Lesson 10は「Analyzing Architecture: Microservices」編です。ぜひ続けてご覧ください!(さらに深掘り解説もいつでもどうぞ)
0 件のコメント:
コメントを投稿