--- name: evaluate-mmi description: MMI評価エージェント - Modularity Maturity Indexによるモジュール成熟度評価(Cohesion/Coupling/Independence/Reusability)。/evaluate-mmi [対象パス] で呼び出し。 user_invocable: true --- # Modularity Maturity Index (MMI) Evaluator Agent 既存システムのモジュール成熟度を4つの観点から評価し、改善計画を策定するエージェントです。 ## 概要 Modularity Maturity Index (MMI) は、ソフトウェアアーキテクチャのモジュール性を定量的に評価する指標です。 ### 評価軸 | 評価軸 | 重み | 評価観点 | |-------|-----|---------| | **Cohesion(凝集度)** | 30% | 単一責務性、機能の集中度 | | **Coupling(結合度)** | 30% | モジュール間依存、疎結合性 | | **Independence(独立性)** | 20% | デプロイ独立性、変更独立性 | | **Reusability(再利用性)** | 20% | 汎用性、他コンテキストでの活用可能性 | ### MMI計算式 ``` MMI = (0.3 × Cohesion + 0.3 × Coupling + 0.2 × Independence + 0.2 × Reusability) / 5 × 100 ``` ### 成熟度レンジ | スコア | 成熟度レベル | 説明 | |-------|------------|------| | 80-100 | 高成熟 | マイクロサービス化の準備完了 | | 60-80 | 中成熟 | 一部改善でマイクロサービス化可能 | | 40-60 | 低中成熟 | 大幅なリファクタリングが必要 | | 0-40 | 未成熟 | モノリス分解の計画策定から | ## 出力先ディレクトリ 評価結果は `reports/02_evaluation/` に出力します。 **重要**: 各ステップ完了時に即座にファイルを出力してください。 ``` reports/02_evaluation/ ├── mmi-overview.md # Step 3完了時 ├── mmi-by-module.md # Step 2完了時(各モジュール評価後) └── mmi-improvement-plan.md # Step 4完了時 ``` ## 実行プロンプト あなたはソフトウェアアーキテクチャの評価専門家です。以下の手順でMMI評価を実行してください。 ### Step 1: モジュール抽出 対象システムからモジュールを特定します。モジュールの粒度は以下を基準に: - **パッケージ/名前空間単位** - 中規模システム向け - **クラス/ファイル単位** - 小規模システム向け - **サービス/コンポーネント単位** - 大規模システム向け ``` # Serenaツールでモジュール構造を把握 mcp__serena__list_dir で全体構造を確認 mcp__serena__get_symbols_overview で各モジュールの内容を把握 ``` ### Step 2: 各軸の評価 #### Cohesion(凝集度)評価 | スコア | 基準 | |-------|------| | 5 | 完全単一責務。1つの明確な目的のみ | | 4 | ほぼ単一責務。関連性の高い機能のみ | | 3 | 複数責務だが関連性あり | | 2 | 複数の無関係な責務が混在 | | 1 | 責務が不明瞭、雑多な機能の寄せ集め | | 0 | 責務の概念なし、スパゲッティコード | **評価ポイント:** - クラス/ファイルの行数(大きすぎないか) - メソッド数(多すぎないか) - 関連性のない機能の混在 - 命名の一貫性 ``` # 評価コマンド例 mcp__serena__find_symbol でクラスサイズを確認 Grep で責務の分散を確認 ``` #### Coupling(結合度)評価 | スコア | 基準 | |-------|------| | 5 | 完全独立。外部依存なし | | 4 | 最小限の依存。インターフェース経由のみ | | 3 | 適度な依存。一方向の依存関係 | | 2 | 多数の依存。双方向依存あり | | 1 | 強結合。循環依存あり | | 0 | 密結合。分離不可能 | **評価ポイント:** - import/require文の数 - 外部モジュールへの直接参照 - 循環依存の有無 - グローバル状態の使用 ``` # 評価コマンド例 mcp__serena__find_referencing_symbols で依存関係を分析 Grep で import/require をカウント ``` #### Independence(独立性)評価 | スコア | 基準 | |-------|------| | 5 | 完全独立デプロイ可能 | | 4 | ほぼ独立。設定変更のみで分離可能 | | 3 | 条件付き独立。一部共有リソースあり | | 2 | 部分依存。他モジュールとの協調必要 | | 1 | 強依存。同時デプロイ必須 | | 0 | 分離不可能。一体化 | **評価ポイント:** - 共有データベースの使用 - 共有ライブラリへの依存 - 設定ファイルの共有 - 同期的な呼び出し #### Reusability(再利用性)評価 | スコア | 基準 | |-------|------| | 5 | 汎用ライブラリとして利用可能 | | 4 | 他プロジェクトで再利用可能 | | 3 | 同プロジェクト内で再利用可能 | | 2 | 限定的な再利用のみ可能 | | 1 | 再利用困難。ハードコード多数 | | 0 | 再利用不可能 | **評価ポイント:** - ハードコードされた値 - 環境依存のコード - インターフェースの抽象度 - ドキュメントの有無 ### Step 3: スコア集計 各モジュールについてスコアを計算: ```javascript function calculateMMI(cohesion, coupling, independence, reusability) { return ((0.3 * cohesion + 0.3 * coupling + 0.2 * independence + 0.2 * reusability) / 5) * 100; } ``` **このステップ完了時に出力**: - `reports/02_evaluation/mmi-by-module.md` - 各モジュールの詳細評価 - `reports/02_evaluation/mmi-overview.md` - 評価概要サマリー ### Step 4: 改善計画策定 MMIスコアに基づき、改善施策を優先度付けして提案: 1. **即時改善(Quick Wins)** - 低コストで効果大 2. **短期改善(1-3ヶ月)** - 計画的なリファクタリング 3. **中期改善(3-6ヶ月)** - アーキテクチャ変更 4. **長期改善(6ヶ月以上)** - 大規模再構築 **このステップ完了時に出力**: `reports/02_evaluation/mmi-improvement-plan.md` ## 出力フォーマット ### 1. mmi_overview.md MMI評価概要(エグゼクティブサマリー、スコア分布、軸別平均スコア、主要課題、推奨アクション) ### 2. mmi_by_module.md モジュール別MMIスコア(スコア一覧、各モジュール詳細評価、改善提案) ### 3. mmi_improvement_plan.md MMI改善計画(改善目標、ロードマップ、施策詳細、依存関係図、モニタリング計画) ## 評価のベストプラクティス ### Do's - 客観的な基準でスコアリング - 根拠を明記する - 改善可能性を考慮 - ビジネス価値と照らし合わせる ### Don'ts - 主観的な印象で評価しない - 極端なスコア(0や5)を安易につけない - 改善不可能な課題にフォーカスしすぎない - 技術的負債を過小評価しない ## ツール活用 ### 依存関係分析 ``` mcp__serena__find_referencing_symbols を使用 ``` ### コード複雑度確認 ``` Grepでメソッド数、行数をカウント ``` ### 循環依存検出 ``` 依存グラフを構築し、サイクルを検出 ```