会社の福利厚生を利用して購入した進化的アーキテクチャを読んでいる.

TL;DR

  • 進化的アーキテクチャは、具体的なアーキテクチャを決める手法ではなく、継続的に変更可能なアーキテクチャを支援するための手法
  • 漸進的な変更適応度関数適切な結合から構成される
  • 適応度関数は、要件が担保できているかを確認する仕組みのことで、自動テストや手動テスト・監査・セキュリティレビューがある
  • 漸進的な変更は、開発とデプロイメントの2つの側面からなり、「テストがしやすいアーキテクチャにすること」「継続的デリバリーができるデプロイメントパイプラインを定義すること」が大事
  • オーバーヘッドが少なく最大の利益をもらたす適切な結合があるアーキテクチャを選択しましょう

1章 ソフトウェアアーキテクチャ

1章では、進化的アーキテクチャとは何かを定義している.

将来を見据えたアーキテクチャを設計するのは非常に難しい.
アーキテクチャを設計するには、ビジネス・ドメイン要件から、セキュリティ・パフォーマンス・スケーラビリティなどといったアーキテクチャ特性を踏まえて、それぞれの釣り合いをとりながら最適解を見つけることである.
しかし、ある時点で決定した段階では最適解だったアーキテクチャでも、時間が経つにつれ最適解ではなくなる場合がある.
何故最適解でなくなるかといえば、ビジネス・ドメイン要件の変更といった要因や、言語やプラットフォームのアップデートなど多岐に渡る.
これらはいつ起こるのは予測しづらいが、いつか起きること自体は分かっている.
ならば、それらに対応し変化し続け、最適解であり続けるためのアーキテクチャ特性進化可能性を設計する際の関心事に入れる.
これらを踏まえ、進化的アーキテクチャとは

複数の次元にわたる漸進的で誘導的な変更を支援するものである。

と定義される.
また進化的アーキテクチャは、漸進的な変更適応度関数適切な結合という側面から構成される. これらの具体的な話は後の章で述べられる.

2章 適応度関数

2章では、適応度関数の定義と、種類が記載されている.

アーキテクチャは、様々な要因やアーキテクチャ特性から構成されている.
これらの各要件を担保するために適応度関数という仕組みを用意する.
適応度関数は、それぞれの粒度やトリガー、自動か手動かなどといった分類があり、それぞれ得意不得意がある.
そのため、それらを適切に組み合わせていく必要がある.
早い段階で適応度関数を定義しておくことで、不必要な時間やお金を減らすことができる.
また、適応度関数も定期的に見直す必要がある.
適応度関数自体も様々な要因から影響を受けるからだ.

3章 漸進的な変更を支える技術

3章では、漸進的な変更の定義と、手法や具体例が記載されている.

漸進的な変更が支援するのは、開発とデプロイメントの2つである.
アーキテクチャを設計していく上で無視されがちなのはテスト可能性である.
テスト可能性は、アーキテクチャ特性を自動テストによって検証可能かどうかを示す特性である.
全てのアーキテクチャ特性をテストする必要はなく、容易にテスト可能な特性には、ガイドラインを作り、テストの自動化することが可能である.
デプロイメントは、適応度関数を検証するステージを組み込んだデプロイメントパイプラインを使って継続的なデリバリーを実践することである.
2つのケーススタディがあり、そこでどういったパイプラインが構成されているのかがよく分かる.
このパイプラインの中には自動化されたものだけではなく、手動で実施されるものが含まれるのが何とも面白い.

できる限り自動化できるに越したことはないのだが、2章適応度関数の話にあったメリデメに依存するのだろう.

4章 アーキテクチャ上の結合

4章では、アーキテクチャを組む上で必要となる、適切な結合についての具体的なアーキテクチャが記載されている.

アーキテクチャを設計するうえで、結合は必要悪だと避難されがちだが、結合なしに複雑なソフトウェアを構築するのは困難である.
進化的アーキテクチャでは、最小のオーバーヘッドで最大の利益をもたらす結合すべきアーキテクチャを特定する方法に注目している.
モノリスなアーキテクチャから、レイヤード、そしてマイクロサービスなアーキテクチャを含めたいくつかのアーキテクチャが記載されている.
それぞれは、漸進的な変更適応度関数による誘導的な変更適切な結合の3つの観点から述べられている.

疎結合されたアーキテクチャであれば、進化を容易にするための多くの手段を提供することとなる.

感想

読む前は、具体的なアーキテクチャの手法の1つかな?と思って読みすすめていたが、そうではなかったことに少し驚いた. だが読み進めていくうえで確かに考慮が漏れやすいポイントであるなということが納得できるような内容であった. まだ後半を読んでいないので楽しみである.