--- name: element-relationship-analyzer description: プラグイン要素間の依存関係や呼び出し順序を分析する。プラグイン整合性確認時、依存関係検証時、またはユーザーが要素間依存、呼び出し順序、循環依存、アーキテクチャ検証に言及した際に使用する。 --- # Element Relationship Analyzer ## 概要 このSkillは、プラグイン内の要素(エージェント、スキル、コマンド)間の依存関係や呼び出し順序を分析する。プラグインの整合性を確認し、循環依存やアーキテクチャ違反を検出して、適切な依存関係の構築を支援する。 ## 責任範囲 このSkillは以下の範囲をカバーする: - プラグイン要素(エージェント、スキル、コマンド)の収集 - 要素間の依存関係の分析 - 要素の呼び出し順序の分析 - 循環依存の検出と報告 - アーキテクチャ規約違反の検出 - 依存関係の最適化提案 ## ワークフロー ### フェーズ1: 要素収集 プラグインディレクトリから全ての要素を収集し、基本情報を抽出する。 **実施内容:** 1. プラグインディレクトリ構造を確認する 2. エージェントファイルを収集する 3. スキルファイルを収集する 4. コマンドファイルを収集する 5. 各要素のフロントマター情報を抽出する **収集対象:** - エージェント: `agents/[agent-name].md` - スキル: `skills/*/SKILL.md` - コマンド: `commands/[command-name].md` **抽出情報:** - name(要素名) - description(説明) - tools(エージェントのみ) - 依存する要素の参照(本文中のエージェント名、スキル名、コマンド名) **良い例:** ```markdown 【要素収集結果】 プラグイン名: database-design-plugin プラグインディレクトリ: D:\projects\database-design-plugin エージェント (1個): - database-design-agent - 説明: データベース設計フェーズ全体に対する責任を持つ - tools: "*" スキル (7個): ワークフロースキル: - entity-definition-collector - 説明: エンティティ定義を収集する - normalization-processor - 説明: 正規化を実施する - er-diagram-generator - 説明: ER図を生成する - table-definition-writer - 説明: テーブル定義書を作成する - ddl-script-generator - 説明: DDLスクリプトを生成する コンベンションスキル: - database-naming-conventions - 説明: データベース命名規則を定義 - normalization-rules - 説明: 正規化ルールを定義 コマンド (2個): - design-database - 説明: データベース設計全体を実行 - generate-schema - 説明: スキーマ定義のみを生成 ``` **悪い例:** ```markdown 【要素収集結果】 何かある ``` ### フェーズ2: 依存関係分析 各要素が参照する他の要素を分析し、依存関係を明確にする。 **実施内容:** 1. 各要素のドキュメント本文を解析する 2. 他の要素への参照を検出する 3. 依存関係マップを作成する 4. 依存の種類を分類する(必須依存、オプション依存) 5. 依存の方向を確認する(エージェント→スキル、スキル→スキル、コマンド→エージェント/スキル) **依存関係の検出方法:** - エージェント: 本文中のスキル名参照 - スキル: 本文中の他のスキル名参照(※プラグインアーキテクチャ規約では推奨されない) - コマンド: 「使用するエージェント」「使用するスキル」セクションからの参照 **良い例:** ```markdown 【依存関係分析結果】 コマンド: design-database - 使用するエージェント: - database-design-agent(必須) - 使用するスキル: - entity-definition-collector(必須) - normalization-processor(必須) - er-diagram-generator(必須) - table-definition-writer(必須) - ddl-script-generator(必須) - database-naming-conventions(必須) - normalization-rules(必須) コマンド: generate-schema - 使用するエージェント: - database-design-agent(必須) - 使用するスキル: - entity-definition-collector(必須) - normalization-processor(必須) - database-naming-conventions(必須) - normalization-rules(必須) エージェント: database-design-agent - 依存するスキル: なし ※アーキテクチャ規約に従い、エージェントは直接スキルを参照しない スキル: entity-definition-collector - 依存するスキル: なし ※アーキテクチャ規約に従い、スキルは他のスキルを参照しない スキル: normalization-processor - 依存するスキル: なし スキル: er-diagram-generator - 依存するスキル: なし スキル: table-definition-writer - 依存するスキル: なし スキル: ddl-script-generator - 依存するスキル: なし スキル: database-naming-conventions - 依存するスキル: なし スキル: normalization-rules - 依存するスキル: なし ``` **悪い例:** ```markdown 【依存関係分析結果】 いろいろ依存している ``` ### フェーズ3: 呼び出し順序分析 コマンドにおけるスキルの呼び出し順序を分析する。 **実施内容:** 1. 各コマンドの「実行フロー」セクションを解析する 2. スキルの実行順序を抽出する 3. 並列実行可能なスキルを特定する 4. 順次実行が必要なスキルを特定する 5. 実行順序の妥当性を検証する **分析基準:** - スキルの実行順序が明確であるか - 依存関係に基づいた順序になっているか - 並列実行可能なスキルが適切に識別されているか - データの受け渡しが明確であるか **良い例:** ```markdown 【呼び出し順序分析結果】 コマンド: design-database 実行フロー: 1. database-design-agent が entity-definition-collector を使用してエンティティ定義を収集 - 入力: ユーザーからの要求、既存システムの情報 - 出力: エンティティ一覧、属性リスト - 並列実行: 不可(最初のステップ) 2. database-design-agent が normalization-processor を使用して正規化を実施 - 入力: エンティティ定義(ステップ1の出力) - 出力: 正規化されたテーブル定義 - 並列実行: 不可(ステップ1に依存) - 使用する規約: normalization-rules 3. database-design-agent が以下のスキルを並列実行: - er-diagram-generator: ER図を生成 - 入力: 正規化されたテーブル定義(ステップ2の出力) - 出力: ER図(Mermaid形式) - table-definition-writer: テーブル定義書を作成 - 入力: 正規化されたテーブル定義(ステップ2の出力) - 出力: テーブル定義書(Markdown形式) - ddl-script-generator: DDLスクリプトを生成 - 入力: 正規化されたテーブル定義(ステップ2の出力) - 出力: DDLスクリプト - 並列実行: 可能(全てステップ2の出力を使用、相互依存なし) 妥当性: OK - 各ステップの入力と出力が明確 - 依存関係に基づいた順序 - 並列実行可能なステップが適切に識別されている コマンド: generate-schema 実行フロー: 1. database-design-agent が entity-definition-collector を使用してエンティティ定義を収集 2. database-design-agent が normalization-processor を使用して正規化を実施 妥当性: OK - 最小限のステップのみ実行 - 依存関係が明確 ``` **悪い例:** ```markdown 【呼び出し順序分析結果】 順番に実行する ``` ### フェーズ4: 循環依存検出 要素間の循環依存を検出し、報告する。 **実施内容:** 1. 依存関係グラフを構築する 2. 循環依存を検出するアルゴリズムを実行する 3. 検出された循環依存を報告する 4. 循環依存の影響を評価する 5. 循環依存の解消方法を提案する **検出方法:** - 深さ優先探索(DFS)による循環検出 - トポロジカルソートによる順序確認 **良い例:** ```markdown 【循環依存検出結果】 循環依存: 検出されませんでした 依存関係グラフ: design-database コマンド ↓ database-design-agent エージェント ↓ entity-definition-collector スキル normalization-processor スキル er-diagram-generator スキル table-definition-writer スキル ddl-script-generator スキル database-naming-conventions スキル normalization-rules スキル generate-schema コマンド ↓ database-design-agent エージェント ↓ entity-definition-collector スキル normalization-processor スキル database-naming-conventions スキル normalization-rules スキル トポロジカルソート結果: 1. database-naming-conventions(コンベンション、依存なし) 2. normalization-rules(コンベンション、依存なし) 3. entity-definition-collector(ワークフロー、コンベンションに依存可能) 4. normalization-processor(ワークフロー、コンベンションに依存可能) 5. er-diagram-generator(ワークフロー、依存なし) 6. table-definition-writer(ワークフロー、依存なし) 7. ddl-script-generator(ワークフロー、依存なし) 8. database-design-agent(エージェント、スキルを使用) 9. design-database(コマンド、エージェントとスキルを使用) 10. generate-schema(コマンド、エージェントとスキルを使用) アーキテクチャ規約遵守: OK - エージェントは他の要素を参照していない - スキルは他のスキルを参照していない - コマンドのみがエージェントとスキルを参照している ``` **悪い例(循環依存が存在する場合):** ```markdown 【循環依存検出結果】 循環依存: 検出されました 循環1: skill-a → skill-b → skill-c → skill-a 問題: スキルが他のスキルを参照している(アーキテクチャ規約違反) 影響: スキルの独立性が損なわれ、再利用性が低下 解消方法: - スキル間の参照を削除する - 共通の処理をコンベンションスキルに分離する - コマンドで依存関係を管理する 循環2: command-a → agent-b → command-a 問題: コマンドとエージェントが相互参照している 影響: 無限ループの可能性 解消方法: - エージェントからコマンドへの参照を削除する - エージェントはスキルのみを使用するようにする ``` ### フェーズ5: 推奨提示 分析結果をまとめ、改善提案をユーザーに提示する。 **実施内容:** 1. 分析結果をサマリー化する 2. 検出された問題をリストアップする 3. アーキテクチャ規約の遵守状況を報告する 4. 改善提案を作成する 5. 次のステップを案内する **提示形式:** ```markdown 【要素関係分析レポート】 プラグイン名: database-design-plugin 分析日時: 2025-11-15 【サマリー】 要素数: - エージェント: 1個 - スキル: 7個(ワークフロー: 5個、コンベンション: 2個) - コマンド: 2個 依存関係: - 総依存数: 14個 - 循環依存: 0個 - アーキテクチャ規約違反: 0個 品質評価: 優良 - 循環依存なし - アーキテクチャ規約遵守 - 依存関係が明確 【詳細分析結果】 依存関係マップ: - design-database → database-design-agent, 5つのワークフロースキル, 2つのコンベンションスキル - generate-schema → database-design-agent, 2つのワークフロースキル, 2つのコンベンションスキル 呼び出し順序: - design-database: 3ステップ(ステップ3は3つのスキルを並列実行) - generate-schema: 2ステップ(順次実行) 循環依存: なし アーキテクチャ規約遵守: - ✓ エージェントは他の要素を参照していない - ✓ スキルは他のスキルを参照していない - ✓ コマンドのみがエージェントとスキルを参照している - ✓ 依存関係の方向が正しい(コマンド→エージェント→スキル) 【改善提案】 改善点: なし このプラグインは適切に設計されています。 【推奨事項】 1. 定期的に要素関係を分析し、循環依存が発生していないか確認する 2. 新しい要素を追加する際は、アーキテクチャ規約を遵守する 3. コマンドの実行フローを明確に記述する 4. 並列実行可能なスキルを適切に識別する 【次のステップ】 1. プラグイン全体の品質検証(plugin-validator スキルを使用) 2. プラグインのパッケージング(plugin-packager スキルを使用) ``` **良い例:** 分析結果が明確で、問題点、改善提案、推奨事項が示されている。 **悪い例:** ```markdown 【要素関係分析レポート】 分析した 問題なし ``` ## アウトプット このスキルは以下を生成する: - **依存関係マップ**: 要素間の依存関係を整理したマッピング - **呼び出し順序図**: コマンドにおけるスキルの呼び出し順序を図示したドキュメント - **循環依存レポート**: 検出された循環依存とその解消方法 - **要素関係分析レポート**: 分析結果、問題点、改善提案をまとめたレポート ## 想定されるエラーと対処法 ### エラー1: 循環依存が検出された **検出例:** ```markdown skill-a → skill-b → skill-a ``` **対処法:** - スキル間の参照を削除する - 共通の処理をコンベンションスキルに分離する - コマンドで依存関係を管理する ### エラー2: アーキテクチャ規約違反 **検出例:** ```markdown エージェントがスキルを直接参照している スキルが他のスキルを参照している ``` **対処法:** - エージェントからスキルへの直接参照を削除する - スキル間の参照を削除する - コマンドで依存関係を管理する ### エラー3: 呼び出し順序が不明確 **検出例:** ```markdown 実行フロー: スキルを実行する ``` **対処法:** - 実行フローを明確に記述する - スキルの実行順序を番号付きで記述する - 並列実行可能なスキルを明示する ## ベストプラクティス - 定期的に要素関係を分析する - 循環依存を早期に検出して解消する - アーキテクチャ規約を遵守する - 依存関係を明確に文書化する - 呼び出し順序を明示する - 並列実行可能なスキルを適切に識別する ## チェックリスト ### 要素収集完了時 - [ ] プラグインディレクトリ構造が確認されている - [ ] エージェントファイルが収集されている - [ ] スキルファイルが収集されている - [ ] コマンドファイルが収集されている - [ ] 各要素のフロントマター情報が抽出されている ### 依存関係分析完了時 - [ ] 各要素のドキュメント本文が解析されている - [ ] 他の要素への参照が検出されている - [ ] 依存関係マップが作成されている - [ ] 依存の種類が分類されている - [ ] 依存の方向が確認されている ### 呼び出し順序分析完了時 - [ ] 各コマンドの「実行フロー」セクションが解析されている - [ ] スキルの実行順序が抽出されている - [ ] 並列実行可能なスキルが特定されている - [ ] 順次実行が必要なスキルが特定されている - [ ] 実行順序の妥当性が検証されている ### 循環依存検出完了時 - [ ] 依存関係グラフが構築されている - [ ] 循環依存検出アルゴリズムが実行されている - [ ] 検出された循環依存が報告されている - [ ] 循環依存の影響が評価されている - [ ] 循環依存の解消方法が提案されている ### 推奨提示完了時 - [ ] 分析結果がサマリー化されている - [ ] 検出された問題がリストアップされている - [ ] アーキテクチャ規約の遵守状況が報告されている - [ ] 改善提案が作成されている - [ ] 次のステップが案内されている - [ ] ユーザーの承認を得ている ### 最終確認 - [ ] 依存関係マップが作成されている - [ ] 呼び出し順序図が作成されている - [ ] 循環依存レポートが作成されている(該当する場合) - [ ] 要素関係分析レポートが作成されている - [ ] すべてのアウトプットが明確で理解しやすい - [ ] ユーザーが次のステップに進める状態になっている