低凝集度:1つのモジュールに関心ごとが混ざっている例
「データ取得」「計算」「表示の整形」「ログ出力」など、性質の違う処理が1つのモジュールに詰め込まれているイメージです。 役割がぼやけて、再利用や変更が難しくなります。
1つの箱の中に、性質の違う機能がいくつも同居しており、 「このモジュールは何をする場所か?」が一言で言えない状態 です。
AIでコード生成が高速になるほど、品質差を生むのは「どんな設計で意図を渡せるか」です。
凝集度とは、「1つのモジュールに1つの目的が集まっている度合い」を指します。 このページでは、高凝集の作り方と、AI時代に効く3つのメリット(Attention・エージェント選択・自動テスト)を具体例で整理します。
凝集度は、モジュールが1つの目的に集中している度合いです。 高凝集なコードは「理解しやすい」「変更しやすい」「テストしやすい」の3点で有利になります。
補足として、凝集度はモジュール内部の品質、結合度はモジュール同士の依存関係の強さです。 実務では「高凝集・低結合」をセットで目指すと、AIにも人間にも読みやすい設計になります。
※一般的には「7つの凝集度(強度)」で分類して解説することが多いですが、本ページではAI時代に重要となる「高凝集(目的が1つに絞られた設計)」の考え方に焦点を当てるため、詳細な分類は割愛します。
1つのモジュールの中に「データ取得」「計算」「表示の整形」などが混在している状態(低凝集)と、 役割ごとにモジュールを分けた状態(高凝集)を、箱とラベルでイメージできる図解です。
「データ取得」「計算」「表示の整形」「ログ出力」など、性質の違う処理が1つのモジュールに詰め込まれているイメージです。 役割がぼやけて、再利用や変更が難しくなります。
1つの箱の中に、性質の違う機能がいくつも同居しており、 「このモジュールは何をする場所か?」が一言で言えない状態 です。
「データ取得」「計算」「表示の整形」を、それぞれ専用のモジュールに分離したイメージです。 1つのモジュールが1つの目的に集中することで、読みやすさと変更のしやすさが向上します。
「このモジュールは◯◯だけを担当する」 と説明できるので、役割が明確になり、 テスト・変更・再利用のどれもがやりやすくなります。
低凝集な関数は、AIにとっても「何をしたい関数か」が曖昧になります。 特にLLMは関連性(Attention)で推論するため、無関係な処理が混在すると読み違いが起きやすくなります。
❌ 低凝集(AIが迷子)
updateUserAndSendMailAndCheckLog()
目的: ユーザー更新のはず
混在: メール送信 / ログ確認 / 条件分岐 / 副作用
結果: AIが関係ない文脈に引っ張られ、余計な生成をしやすい
✅ 高凝集(AIが迷わない)
updateUserProfile()
目的: ユーザープロフィール更新だけ
結果: AIが意図に集中し、生成精度が上がる
訴求点は明確です。AIに渡すプロンプトの純度を上げるために、凝集度を上げるという発想が、AI時代の設計品質を底上げします。
Bad : User更新 + Mail送信 + Log記録 + 権限チェック(混在)
Good : User更新 / Mail送信 / Log記録 / 権限チェック(分離)
擬似コード(JS/TS風)で見ると次のイメージです。
// ※擬似コード(JS/TS風)
function updateUserProfile(input) { ... } // 更新だけ
function sendProfileUpdatedMail(userId) { ... } // 通知だけ
function writeAuditLog(event) { ... } // 監査ログだけ
凝集度は「読みやすさの話」で終わりません。AI利用の主戦場である、生成・エージェント実行・自動テストで直接効きます。
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の読み間違いと過剰実装を減らせます。
Function Calling / Tool Use では、AIが関数名と説明から呼び出し先を選びます。 名前と役割が一致しない低凝集ツールは、使いどころを判断されず無視や誤用が起きやすくなります。
Tool一覧(低凝集)
- doUserOperation() // 何を返すか不明
- processUserAndNotify() // 更新なのか通知なのか曖昧
Tool一覧(高凝集)
- updateUserProfile()
- sendUserNotification()
- recordAuditLog()
「1つの名前で1つの明確な価値を返す」高凝集が、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テストは漏れや手戻りが増えやすい
つまり凝集度は、テスト自動生成の恩恵を最大化し、手動修正の二度手間を減らす戦略でもあります。
“1つの名前で1つの目的”が、AI時代の品質の土台です。
経験:Webアプリ/業務システム
得意:PHP・JavaScript・MySQL・CSS
個人実績:フォーム生成基盤/クイズ学習プラットフォーム 等
詳しいプロフィールはこちら! もちもちみかんのプロフィール