『ソフトウェア設計の結合バランス』を読んだ

『ソフトウェア設計の結合バランス』を先月(2026年2月)読んだ。
ソフトウェア設計の結合バランス 持続可能な成長を支えるモジュール化の原則 (impress top gear) - Amazon概要
『ドメイン駆動開発をはじめよう』のKhononov氏による著作。
導入では、まず本書の議論の前提となる概念としての「結合」や「モジュール」を定義する。そして、結合の度合いを測るためにこれまでソフトウェア工学で用いられてきた概念(モジュール結合、コナーセンス)を整理する。
その後、従来の概念は結合の一面しか反映しておらず、それぞれに得意不得意があることを踏まえて、より汎用的に使えて暗黙的な結合なども考慮した尺度である「統合強度」を新たに提示する。それに加えて、このあとの準備としてモジュール間の「距離」、モジュールの「変動性」も尺度として導入する。
一例として、むやみなマイクロサービス化に問題があるというのはよく知られている。サービスを細かく分けすぎるのは、各モジュールの距離を離すことに集中しすぎて、その間に不必要な知識の流れが生まれてしまうことを考慮していない状態だといえる。統合強度を用いると、これは侵入結合や機能結合に陥っており、変更や理解が難しい状態になっていると解釈できる。
システムの設計を改善していくときは、統合強度、距離、変動性の3軸のバランスが取れる点を探る(均衡結合)。統合強度が高く距離が近いか、もしくは統合強度が低く距離が遠いという明らかに健全そうなモジュールの結合はもちろん、変動性が十分に低く安定しているモジュールに対してであれば、距離が遠いモジュールと高い統合強度で結合してもバランスは取れるという結果も導かれる。
実践面の解説として、均衡結合とDDDのサブドメイン分類(コア、支援、汎用)を活用して、複雑度が増したシステムを再バランスする方法についても触れられている。
感想
均衡結合についての話の前に、まず第I部と第II部前半で、古典から『A Philosophy of Software Design』など現代の文献までを参照しつつ、ソフトウェアにおける結合や複雑性の現代的な定義が解説されていて、ここだけでもかなり役立つ内容だと感じた。
統合強度は、対称機能結合のようなコード上の知識が暗黙的に結合しているパターンの機能結合も考慮に入れているのが特徴。この統合強度と距離、変動性の3軸による評価で、均衡結合を保つためのトレードオフを考慮できるようになったので、実務上も設計の議論がしやすくなりそうという感覚がある。また、コードレベルからモジュールやサービスレベルまで、どの抽象レベルの設計評価においても使える尺度になっているのは強力といえる。
自分が設計判断をするとき、書籍で示されている観点が現状分析や変更方針の検討に役立っているとすでに感じている。長期間にわたって維持しつつ変更を加えていくシステムに携わる場合は一度読んでおくとよい本だと思った。