結合度とは?
AI時代に必須の判断軸をコードと図で解説!

公開日:
最終更新日:

イントロダクション:AI時代の結合度

AIで実装スピードが上がるほど、結合度の差がそのまま変更コストと品質差になります。

結合度(Coupling)とは、モジュール間の依存の強さを表す指標です。

このページでは、密結合↔疎結合の判断軸、危険な依存の見抜き方、改善の方向性をまとめて理解できます。

1. 結合度とは(意味の定義)

結合度が高いほど、1か所の変更が別モジュールへ波及しやすくなります。 逆に結合度が低いほど(疎結合なほど)、影響範囲を限定しやすく、修正・テスト・差し替えが安全になります。

混同しやすい用語として凝集度があります。凝集度は「1モジュール内部のまとまり」で、 結合度は「モジュール外部とのつながり」です。 理想は 高凝集・低結合 です(凝集度はこちら)。

※一般的には「6つの結合度(強度)」で分類して解説することが多いですが、本ページではAI時代に重要となる「密結合↔疎結合の判断軸(依存を契約=インターフェースに限定する発想)」に焦点を当てるため、詳細な分類は割愛します。

2. 結合度は「密結合 ↔ 疎結合」の連続体

結合度は0/1で決まるラベルではなく尺度です。密結合と疎結合は「状態の違い」であり、 どちら側に寄っているかで、変更の波及・テスト容易性・理解しやすさが変わります。

【密結合側】                           【疎結合側】
依存: 内部実装や共有状態まで前提          依存: 契約(インターフェース)中心
変更: 1点修正で広範囲へ波及              変更: 影響範囲を局所化しやすい
テスト: モックしづらく重い                テスト: 境界ごとに分けやすい
理解: 相互前提が多く読解コスト高          理解: 責務境界が明確で追いやすい

結合度は言わば「診断(今の状態がどう悪いか見抜く)」で、疎結合は「治療(どうやって直すか)」です。 疎結合(治療)の詳細は 疎結合のページ を参照してください。

3. 結合度が高いと何が起きる?(AI時代の事故)

密結合なコードで AI に「ここだけ直して」と依頼すると、関知しない場所へ副作用が出やすくなります。 原因は、境界が曖昧で影響範囲を読み違えやすいことです。

  • 共通結合(グローバル変数)
    AIが局所修正のつもりで値更新しても、別モジュールの挙動まで変わりデグレを招きやすい。
  • 内容結合(内部構造への直接アクセス)
    内部前提が崩れると、見えていない依存先が連鎖的に破綻しやすい。

対して、引数と返り値で境界が明確なデータ結合寄りの設計は、AIも守るべき範囲を判断しやすくなります。 つまり 結合度を下げる=影響範囲を限定する=AI生成の安全性が上がる です。

図解で見る「高結合度」と「低結合度(疎結合)」

既存の依存構造を、AI時代の観点(影響範囲・境界・安全性)で読み解く図です。

高結合度:境界が曖昧で副作用が広がる状態

共有状態・内部アクセス・フラグ制御が混ざると、AI修正時に意図しない場所へ波及しやすくなります。

モジュールA

Bの内部とグローバル状態を前提に呼び出す。

共通結合(グローバル) 制御結合(フラグ) 内容結合(内部参照)
モジュールB

内部変更がA側の破壊につながりやすい。

低結合度(疎結合):境界が明確で安全に変更できる状態

契約と必要最小限データだけを共有することで、AI修正時も影響範囲を局所化しやすくなります。

モジュールA

契約に沿って必要データだけ渡す。

契約(IF) データ結合 影響範囲が明確
モジュールB

内部を変更しても契約が同じならAは維持される。

4. 典型的な“危険な依存”パターンをAI視点で整理(擬似コード)

暗記よりも、「危険な結合ほどAIが境界を守れない」という判断軸で見ることが重要です。

  • 危険度高: 内容結合、共通結合(境界不明で副作用が読みにくい)
  • 危険度中: 制御結合、外部結合、スタンプ結合(仕様変更時に波及しやすい)
  • 危険度低: データ結合、メッセージ結合(契約中心で影響範囲を限定しやすい)

共通結合(グローバル): 影響範囲が読みにくい

// 擬似コード(JS/TS風)
globalState.discountRate = 0.2;

function calcOrderTotal(order) {
	// 別ファイルで変更された globalState に依存
	return order.subtotal * (1 - globalState.discountRate);
}

function updateCampaign() {
	// AIがこの修正を入れると、他機能の計算が一斉に変わる恐れ
	globalState.discountRate = 0.35;
}

内容結合(内部構造への直接アクセス): 境界違反が起きやすい

// 擬似コード(JS/TS風)
class UserRepo {
	_internalCache = new Map();
}

const repo = new UserRepo();

function patchUserName(id, name) {
	// 内容結合: 本来非公開の内部へ直接アクセス
	repo._internalCache.get(id).name = name;
}

データ結合(引数/返り値): AIでも境界を守りやすい

// 擬似コード(JS/TS風)
type PromptRequest = { prompt: string };
type PromptResponse = { text: string };

function askAi(req: PromptRequest): PromptResponse {
	// 実装詳細はここに閉じ込める
	return { text: "..." };
}

function summarizeArticle(articleText: string) {
	const res = askAi({ prompt: articleText });
	return res.text;
}

5. AI時代に必須の3つの視点

5-1. 影響範囲を限定してAI生成を安全にする

境界が明確なほど、AIは「どこまで触ってよいか」を判断しやすくなります。 データ結合寄りにすると、無関係な場所への副作用を減らし、レビューとテストの焦点も合わせやすくなります。

5-2. AIモデルをプラグイン化する(差し替え前提)

GPT-4o、Claude、Geminiのように主役モデルは入れ替わります。 呼び出しコードを各所にベタ書きすると、差し替え時の修正範囲が拡大します。 「AIへの窓口」を1つに寄せ、入出力をシンプルな契約に絞ると、心臓部だけを交換しやすくなります。

App/UseCase
   |
   v
AiGateway (唯一の窓口)
   |
   +--> OpenAI Provider
   +--> Claude Provider
   +--> Gemini Provider

結合度は言わば「診断(今の状態がどう悪いか見抜く)」で、疎結合は「治療(どうやって直すか)」です。 疎結合(治療)の詳細は 疎結合のページ を参照してください。

5-3. 自動リファクタリングに備える

将来、AIエージェントが自動で置換・分割・移動を行うほど、低結合な構造の価値が上がります。 低結合は独立性を判定しやすく、密結合はスパゲッティ化して解きほぐしが難しくなります。 低結合は、AI自動メンテの恩恵を最大化するための事前準備です。

まとめ:診断軸としての結合度

結合度は、AI時代の安全性・モデル差し替え・自動メンテを左右する土台です。 結合度を下げる=影響範囲を限定する=変更とAI活用に強くなる という判断軸で、 まずは現在の依存状態を診断することから始めましょう。

おまけ:設計レビュー用チェックリスト

  • グローバル状態を共有していないか(共通結合)
  • 他モジュールの内部構造に踏み込んでいないか(内容結合)
  • 引数/返り値でやり取りできているか(データ結合寄り)
  • AI呼び出しが散らばっていないか(窓口が1つか)
  • 変更時に影響範囲を説明できるか

このページの著者

もちもちみかん(システムエンジニア)

社内SEとしてグループ企業向けの業務アプリを要件定義〜運用まで一気通貫で担当しています。

経験:Webアプリ/業務システム

得意:PHP・JavaScript・MySQL・CSS

個人実績:フォーム生成基盤クイズ学習プラットフォーム

詳しいプロフィールはこちら!  もちもちみかんのプロフィール

もちもちみかん0系くん
TOPへ

もちもちみかん.comとは


このサイトでは、コーディングがめんどうくさい人向けのお助けツールとして、フォームやCSSをノーコードで生成できる、
 もちもちみかん.forms
 もちもちみかん.css1
 もちもちみかん.css2
と言ったジェネレーターを用意してます。

また、このサイトを通じて、「もちもちみかん」のかわいさを普及したいとかんがえてます!