凝集度とは?
AI時代に必須の「高凝集」設計をコードと図で解説!

公開日:
最終更新日:

イントロダクション:AI時代の凝集度とは?

AIでコード生成が高速になるほど、品質差を生むのは「どんな設計で意図を渡せるか」です。

凝集度とは、「1つのモジュールに1つの目的が集まっている度合い」を指します。 このページでは、高凝集の作り方と、AI時代に効く3つのメリット(Attention・エージェント選択・自動テスト)を具体例で整理します。

1. 凝集度とは(意味の定義)

凝集度は、モジュールが1つの目的に集中している度合いです。 高凝集なコードは「理解しやすい」「変更しやすい」「テストしやすい」の3点で有利になります。

補足として、凝集度はモジュール内部の品質、結合度はモジュール同士の依存関係の強さです。 実務では「高凝集・低結合」をセットで目指すと、AIにも人間にも読みやすい設計になります。

※一般的には「7つの凝集度(強度)」で分類して解説することが多いですが、本ページではAI時代に重要となる「高凝集(目的が1つに絞られた設計)」の考え方に焦点を当てるため、詳細な分類は割愛します。

2. 図解で見る「低凝集度」と「高凝集度」

1つのモジュールの中に「データ取得」「計算」「表示の整形」などが混在している状態(低凝集)と、 役割ごとにモジュールを分けた状態(高凝集)を、箱とラベルでイメージできる図解です。

低凝集度:1つのモジュールに関心ごとが混ざっている例

「データ取得」「計算」「表示の整形」「ログ出力」など、性質の違う処理が1つのモジュールに詰め込まれているイメージです。 役割がぼやけて、再利用や変更が難しくなります。

モジュールA
データ取得 計算 表示の整形 バリデーション ログ出力

1つの箱の中に、性質の違う機能がいくつも同居しており、 「このモジュールは何をする場所か?」が一言で言えない状態 です。

高凝集度:役割ごとにモジュールを分けた例

「データ取得」「計算」「表示の整形」を、それぞれ専用のモジュールに分離したイメージです。 1つのモジュールが1つの目的に集中することで、読みやすさと変更のしやすさが向上します。

モジュールA
データ取得だけ
モジュールB
計算だけ
モジュールC
表示の整形だけ

「このモジュールは◯◯だけを担当する」 と説明できるので、役割が明確になり、 テスト・変更・再利用のどれもがやりやすくなります。

3. 凝集度が低いと何が起きる?(AIが迷子になる例)

低凝集な関数は、AIにとっても「何をしたい関数か」が曖昧になります。 特にLLMは関連性(Attention)で推論するため、無関係な処理が混在すると読み違いが起きやすくなります。

❌ 低凝集(AIが迷子)
updateUserAndSendMailAndCheckLog()

目的: ユーザー更新のはず
混在: メール送信 / ログ確認 / 条件分岐 / 副作用
結果: AIが関係ない文脈に引っ張られ、余計な生成をしやすい
✅ 高凝集(AIが迷わない)
updateUserProfile()

目的: ユーザープロフィール更新だけ
結果: AIが意図に集中し、生成精度が上がる

訴求点は明確です。AIに渡すプロンプトの純度を上げるために、凝集度を上げるという発想が、AI時代の設計品質を底上げします。

4. 高凝集にする手法(コード&図解)

  • 責務を1つに絞る:1つの関数は1つの目的だけを持たせる。
  • 名前を価値に合わせる:動詞+目的語で「何を返すか」を明示する。
  • 入出力を小さくする:副作用(DB/メール/ログ)は境界で隔離する。
  • 同じ理由で変わる単位で分ける:変更理由が違う処理を同じ関数に置かない。
Bad  : User更新 + Mail送信 + Log記録 + 権限チェック(混在)
Good : User更新 / Mail送信 / Log記録 / 権限チェック(分離)

擬似コード(JS/TS風)で見ると次のイメージです。

// ※擬似コード(JS/TS風)
function updateUserProfile(input) { ... }      // 更新だけ
function sendProfileUpdatedMail(userId) { ... } // 通知だけ
function writeAuditLog(event) { ... }           // 監査ログだけ

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

凝集度は「読みやすさの話」で終わりません。AI利用の主戦場である、生成・エージェント実行・自動テストで直接効きます。

5-1. Attentionを分散させない(プロンプトの純度)

AIに渡す文脈は、実質的に「コードそのもの」です。低凝集な関数は変数・副作用・if分岐が増え、Attentionが散ります。

// ※擬似コード(JS/TS風)
function updateUserAndSendMailAndCheckLog(user, input) {
  if (isNightBatch()) { ... }      // 時間条件
  updateUser(user, input);          // 本来の目的
  sendMail(user.email);             // 別責務
  if (logLevel === "debug") { ... } // ログ責務
  if (canEscalate(user)) { ... }    // 権限責務
}
// AIは「更新」より分岐と副作用に注意を奪われやすい

高凝集化して文脈を絞るほど、AIの読み間違いと過剰実装を減らせます。

5-2. AIエージェントに選ばれる関数(ツール設計)

Function Calling / Tool Use では、AIが関数名と説明から呼び出し先を選びます。 名前と役割が一致しない低凝集ツールは、使いどころを判断されず無視や誤用が起きやすくなります。

Tool一覧(低凝集)
- doUserOperation()          // 何を返すか不明
- processUserAndNotify()     // 更新なのか通知なのか曖昧

Tool一覧(高凝集)
- updateUserProfile()
- sendUserNotification()
- recordAuditLog()

「1つの名前で1つの明確な価値を返す」高凝集が、AIに自律的に動いてもらうためのパスポートです。 ツール一覧は、高凝集な小さな関数の集合にした方が強くなります。

5-3. AIによる自動テスト生成の成功率を上げる

高凝集な関数は入力と出力の関係が単純なので、AIに「これのテストを書いて」と頼んだときに、正常・異常・境界のテストケースが作られやすくなります。

高凝集関数はテスト生成が当たりやすい

// ※擬似コード(JS/TS風)
function calculateDiscount(price, rate) {
  if (price < 0) throw new Error("invalid price");
  return Math.floor(price * (1 - rate));
}

// AIが作りやすいテスト観点
// 1) 正常: (1000, 0.1) => 900
// 2) 異常: (-1, 0.1) => Error
// 3) 境界: (0, 0.1) => 0

低凝集関数はテストがズレやすい

// ※擬似コード(JS/TS風)
function checkoutAndNotifyAndLog(cart, user) {
  // 合計計算
  // 割引計算
  // 在庫更新(DB)
  // 通知メール
  // 監査ログ
}
// 境界が曖昧なため、AIテストは漏れや手戻りが増えやすい

つまり凝集度は、テスト自動生成の恩恵を最大化し、手動修正の二度手間を減らす戦略でもあります。

まとめ:AI時代に再評価される理由

  • AIは断片的なコードを速く作れますが、意図を正しく伝える責任は設計にあります。
  • 高凝集は「AIの生成精度」「エージェントの自律性」「自動テスト品質」を同時に底上げします。

“1つの名前で1つの目的”が、AI時代の品質の土台です。

おまけ:高凝集チェックリスト

  • この関数の目的を1文で言えるか
  • 関数名が返す価値と一致しているか
  • 副作用(DB/メール/ログ)が混ざっていないか
  • 入力と出力が明確か
  • AIにテスト生成を頼んだとき、境界条件が想像しやすいか

このページの著者

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

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

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

得意:PHP・JavaScript・MySQL・CSS

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

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

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

もちもちみかん.comとは


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

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