クリーンアーキテクチャとパイプラインの実行順序
CI/CDパイプラインの実行順序は、クリーンアーキテクチャの同心円構造で言うと、
「内側から外側へ」 と進んでいきます。
これは、CI/CDパイプラインの
「Fail Fast(早期失敗)」 の原則と、クリーンアーキテクチャの 「依存関係の原則(内側は外側を知らない)」 が、完璧に噛み合っている
ためです。
パイプラインは、最も速く、最も分離されていて、最も重要なテストから順に実行されます。
1. ユニットテスト(Entities / Use Cases)
クリーンアーキテクチャの層
内側の円である、Entities, Use Casesです。図の黄色と赤い部分の領域。
パイプラインの順序:ステップ1(最速)
なぜか?
クリーンアーキテクチャのルールにより、Entities(ドメインの核)とUse Cases(ビジネスロジック)は、外部のフレームワークやデータベース(外側の円)に一切依存しません。
このため、これらを対象とするユニットテストは、DBの起動やネットワーク接続が不要で、
極めて高速に実行できます。
ぶっちゃけビジネス要件の仕様決めの段階で、ここを最速で作ってテストを仕様書に仕上げるのが良いと強く感じます。
CIパイプラインは、まずこの「ビジネスロジックの核」が健全であるかを最初に検証します。
2. 結合テスト(Interface Adapters)
クリーンアーキテクチャの層
中間の円である、Interface Adapters。図の緑の領域。
パイプラインの順序:ステップ2(中速)
なぜか?
Use Cases(内側)が検証された後、次に「Interface Adapters(例: データベースリポジトリの実装、コントローラー)」が、Use Caseのインターフェース(契約)を正しく実装しているかを検証します。
この結合テストは、実際のテスト用データベースを起動するなど、ユニットテストよりは遅くなりますが、UIや外部APIを動かすよりは高速です。
3. E2Eテスト / UIテスト(Frameworks & Drivers)
クリーンアーキテクチャの層
一番外側の円である、Frameworks & Drivers。青い領域。
パイプラインの順序:ステップ3(低速)
なぜか?
最後に、UI、Webフレームワーク、実際のデータベースといった 「外側の円(詳細)」 をすべて結合し、システム全体として機能するかを検証します。
このE2E(End-to-End)テストは、最も遅く、最も不安定(Flaky)になりがちですが、システム全体の振る舞いを保証する最後の砦となります。
まとめ
クリーンアーキテクチャが「テスト容易性が高い」と言われるのは、まさにこのためです。
ビジネスの核(内側の円)を、遅いインフラ(外側の円)から分離することで、CI/CDパイプラインは 「内側から外側へ」 と、効率的に品質を検証していくことができます。
テストの改善効果の定量的検証方法
リスクの十分下がったユニットテストは実行をやめて、同じ抽象度のユニットテストと統合してしまうといった意思決定の際に、その改善効果はどのようにして測られるものなのか考えてみましょう。
この改善効果は、主に以下の2つの相反するメトリクスを監視することで測られます。
・1. [改善] CI/CDパイプラインの実行速度(Four Keys:リードタイム)
・2. [リスク] 品質の低下(バグの発生)(Four Keys:変更障害率)
このテストを改善したことによる、副作用のチェックをせずに、「改善効果があった」とはいえません。それは他の業務改善でも同様です。
1. ⏱️ CI/CDパイプラインの実行速度 (リードタイムの短縮)
これが、その意思決定(テストの統合・削除)から得られる最も直接的で、定量的な改善効果です。
測定方法
CI/CDパイプラインの実行ログを監視し、テストステージ全体の実行時間を計測します。
なぜ改善か?
テストは実行時間というコストです。
不要なテスト(リスクが低い、あるいは他のテストと重複している)を
ECRSの「E(排除)」や「C(結合)」でリファクタリング
することにより、パイプラインの実行時間は短縮されます。
Four Keysへの影響
パイプラインの実行時間が短縮されると、変更のリードタイムが直接的に改善します。
これは、アジリティ(俊敏性)が向上したことを示す明確な証拠です。
2. 🛡️ 品質の低下(変更障害率)
これが、上記の改善に対する 「副作用」 を監視するための、必須の「バランシング・メトリクス」 です。
テストを削除した「コスト」が、品質の低下という「リスク」を上回っていないかを定量的に検証します。
測定方法
そのテストが対象としていたモジュール(あるいは関連する機能)において、デプロイ後に本番環境で発見されるバグや障害の発生率を監視します。
なぜ監視が必要か?
「リスクが十分下がった」という仮説が間違っていた場合、その削除・統合されたテストが検出していたはずのバグが、パイプラインをすり抜けて本番環境に到達してしまうから。
Four Keysへの影響
もし本番環境でのバグが増加した場合、変更障害率(Change Failure Rate - CFR) が悪化します。
・CFRが悪化しなかった場合
→ 改善は成功です。
「リスク」を増大させることなく、「速度」を向上させられたことを意味します。
・CFRが悪化した場合
→ 改善は失敗です。
意思決定(テストの削除)は間違いであり、元に戻す(あるいは別の形のテストを追加する)必要があります。
3. 🧑💻 保守コストの削減 (定性的効果)
上記2つに加えて、もう一つの重要な効果は「開発者の認知負荷」の軽減です。
測定方法
これは定性的(あるいはアンケート)に測られます。
なぜ改善か?
価値の低いテスト(Flaky Testや、仕様変更のたびに修正が必要な脆いテスト)は、開発者の時間を奪い、フラストレーションの原因となります。
これらを統合・削除することで、開発者は 「本来の価値(コアドメイン)」 の開発と運用に集中できるようになります。
結論
その意思決定(テストの統合・削除)が正しかったかどうかは、
変更のリードタイム(LT)が短縮され、かつ、変更障害率(CFR)が悪化していない
という2つのメトリクスをセットで観測することによって、定量的に測られます。
この効果検証を行いやすくするためにも、テストアーキテクチチャを運用する人は、
是非ともクリーンアーキテクチャの設計思想を抑えておくことをお勧めします。
