Skip to main content

sfra-explorer

Interactive SFRA codebase investigation and exploration skill. Supports direct code investigation (route tracing, override analysis, business logic, data flow, hook investigation) with or without a pre-generated Resolution Map. Triggers on "SFRA explore", "SFRA investigate", "SFRA 探索", "SFRA 調査", "コード調査", "コード探索"

설치로 이동

소스 정보

저장소
sizukutamago/claude-sfcc-plugin
최근 소스 활동
2026년 2월 9일 10:15
감지된 SKILL.md 언어
일본어
스타
0
포크
0

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
15 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
sfra-explorer
description
Interactive SFRA codebase investigation and exploration skill. Supports direct code investigation (route tracing, override analysis, business logic, data flow, hook investigation) with or without a pre-generated Resolution Map. Triggers on "SFRA explore", "SFRA investigate", "SFRA 探索", "SFRA 調査", "コード調査", "コード探索"
version
2.0.0
triggers
["SFRA explore","SFRA explorer","SFRA investigate","SFRA 探索","SFRA 調査","コード調査","コード探索"]
# SFRA Explorer スキル SFRA コードベースのインタラクティブ調査・探索を支援するスキル。コードフロー追跡、モジュール関係分析、ビジネスロジック調査に対応する。 ## 概要 | 項目 | 内容 | |------|------| | **対象** | SFRA Storefront(app_storefront_base + overlay / plugin / integration cartridges) | | **目的** | SFRA コードベースを調査・探索し、ルート実行フロー、モジュール解決、ビジネスロジック、データフロー等をトレースして回答する | | **2モード** | Mode A: 直接調査(即座に探索)/ Mode B: Knowledge Base 生成 + 調査 | ## アーキテクチャ ``` ┌─────────────────────────────────────────────────────────────────┐ │ Orchestrator (SKILL.md) │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ Phase 0: Scope Detection (inline) │ │ ┌─────────────────────────────────────────────────────────────┐│ │ │ - Cartridge ディレクトリ検出 ││ │ │ - Cartridge path 順序決定 ││ │ │ - Confidence レベル付与 (high/medium/low) ││ │ └─────────────────────────────────────────────────────────────┘│ │ │ │ │ Mode A: Direct Investigation(Resolution Map 不要) │ │ ┌─────────────────────────────────────────────────────────────┐│ │ │ investigator (sonnet) ← Glob/Grep/Read で直接探索 ││ │ │ Resolution Map があれば参照して高速化 ││ │ └─────────────────────────────────────────────────────────────┘│ │ │ │ Mode B: Knowledge Base 生成 + 調査(大規模・反復調査向け) │ │ ┌─────────────────────────────────────────────────────────────┐│ │ │ Step 1: scanner (sonnet) ← ファイルインベントリ + 正規化JSON ││ │ │ │ ││ │ │ ▼ ││ │ │ Step 2: ┌──────────┬──────────┐ ← 並列実行 ││ │ │ │ resolver │ mapper │ ││ │ │ │ (opus) │ (sonnet) │ ││ │ │ └────┬─────┴────┬─────┘ ││ │ │ └──────────┘ ││ │ │ │ ││ │ │ ▼ ││ │ │ Step 3: assembler (opus) → sfra-resolution-map.md ││ │ │ │ ││ │ │ ▼ ││ │ │ investigator (sonnet) ← Map 参照 + 実コード確認 ││ │ └─────────────────────────────────────────────────────────────┘│ │ │ └─────────────────────────────────────────────────────────────────┘ ``` ## 実行フロー判定 ユーザーの入力に基づき、以下のロジックでモードを決定する: | 優先度 | 条件 | 実行モード | |--------|------|-----------| | 1 | ユーザーが「マップ生成」「全体分析」「Knowledge Base」を明示的に要求 | Mode B | | 2 | 質問・調査系の入力 + Resolution Map 存在 | Mode A(Map 参照付き) | | 3 | 質問・調査系の入力 + Resolution Map なし | Mode A(直接探索) | | 4 | 初回実行で質問なし | Phase 0 でスコープ検出 → ユーザーに質問を求める | | 5 | 曖昧な入力(「調査して、あとマップも」等) | まず Mode A で即答、その後「Map も生成しますか?」と確認して Mode B を提案 | **判定キーワード**: - Mode B トリガー: 「マップ生成」「全体分析」「全体をスキャン」「Knowledge Base」「generate map」「full analysis」 - Mode A トリガー: 質問文(「〜は?」「〜を教えて」「〜のフローは?」等)、調査系キーワード --- ## 対応カテゴリ | カテゴリ | 説明 | Resolution Map 依存 | |---------|------|-------------------| | Route Tracing | ルート実行フロー + ミドルウェアチェーン追跡 | 不要(あれば高速化) | | Override Analysis | ファイル上書き関係 | 不要(あれば高速化) | | Chain Tracing | superModule 継承チェーン追跡 | 不要(あれば高速化) | | Impact Analysis | 変更影響範囲 | あれば精度向上 | | Hook Investigation | Hook 調査(全カートリッジ実行の注意含む) | 不要(あれば高速化) | | Template Tracing | テンプレート追跡 | 不要(あれば高速化) | | Dependency Mapping | 依存関係可視化 | あれば精度向上 | | Business Logic | ビジネスロジック調査(価格計算、在庫等) | 不要 | | Data Flow | pdict ライフサイクル、Model→Controller→ISML のデータ追跡 | 不要 | | Code Pattern | パターン横断検索(Transaction.wrap、Service 呼出し等) | 不要 | --- ## ワークフロー ### Phase 0: スコープ検出(Orchestrator 内で実行) **目的**: 調査対象のカートリッジ構成と順序を特定 **手順**: 1. プロジェクトルートでカートリッジディレクトリを検出 ```bash # Glob パターン cartridges/*/cartridge/ ``` 2. カートリッジパスを優先順位に従って決定 | 優先度 | ソース | Confidence | |--------|--------|------------| | 1 | ユーザー入力(スキル呼び出し時に指定) | high | | 2 | `dw.json` の cartridge path 設定 | high | | 3 | `.project` Eclipse プロジェクト設定 | medium | | 4 | `package.json` の dependencies から推測 | medium | | 5 | ディレクトリ構造のみ(アルファベット順) | low | 3. 検出結果をログ出力 ```yaml scope: cartridge_path: "app_custom:plugin_wishlists:app_storefront_base" cartridge_path_source: "dw.json" cartridge_path_confidence: "high" cartridges: - name: "app_custom" type: "overlay" path: "cartridges/app_custom" - name: "plugin_wishlists" type: "plugin" path: "cartridges/plugin_wishlists" - name: "app_storefront_base" type: "base" path: "cartridges/app_storefront_base" stats: total_files: 245 controllers: 35 models: 28 templates: 120 ``` **Done 条件**: カートリッジパスが決定し、少なくとも 1 つのカートリッジが検出されている **Confidence が low の場合**: ユーザーにカートリッジパスの確認を求める。ユーザーが指定すれば confidence を high に格上げ。 --- ### Mode A: Direct Investigation(investigator による直接調査) **目的**: Resolution Map の有無を問わず、ユーザーの質問に即座に回答 ``` Task( description: "Investigate SFRA codebase", prompt: "ユーザーの質問に回答してください。 質問: {user_question} カートリッジパス: {cartridge_path} カートリッジディレクトリ: {cartridge_directories} Resolution Map: {map_status} (存在する場合: docs/explore/sfra-resolution-map.md を参照可能) investigator.md の手順に従い、以下の流れで回答: 1. Resolution Map の存在確認(なくても続行) 2. Map があれば読み込み + 鮮度チェック 3. 質問をカテゴリに分類 4. Map データ or 直接探索で情報収集 5. 構造化回答を生成 回答には必ずファイルパス:行番号を含めてください。", subagent_type: "sfra-explorer-investigator", model: "sonnet" ) ``` **対応カテゴリ**: 上記 10 カテゴリ全て --- ### Mode B: Knowledge Base 生成 + 調査 **目的**: 大規模プロジェクトの反復調査向けに、事前分析した Resolution Map を生成 #### Step 1: Scanner(ファイルインベントリ) **入力**: Phase 0 のスコープ情報(カートリッジパス、ディレクトリ一覧) ``` Task( description: "Scan SFRA codebase", prompt: "以下のカートリッジパスに従い、コードベースをスキャンしてください。 カートリッジパス: {cartridge_path} カートリッジディレクトリ: {cartridge_directories} Phase 0 で検出された情報: - cartridge_path_source: {source} - cartridge_path_confidence: {confidence} - git_commit: {git_commit} 出力先: docs/explore/.work/01_scan.md スキャン対象: 1. 全カートリッジのファイルインベントリ 2. require() パターン分類(wildcard/tilde/relative/dw_api/explicit) 3. module.superModule 使用箇所 4. server メソッド(get/post/use/append/prepend/replace/extend) 5. イベントリスナー(this.on('route:*')) 6. イベント発火(this.emit) 7. Hook 登録(package.json hooks → hooks.json) 8. 各ファイルの行数 scanner.md の手順に従って実行してください。", subagent_type: "sfra-explorer-scanner", model: "sonnet" ) ``` **出力**: `docs/explore/.work/01_scan.md` **Done 条件**: scanner がハンドオフ封筒 `status: ok` を返却 --- #### Step 2: Resolver + Mapper(並列実行) scanner の出力が完了したら、resolver と mapper を**単一メッセージ内で並列起動**する。 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 並列実行(単一メッセージで複数 Task tool 呼び出し) │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ Task(sfra-explorer-resolver, model: opus) ──┐ │ │ Task(sfra-explorer-mapper, model: sonnet) ──┘─→ 並列 │ │ │ └─────────────────────────────────────────────────────────────────┘ ``` ##### Resolver ``` Task( description: "Resolve SFRA require/superModule", prompt: "scanner の出力(docs/explore/.work/01_scan.md)を読み込み、 以下を計算してください: 1. require('*/...') の解決先(カートリッジパス順で最初のマッチ) 2. module.superModule チェーンの完全トレース(再帰的) 3. ファイル衝突検出(同一相対パスが複数カートリッジに存在) 4. 逆引き依存インデックス 5. 未解決パターン(動的 require 等) 出力先: docs/explore/.work/02_resolution.md resolver.md の手順に従って実行してください。", subagent_type: "sfra-explorer-resolver", model: "opus" ) ``` **出力**: `docs/explore/.work/02_resolution.md` ##### Mapper ``` Task( description: "Map SFRA routes/templates/hooks", prompt: "scanner の出力(docs/explore/.work/01_scan.md)を読み込み、 以下をマッピングしてください: 1. Controller Route Map(prepend→base→append 実行順序) 2. Template Override Map(ISML テンプレートの解決先) 3. Hook Registration Map(全カートリッジの Hook 登録) 重要: Hook は全カートリッジの登録分が全て実行されます。 出力先: docs/explore/.work/03_map.md mapper.md の手順に従って実行してください。", subagent_type: "sfra-explorer-mapper", model: "sonnet" ) ``` **出力**: `docs/explore/.work/03_map.md` **Done 条件**: resolver と mapper の両方が `status: ok` を返却 --- #### Step 3: Assembler(統合 + 検証) resolver と mapper の出力が揃ったら、assembler を起動する。 ``` Task( description: "Assemble SFRA resolution map", prompt: "以下の 3 ファイルを読み込み、最終解決マップを生成してください: 1. docs/explore/.work/01_scan.md(scanner 出力) 2. docs/explore/.work/02_resolution.md(resolver 出力、欠損の場合あり) 3. docs/explore/.work/03_map.md(mapper 出力、欠損の場合あり) テンプレート: templates/resolution-map-template.md 手順: 1. 存在するファイルのみ読み込む(resolver or mapper が失敗した場合、欠損ファイルはスキップ) 2. テンプレートのプレースホルダーを実データで置換(欠損セクションは空欄 + 警告付き) 3. クロスバリデーション(ファイル数、チェーン数、ルート数、Hook数) 4. 統計計算(Section 9) 5. 最終 Markdown 生成 出力先: - docs/explore/sfra-resolution-map.md(最終成果物) - docs/explore/.work/04_assembly.md(アセンブリレポート) assembler.md の手順に従って実行してください。", subagent_type: "sfra-explorer-assembler", model: "opus" ) ``` **出力**: - `docs/explore/sfra-resolution-map.md`(最終成果物) - `docs/explore/.work/04_assembly.md`(アセンブリレポート) **Done 条件**: assembler が `status: ok` を返却し、`sfra-resolution-map.md` が生成されている #### Mode B 完了後 Resolution Map 生成が完了したら、ユーザーの質問があれば Mode A の investigator を起動して回答する。investigator は生成された Map を参照して高速に回答する。 --- ## エージェント一覧 | Agent | Model | 担当範囲 | 入力 | 出力 | |-------|-------|---------|------|------| | investigator | sonnet | インタラクティブ調査(全 10 カテゴリ) | 質問 + 実コード(+ Map) | 構造化回答 | | scanner | sonnet | ファイルインベントリ、正規化 JSON | カートリッジパス | `.work/01_scan.md` | | resolver | opus | require 解決、superModule チェーン | scanner 出力 | `.work/02_resolution.md` | | mapper | sonnet | Route / Template / Hook マッピング | scanner 出力 | `.work/03_map.md` | | assembler | opus | 統合、クロスバリデーション | scanner + resolver + mapper | `sfra-resolution-map.md` | ## ツール使用ルール ### 各モード / Phase で使用可能なツール | Phase / Mode | 許可ツール | 備考 | |-------------|-----------|------| | Phase 0 | Glob, Bash (read-only), Read | スコープ検出のみ | | Mode A (investigator) | Read, Glob, Grep | 調査のみ(読み取り専用) | | Mode B Step 1 (scanner) | Read, Glob, Grep, Write | スキャン + `.work/` 出力 | | Mode B Step 2 (resolver) | Read, Glob, Grep, Write | 解決計算 + `.work/` 出力 | | Mode B Step 2 (mapper) | Read, Glob, Grep, Write | マッピング + `.work/` 出力 | | Mode B Step 3 (assembler) | Read, Glob, Write | 統合 + 最終マップ書き込み | ### 書き込み制限 - **書き込み可能**: `docs/explore/` および `docs/explore/.work/` のみ - **読み取り専用**: その他すべてのディレクトリ --- ## 実行フロー ### Mode A: 直接調査(デフォルト) ``` /sfra-explore {質問} → Phase 0 → investigator → 構造化回答 ``` ### Mode B: Knowledge Base 生成 ``` /sfra-explore(マップ生成指示) → Phase 0 → scanner → [resolver + mapper 並列] → assembler → 完了 ``` ### Mode A with Map: Map 参照付き調査 ``` /sfra-explore {質問}(Map 存在時) → investigator(Map 参照 + 実コード確認) → 構造化回答 ``` ### 初回実行判定 1. ユーザーが質問を含めている → Mode A(Map 有無に関わらず即座に調査開始) 2. ユーザーが「マップ生成」を指示 → Mode B 3. 質問なし・指示なし → Phase 0 でスコープ検出 → ユーザーに質問を求める ### 鮮度チェック Resolution Map が存在する場合、`git_commit` と現在の HEAD を比較: - **一致**: マップは最新、investigator が Map を参照 - **不一致**: investigator が鮮度警告を表示して続行(Map のデータは参考として使用) --- ## Done 判定 | Phase / Mode | Done 条件 | |-------------|----------| | Phase 0 | カートリッジパスが決定し、1 つ以上のカートリッジが検出 | | Mode A | ユーザーの質問に構造化回答が完了 | | Mode B Step 1 | `01_scan.md` が生成済み、scanner が `status: ok` | | Mode B Step 2 | `02_resolution.md` + `03_map.md` が生成済み、両方 `status: ok` | | Mode B Step 3 | `sfra-resolution-map.md` が生成済み、assembler が `status: ok` | --- ## エラーハンドリング | 状況 | 対応 | |------|------| | カートリッジ未検出 | `status: blocked`、ユーザーにパス確認を求める | | カートリッジパス confidence: low | ユーザーに確認を求める(指定があれば high に格上げ) | | scanner 失敗 | 原因を報告、Mode B からリトライ | | resolver 失敗 / mapper 成功 | mapper 出力のみで assembler 実行(resolver セクション空欄 + 警告) | | mapper 失敗 / resolver 成功 | resolver 出力のみで assembler 実行(mapper セクション空欄 + 警告) | | assembler 失敗 | Step 3 からリトライ | | Resolution Map なしで質問 | **Mode A で直接探索**(blocked にしない) | | Resolution Map が古い | 鮮度警告を表示して続行、再生成は提案のみ | --- ## 出力ディレクトリ構造 ``` docs/explore/ ├── .work/ # 中間成果物(.gitignore 推奨) │ ├── 01_scan.md # scanner: ファイルインベントリ + 正規化 JSON │ ├── 02_resolution.md # resolver: 解決先、チェーン、逆引き │ ├── 03_map.md # mapper: ルート、テンプレート、Hook │ └── 04_assembly.md # assembler: クロスバリデーションレポート └── sfra-resolution-map.md # Resolution Map(Mode B で生成) ``` --- ## 共有リファレンス ### sfra-explorer 固有 | ファイル | 用途 | |---------|------| | `references/sfra_resolution_guide.md` | SFRA 解決メカニズム全解説 + AI 誤解集 | | `references/resolution_map_schema.md` | Resolution Map のスキーマ定義 | | `references/exploration_prompts.md` | AI 探索プロンプトカタログ | | `templates/resolution-map-template.md` | 出力テンプレート(Mode B 用) | ### sfra-review から共有参照(読み取りのみ) | ファイル | 用途 | |---------|------|
GitHub에서 보기
이 SKILL.md는 매우 커서 SkillsMP가 여기에는 첫 섹션만 미리 보여줍니다. GitHub에서 보기