Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ソフトウェア設計の結合とバランス_1章
Search
渡邉 巽/watanabe tatsumi
August 03, 2026
Programming
11
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ソフトウェア設計の結合とバランス_1章
渡邉 巽/watanabe tatsumi
August 03, 2026
More Decks by 渡邉 巽/watanabe tatsumi
See All by 渡邉 巽/watanabe tatsumi
効果を正しく検証するには?
watanabetatsumi
0
430
Other Decks in Programming
See All in Programming
AIを紡ぐPMのお話
swdtkuy
0
120
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
240
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
250
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
5k
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
300
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
170
今さら聞けない .NET CLI
htkym
0
210
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
7
2.1k
Cloudflare is Agents
chimame
0
180
変わらないものが、変わるものを決める — 意図駆動開発 × イベントソーシング × イミュータブル | What Doesn't Change Decides What Can — IDD × Event Sourcing × Immutability
tomohisa
0
1.8k
Built Our Own Background Agent at LayerX
layerx
PRO
10
5.9k
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
350
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The SEO Collaboration Effect
kristinabergwall1
1
530
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Utilizing Notion as your number one productivity tool
mfonobong
4
550
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
900
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
660
ラッコキーワード サービス紹介資料
rakko
1
4.5M
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
What does AI have to do with Human Rights?
axbom
PRO
1
2.3k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Transcript
ソフトウェア設計の 結合とバランス 持続可能な成長を支えるモジュール化の原則 1章 結合とシステム設計
はじめに • • • ソフトウェア設計に関する書籍で結合の説明に割かれるのは、通常数ページほど 『結合(依存)は悪』という言葉をどこでも耳にする。 『マイクロサービスは疎結合を実現するためのアーキテクチャである。』 ↓ 2014年ごろ、猫も杓子もマイクロサービスについて語っていたが、同時は誰もマイクロ サービスが実際に何なのか定義出来ていなかった。
『Structured Design』(邦訳『ソフトウェアの構造化設計手法』)の6章に、そのヒントが書 かれていた。その章のタイトルは・・・『結合』だった。 2
イントロダクション 一流のスイス時計を想像してみてほしい。スイス公認のクロノメーター検査協会は、 15日間の試験期間中、平均して遅れが4秒以内、進みが6秒以内でなければなら ないと定められている。加えて、現代の時計には、クロノグラフ、日付表示 etc… と いった複雑な機構も組み込まれている。これらは全て、何百もの微小な部品によっ て実現されている。 部品間の相互作用の精度は最も重要。例えば、 •
• 潤滑が不十分なために接続がきつすぎると、過度な摩擦によって時計の動きが遅 くなってしまう。 逆に部品が潤滑されすぎていると、歯車やバネが自由に動きすぎて時計の動きが 速くなってしまう。 3
イントロダクション 結合はなぜ重要なのか? 高級機械式時計は、単に時間を刻む機械ではない。時間の経過とともに大きな価値を 蓄積する有形資産。 ↓ これは、成功したソフトウェアシステムにも当てはまる。 ソフトウェアシステムの価値とは、現在備えている機能だけではなく、進化や成長、将来 の要求にも応える能力も反映したもの。本書で学ぶように、時の試練に耐えるシステム を構築するには、コンポーネント間の相互作用を効率的に設計することが不可欠。 なぜ、ある設計の決定が複雑性をもたらし、他の決定がシステムのモジュール性を高め
るのかを探る。 4
結合とは何か 結合は、世界中のソフトウェアエンジニアの宿敵となるずっと前から存在していた。結合 (coupling)はラテン語の”copulare”に由来する。 copulare = ともに固定する、物事を結びつける(connected) 結合は、接合されたコンポーネント間の関係を示している。もしコンポーネントが結合さ れているなら、それらは何らかの形で影響を及ぼし合う可能性がある。 5
結合の強度 ソフトウェア設計では、結合度が高ければ高いほど、結合されたコンポーネントを一緒に 変更する頻度が高くなる。 しかし、なぜ一緒に変更しなければならないのだろうか。 その理由は、 1. 2. ライフサイクルの共有 知識の共有 にある。
6
結合の強度(ライフサイクルの共有) 複数のコンポーネントを一緒にする必要がある単純な理由は、それらのライフサイクル が結合されている点にある。 同じモノリシックアプリケーション内に共存しているモジュールは、一緒にテスト・デプロイ ・メンテナンスをする必要がある。 ↓ 一方、モジュールを異なるサービスに分離すると、 それらのライフサイクルの結合度は低くなり、 それぞれのモジュールをより独立して開発・ メンテナンスできるようになる。
7
結合の強度(知識の共有) 結合されたコンポーネントが強調して動作するには、それらの間で知識を共有する必要 がある。その形は、統合インターフェイス、機能要件、対応するモジュールの実装詳細に まで及ぶ。 共有されている知識の一部を変更した場合には、接続されたモジュールも同様に変更さ れなければならない。 そのため、境界を超えてコンポーネント間で共有している知識が多ければ多いほ ど、より多くの連鎖的な変更が発生する。 8
結合の強度(知識の共有) 共有する知識の量が異なる3つの設計 9
結合の強度(知識の共有) まとめると、 • • • 設計Aは、使用している具体的なデータベース(MySQL)という最も多くの知識を共 有している。 設計Bは、知識をデータベースの種類に縮小している。 設計Cはさらにカプセル化し、CustomerServiceモジュールが機能を実装するため に必要な最小限の知識のみを公開している。
『知識』に対する変更は、影響を受けるコンポーネント全体に伝播させる必要がある。(さ らに、コンポーネントは、明示的に定められたり共有されたりしていない知識であっても、 システムの他の部分について暗黙の前提を持つ可能性がある。(システムが特定の バージョンのやOS、特定のハードに依存するなど。)) そのため、共有される知識が多いほど、変更する理由も多く共有されることになる。 10
知識の流れ 2つの結合されたコンポーネントを考えてみる。 下の例では、Distributionコンポーネントは、CRMコンポーネントを参照(に依存)してい る。この時、DistributionコンポーネントはCRMコンポーネントの統合インターフェース、 機能、運用についての詳細を認識している必要がある。 • • Distributionコンポーネントは、統合インターフェイスを通じて、CRMモジュールから これらの知識を共有されている。 結果として、知識の流れは、依存関係とは逆の方向に発生している。(これらの知
識の流れに関して、上流/下流と表現する。) 11
システム 盲目的に、相互依存を導入すれば良い設計になるというわけではないが、システムの目 的を拡張したい場合は、コンポーネントを変更する必要がある。さらにコンポーネントを 変更する際には、相互作用(統合の仕方、通信の仕方)の変更が必要になる。 12
まとめ システムは目的とコンポーネントから構成される。コンポーネントがシステムの目的を達 成するには、コンポーネント間の相互作用(結合)が必要。 結合は、各コンポーネントが知識やライフサイクル、あるいはその両方を共有しなけれ ばいけないことから生じる 13
演習問題 14