【もじゅーるぎょうしゅうど】

モジュール凝集度 とは?

💡 「このモジュール、一つのことに集中してる?」を測るものさし
📌 このページのポイント
凝集度の低い設計 vs 高い設計 凝集度が低い UtilityModule(何でも屋) ユーザー登録 メール送信 画像変換 ログ出力 CSV出力 無関係な機能が混在 凝集度が高い UserModule 登録 認証 MailModule 送信 テンプレート ImageModule 変換 リサイズ LogModule 出力 フォーマット 各モジュールが1つの役割に集中
モジュール凝集度のイメージ
ひよこ ひよこ

モジュール凝集度って何のこと?

ペンギン先生 ペンギン先生

モジュールの中に入っている機能や処理が、どれだけ一つの目的にまとまっているかを示す指標だよ。たとえば「料理だけする部屋」は凝集度が高くて、「料理も洗濯も勉強もする部屋」は凝集度が低いイメージだね

ひよこ ひよこ

凝集度は高いほうがいいの?

ペンギン先生 ペンギン先生

そうだよ。凝集度が高いモジュールは一つのことに集中してるから、修正する理由が限定されて保守しやすいんだ。逆に凝集度が低いと、一つの変更が関係ない機能に影響する「思わぬバグ」が出やすくなるよ

ひよこ ひよこ

凝集度にはレベルがあるって聞いたんだけど?

ペンギン先生 ペンギン先生

7段階あるよ。高い順に言うと、機能的凝集(一つの機能を完結)→逐次的凝集(前の出力が次の入力)→通信的凝集(同じデータを扱う)→手順的凝集(順番に実行)→時間的凝集(同じタイミングで実行)→論理的凝集(似た種類をまとめただけ)→偶発的凝集(無関係な寄せ集め)だよ

ひよこ ひよこ

偶発的凝集って具体的にはどういうこと?

ペンギン先生 ペンギン先生

たとえば「ユーザー登録」「ログ出力」「メール送信」「画像変換」が1つのクラスに入ってるような状態だよ。何の関連もない機能がたまたま同じ場所にあるだけ。こういうモジュールは修正するたびにどこに影響するか分からなくて怖いんだ

ひよこ ひよこ

モジュール結合度とはどう違うの?

ペンギン先生 ペンギン先生

凝集度はモジュールの「中の話」で、結合度はモジュール「間の話」だよ。理想は「凝集度が高く、結合度が低い」設計。つまり、モジュール内部はしっかりまとまっていて、モジュール同士はゆるくつながっている状態だね。この2つはいつもセットで考えるのが設計のコツだよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
モジュール凝集度」って出てきたら「モジュールの中身がどれだけ一つの仕事に集中してるかの度合い」と思えればだいたいOK!
📖 おまけ:英語の意味
「Module Cohesion」 = モジュールの凝集性
💬 cohesion は「結束・まとまり」という意味で、モジュールの中身がどれだけギュッとまとまっているかを表す言葉だよ
← 用語集にもどる