mcpField
S
sf-industry-commoncore-omnistudio-analyze

sf-industry-commoncore-omnistudio-analyze

github.com/jaganpro開発424985 回インストール26 週間前に更新
リポジトリ

sf-industry-commoncore-omnistudio-analyze について

Salesforce Industries の OmniStudio を分析するスキルです。名前空間の特定、コンポーネントの棚卸し、依存関係の追跡を行い、循環参照検出と Mermaid 図で変更影響の確認を支援します。

主な機能

  1. 01Core、vlocity_cmt、vlocity_ins の名前空間特定
  2. 02OmniStudio コンポーネントの状態とバージョンの棚卸し
  3. 03循環参照を検出する依存関係グラフの構築
  4. 04コンポーネント変更の影響分析
  5. 05Mermaid 図とレポートの生成

活用シーン

  1. 01組織で使われている OmniStudio 名前空間の確認
  2. 02OmniScript や FlexCard などの依存関係の整理
  3. 03Integration Procedure の変更による影響範囲の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jaganpro/sf-skills --skill sf-industry-commoncore-omnistudio-analyze

インストール後、Claude Code で/sf-industry-commoncore-omnistudio-analyzeを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

CREDITS.md
LICENSE
references/
dependency-patterns.md
namespace-guide.md

詳細

sf-industry-commoncore-omnistudio-analyze:OmniStudio コンポーネント横断分析

名前空間の検出、依存関係のマッピング、OmniStudio コンポーネントスイート全体にわたる影響分析を専門とする OmniStudio アナリストです。OmniScript、FlexCard、Integration Procedure、Data Mapper の組織全体のインベントリを作成し、依存関係グラフを自動構築して Mermaid で可視化します。

主な役割

  1. 名前空間の検出:組織で Core(Industries)、vlocity_cmt(Communications, Media & Energy)、vlocity_ins(Insurance & Health)のいずれの名前空間が使われているかを特定します
  2. 依存関係の分析:循環参照を検出しながら、BFS トラバーサルを使用してコンポーネント間の依存関係を有向グラフとして構築します
  3. 影響分析:特定の OmniScript、IP、FlexCard、Data Mapper を変更した場合に、どのコンポーネントが影響を受けるかを判断します
  4. Mermaid による可視化:ドキュメントやレビュー用に、依存関係図を Mermaid 構文で生成します
  5. 組織全体のインベントリ:OmniStudio コンポーネントをタイプ、ステータス、言語、バージョン別に分類します

重要:オーケストレーションの順序

複数の OmniStudio スキルが関係する場合は、次の依存関係チェーンに従ってください。

sf-industry-commoncore-omnistudio-analyze → sf-industry-commoncore-datamapper → sf-industry-commoncore-integration-procedure → sf-industry-commoncore-omniscript → sf-industry-commoncore-flexcard

このスキルは最初に実行し、後続のスキルが利用する名前空間のコンテキストと依存関係マップを確立します。


主な知見

知見詳細
3 つの名前空間が共存しますCore(OmniProcess)、vlocity_cmt(vlocity_cmt__OmniScript__c)、vlocity_ins(vlocity_ins__OmniScript__c)
依存関係は JSON に保存されていますPropertySetConfig(要素)、Definition(FlexCard)、InputObjectName/OutputObjectName(Data Mapper)
循環参照が発生する可能性があります埋め込み呼び出しを介した OmniScript A → IP B → OmniScript A
FlexCard のデータソースにはタイプがありますDataSourceConfig JSON 内の dataSource.type === 'IntegrationProcedures'(複数形)
有効とドラフトの区別が重要ですランタイムの依存関係チェーンに含まれるのは、有効なコンポーネントのみです

ワークフロー(4 フェーズパターン)

フェーズ 1:名前空間の検出

目的:コンポーネントのメタデータをクエリする前に、組織で使われている OmniStudio の名前空間を特定します。

検出アルゴリズム — COUNT() が正常に返されるまで、順番にオブジェクトを検証します。

  1. Core(Industries 名前空間):

    SELECT COUNT() FROM OmniProcess
    

    これが成功した場合、組織では Core 名前空間が使われています(API 234.0+/Spring '22+)。

  2. vlocity_cmt(Communications, Media & Energy):

    SELECT COUNT() FROM vlocity_cmt__OmniScript__c
    
  3. vlocity_ins(Insurance & Health):

    SELECT COUNT() FROM vlocity_ins__OmniScript__c
    

いずれも成功しない場合、組織に OmniStudio はインストールされていません。

名前空間検出用の CLI コマンド:

# Core namespace probe
sf data query --query "SELECT COUNT() FROM OmniProcess" --target-org myorg --json 2>/dev/null

# vlocity_cmt namespace probe
sf data query --query "SELECT COUNT() FROM vlocity_cmt__OmniScript__c" --target-org myorg --json 2>/dev/null

# vlocity_ins namespace probe
sf data query --query "SELECT COUNT() FROM vlocity_ins__OmniScript__c" --target-org myorg --json 2>/dev/null

結果の評価:クエリが成功すると(終了コード 0 で JSON に totalSize が含まれる場合)、名前空間が確認されます。クエリが失敗した場合(INVALID_TYPE または sObject type not found)、その名前空間は存在しません。

参照先:references/namespace-guide.md で、3 つすべての名前空間におけるオブジェクト/フィールドの完全な対応を確認してください。


フェーズ 2:コンポーネントの検出

目的:組織内のすべての OmniStudio コンポーネントのインベントリを作成します。

検出した名前空間を使用して、各コンポーネントタイプをクエリします。

OmniScript(Core の例):

SELECT Id, Type, SubType, Language, IsActive, VersionNumber,
       PropertySetConfig, LastModifiedDate
FROM OmniProcess
WHERE IsIntegrationProcedure = false
ORDER BY Type, SubType, Language, VersionNumber DESC

Integration Procedure(Core の例):

SELECT Id, Type, SubType, Language, IsActive, VersionNumber,
       PropertySetConfig, LastModifiedDate
FROM OmniProcess
WHERE IsIntegrationProcedure = true
ORDER BY Type, SubType, Language, VersionNumber DESC

FlexCard(Core の例):

SELECT Id, Name, IsActive, DataSourceConfig, PropertySetConfig,
       AuthorName, LastModifiedDate
FROM OmniUiCard
ORDER BY Name

重要:OmniUiCard オブジェクトには Definition フィールドがありません。データソースのバインディングには DataSourceConfig を、カードのレイアウト/状態の設定には PropertySetConfig を使用してください。

Data Mapper(Core の例):

SELECT Id, Name, IsActive, Type, LastModifiedDate
FROM OmniDataTransform
ORDER BY Name

Data Mapper 項目(オブジェクト依存関係の抽出用):

SELECT Id, OmniDataTransformationId, InputObjectName, OutputObjectName,
       InputObjectQuerySequence
FROM OmniDataTransformItem
WHERE OmniDataTransformationId IN ({datamapper_ids})

重要:外部キーのフィールドは OmniDataTransformId ではなく、OmniDataTransformationId(「Transformation」の完全な語)です。

CLI コマンドのパターン:

sf data query --query "SELECT Id, Type, SubType, Language, IsActive FROM OmniProcess WHERE IsIntegrationProcedure = false" \
  --target-org myorg --json

フェーズ 3:依存関係の分析

目的:コンポーネントのメタデータを解析し、有向依存関係グラフを構築します。

アルゴリズム:循環検出付き BFS
1. Initialize empty graph G and visited set V
2. For each root component C:
   a. Enqueue C into work queue Q
   b. While Q is not empty:
      i.   Dequeue component X from Q
      ii.  If X is in V, record circular reference and skip
      iii. Add X to V
      iv.  Parse X's metadata for dependency references
      v.   For each dependency D found:
           - Add edge X → D to graph G
           - If D is not in V, enqueue D into Q
3. Return graph G and any circular references detected
要素タイプ → 依存関係の抽出

OmniScript 要素と IP 要素は、PropertySetConfig JSON フィールドに参照を保存します。各要素を解析して依存関係を抽出します。

要素タイプPropertySetConfig 内の JSON パス依存先
DataRaptor Transform Actionbundle, bundleNameData Mapper(名前で指定)
DataRaptor Turbo Actionbundle, bundleNameData Mapper(名前で指定)
Remote ActionremoteClass, remoteMethodApex Class.Method
Integration Procedure ActionintegrationProcedureKeyIP(Type_SubType)
OmniScript ActionomniScriptKey or Type/SubTypeOmniScript(Type_SubType)
HTTP ActionhttpUrl, httpMethod外部エンドポイント(URL)
DocuSign Envelope ActiondocuSignTemplateIdDocuSign テンプレート
Apex Remote ActionremoteClassApex Class

PropertySetConfig の解析:

For each OmniProcessElement:
  1. Read PropertySetConfig (JSON string)
  2. Parse JSON
  3. Check element.Type against extraction table
  4. Extract referenced component name/key
  5. Resolve reference to an OmniProcess/OmniDataTransform record
  6. Add edge: parent component → referenced component
FlexCard データソースの解析

FlexCard は、データソースの設定を DataSourceConfig JSON フィールドに保存します(OmniUiCard に存在しない Definition フィールドではありません)。

Parse DataSourceConfig JSON:
  1. Access dataSource object (singular, not array)
  2. For each dataSource where type === 'IntegrationProcedures' (note: PLURAL):
     - Extract dataSource.value.ipMethod (IP Type_SubType)
     - Add edge: FlexCard → Integration Procedure
  3. For each dataSource where type === 'ApexRemote':
     - Extract dataSource.value.className
     - Add edge: FlexCard → Apex Class
  4. For childCard references, parse PropertySetConfig:
     - Add edge: FlexCard → child FlexCard

IMPORTANT:IP のデータソースタイプは IntegrationProcedure ではなく、IntegrationProcedures(末尾に大文字の P が付く複数形)です。

Data Mapper のオブジェクト依存関係

Data Mapper は、項目を介して Salesforce オブジェクトを参照します。

For each OmniDataTransformItem:
  1. Read InputObjectName → source sObject
  2. Read OutputObjectName → target sObject
  3. Add edge: Data Mapper → sObject (read from InputObjectName)
  4. Add edge: Data Mapper → sObject (write to OutputObjectName)

参照先:依存関係の抽出ルールと例については、references/dependency-patterns.md を参照してください。


フェーズ 4:可視化とレポート作成

目的:依存関係グラフから人が読みやすい出力を生成します。

出力形式 1:Mermaid 依存関係図
graph LR
    subgraph OmniScripts
        OS1["createOrder<br/>English v3"]
        OS2["updateAccount<br/>English v1"]
    end
    subgraph Integration Procedures
        IP1["fetchAccountData<br/>English v2"]
        IP2["submitOrder<br/>English v1"]
    end
    subgraph Data Mappers
        DM1["AccountExtract"]
        DM2["OrderTransform"]
    end
    subgraph FlexCards
        FC1["AccountSummaryCard"]
    end

    OS1 -->|IP Action| IP2
    OS1 -->|DR Action| DM2
    OS2 -->|IP Action| IP1
    IP1 -->|DR Action| DM1
    FC1 -->|Data Source| IP1

    style OS1 fill:#dbeafe,stroke:#1d4ed8,color:#1f2937
    style OS2 fill:#dbeafe,stroke:#1d4ed8,color:#1f2937
    style IP1 fill:#fef3c7,stroke:#b45309,color:#1f2937
    style IP2 fill:#fef3c7,stroke:#b45309,color:#1f2937
    style DM1 fill:#d1fae5,stroke:#047857,color:#1f2937
    style DM2 fill:#d1fae5,stroke:#047857,color:#1f2937
    style FC1 fill:#fce7f3,stroke:#be185d,color:#1f2937

配色:

コンポーネントタイプ塗りつぶし枠線
OmniScript#dbeafe (blue-100)#1d4ed8 (blue-700)
Integration Procedure#fef3c7 (amber-100)#b45309 (amber-700)
Data Mapper#d1fae5 (green-100)#047857 (green-700)
FlexCard#fce7f3 (pink-100)#be185d (pink-700)
Apex Class#e9d5ff (purple-100)#7c3aed (purple-700)
外部(HTTP)#f1f5f9 (slate-100)#475569 (slate-600)
出力形式 2:JSON サマリー
{
  "namespace": "Core",
  "components": {
    "omniScripts": 12,
    "integrationProcedures": 8,
    "flexCards": 5,
    "dataMappers": 15
  },
  "dependencies": [
    { "from": "OS:createOrder", "to": "IP:submitOrder", "type": "IPAction" },
    { "from": "IP:fetchAccountData", "to": "DM:AccountExtract", "type": "DataRaptorAction" }
  ],
  "circularReferences": [],
  "impactAnalysis": {
    "DM:AccountExtract": {
      "directDependents": ["IP:fetchAccountData"],
      "transitiveDependents": ["OS:updateAccount", "FC:AccountSummaryCard"]
    }
  }
}
出力形式 3:人が読みやすいレポート
OmniStudio Dependency Report
=============================
Org Namespace: Core (Industries)
Scan Date: 2026-03-06

Component Inventory:
  OmniScripts:              12 (8 active, 4 draft)
  Integration Procedures:    8 (6 active, 2 draft)
  FlexCards:                  5 (5 active)
  Data Mappers:             15 (12 active, 3 draft)

Dependency Summary:
  Total edges:              23
  Circular references:       0
  Orphaned components:       2 (no inbound/outbound deps)

Impact Analysis (most-depended components):
  1. DM:AccountExtract       → 5 dependents
  2. IP:fetchAccountData     → 3 dependents
  3. DM:OrderTransform       → 2 dependents

名前空間ごとのオブジェクト/フィールドマッピング

3 つすべての名前空間における OmniStudio オブジェクトとフィールドの完全なマッピング:

主要オブジェクト
概念Corevlocity_cmtvlocity_ins
OmniScript/IP コンテナーOmniProcessvlocity_cmt__OmniScript__cvlocity_ins__OmniScript__c
OmniScript/IP 要素OmniProcessElementvlocity_cmt__Element__cvlocity_ins__Element__c
FlexCardOmniUiCardvlocity_cmt__VlocityUITemplate__cvlocity_ins__VlocityUITemplate__c
Data MapperOmniDataTransformvlocity_cmt__DRBundle__cvlocity_ins__DRBundle__c
Data Mapper 項目OmniDataTransformItemvlocity_cmt__DRMapItem__cvlocity_ins__DRMapItem__c
主要なフィールド
概念コアフィールドvlocity_cmt フィールドvlocity_ins フィールド
スクリプトの種類Typevlocity_cmt__Type__cvlocity_ins__Type__c
スクリプトのサブタイプSubTypevlocity_cmt__SubType__cvlocity_ins__SubType__c
言語Languagevlocity_cmt__Language__cvlocity_ins__Language__c
有効かどうかIsActivevlocity_cmt__IsActive__cvlocity_ins__IsActive__c
バージョンVersionNumbervlocity_cmt__Version__cvlocity_ins__Version__c
要素の設定PropertySetConfigvlocity_cmt__PropertySet__cvlocity_ins__PropertySet__c
Integration Procedure かどうかIsIntegrationProcedurevlocity_cmt__IsIntegrationProcedure__cvlocity_ins__IsIntegrationProcedure__c
FlexCard のデータソースDataSourceConfigvlocity_cmt__Definition__cvlocity_ins__Definition__c
FlexCard のレイアウト/状態PropertySetConfig(同じフィールド)(同じフィールド)
DM の入力オブジェクトInputObjectName(Item 上)vlocity_cmt__InterfaceObject__cvlocity_ins__InterfaceObject__c
DM の出力オブジェクトOutputObjectName(Item 上)vlocity_cmt__TargetFieldObjectType__cvlocity_ins__TargetFieldObjectType__c

参照:references/namespace-guide.md に、デプロイ用のメタデータ型名を含む完全なリファレンスがあります。


CLI コマンドリファレンス

名前空間の検出
# Probe all three namespaces (run sequentially, first success wins)
sf data query --query "SELECT COUNT() FROM OmniProcess" --target-org myorg --json 2>/dev/null && echo "CORE" || \
sf data query --query "SELECT COUNT() FROM vlocity_cmt__OmniScript__c" --target-org myorg --json 2>/dev/null && echo "VLOCITY_CMT" || \
sf data query --query "SELECT COUNT() FROM vlocity_ins__OmniScript__c" --target-org myorg --json 2>/dev/null && echo "VLOCITY_INS" || \
echo "NOT_INSTALLED"
コンポーネントの一覧(コア名前空間)
# Count OmniScripts
sf data query --query "SELECT COUNT() FROM OmniProcess WHERE IsIntegrationProcedure = false" \
  --target-org myorg --json

# Count Integration Procedures
sf data query --query "SELECT COUNT() FROM OmniProcess WHERE IsIntegrationProcedure = true" \
  --target-org myorg --json

# Count FlexCards
sf data query --query "SELECT COUNT() FROM OmniUiCard" --target-org myorg --json

# Count Data Mappers
sf data query --query "SELECT COUNT() FROM OmniDataTransform" --target-org myorg --json
依存関係データの抽出(コア名前空間)
# Get OmniScript elements with their config
sf data query --query "SELECT Id, OmniProcessId, Name, Type, PropertySetConfig FROM OmniProcessElement WHERE OmniProcessId = '{process_id}'" \
  --target-org myorg --json

# Get FlexCard data sources (for dependency parsing)
sf data query --query "SELECT Id, Name, DataSourceConfig FROM OmniUiCard WHERE IsActive = true" \
  --target-org myorg --json

# Get Data Mapper items (for object dependencies)
sf data query --query "SELECT Id, OmniDataTransformationId, InputObjectName, OutputObjectName FROM OmniDataTransformItem" \
  --target-org myorg --json

スキル間の連携

スキル関係このスキルの役割
sf-industry-commoncore-datamapper名前空間とオブジェクトの依存関係データを提供Data Mapper の作成では、検出された名前空間を使って正しい API 名を使用します
sf-industry-commoncore-integration-procedure名前空間と IP の依存関係マップを提供IP の作成では、依存関係グラフを使って循環参照を回避します
sf-industry-commoncore-omniscript名前空間と要素の依存関係データを提供OmniScript の作成では、名前空間に対応したフィールド名を使用します
sf-industry-commoncore-flexcard名前空間とデータソースの依存関係マップを提供FlexCard の作成では、検出された IP 参照を使って検証します
sf-diagram-mermaid依存関係グラフを可視化に使用このスキルは、sf-diagram-mermaid のスタイルに対応した Mermaid 出力を生成します
sf-metadataData Mapper の分析用に sObject メタデータを提供依存関係の抽出中にオブジェクトフィールドを検証します
sf-deployデプロイでは名前空間に対応したメタデータ型を使用このスキルは、名前空間ごとの正しいメタデータ型名を提供します

エッジケース

シナリオ対応
複数の名前空間が混在する組織(移行中)3 つすべての名前空間を確認し、複数の名前空間で結果が返された場合は報告します。コンポーネントは、旧名前空間と移行後の名前空間の両方に存在することがあります。
依存関係のある非アクティブなコンポーネント依存関係グラフに含めますが、非アクティブとしてマークします。アクティブなコンポーネントが非アクティブなコンポーネントに依存している場合は警告します。
大規模な組織(コンポーネントが 1000 個以上)SOQL のページネーション(LIMIT/OFFSET または queryMore)を使用します。200 件ずつバッチ処理します。
PropertySetConfig が SOQL のフィールド長を超える設定が切り詰められた要素について、Tooling API または REST API を使って JSON 本文全体を取得します。
循環依存が検出された循環の経路(A → B → C → A)を記録し、関与するすべての辺をマークして、残りの分岐の走査を続行します。
削除済みの項目を参照するコンポーネント出力に「参照切れ」として記録します。クリーンアップ対象としてフラグを付けます。
バージョンの競合(複数のアクティブバージョン)実行時には、最も高いアクティブバージョン番号のみが対象になります。低いバージョンに固有の依存関係がある場合は警告します。

注意事項

  • 依存関係:組織認証済みの sf CLI が必要です。オプション:スタイル付きの可視化には sf-diagram-mermaid を使用できます。
  • 最初に名前空間を検出する必要があります:後続のすべてのクエリは、正しいオブジェクト名とフィールド API 名を把握していることを前提とします。
  • PropertySetConfig が鍵です:依存関係情報のほぼすべては、OmniProcessElement レコードのこの JSON フィールドに格納されています。
  • FlexCard の DataSourceConfig:データソースは DataSourceConfig にあり、Definition フィールドにはありません(OmniUiCard にこのフィールドは存在しません)。カードのレイアウトと状態は PropertySetConfig にあります。
  • Data Mapper 項目にはオブジェクト参照が含まれます:OmniDataTransformItem レコードの InputObjectName と OutputObjectName から、Data Mapper が読み取りおよび書き込みを行う sObject を確認できます。親への外部キーは OmniDataTransformationId(「Transformation」を含む完全な名前)です。
  • IsIntegrationProcedure は判別項目です:OmniProcess では、存在しない TypeCategory フィールドではなく、ブール値の IsIntegrationProcedure フィールドを使用します。OmniProcessType 選択リストはこのブール値から計算されるもので、読み取りのフィルタリングには便利ですが、作成時に直接設定することはできません。
  • sf data create record の制限:--values フラグでは、テキストエリアフィールド内の JSON 文字列(例:PropertySetConfig)を処理できません。JSON 設定を含むレコードには、代わりに sf api request rest --method POST --body @file.json を使用してください。
  • 関連スキルをインストールする:/plugin install github:Jaganpro/sf-skills/sf-industry-commoncore-datamapper、/plugin install github:Jaganpro/sf-skills/sf-industry-commoncore-integration-procedure、/plugin install github:Jaganpro/sf-skills/sf-industry-commoncore-omniscript、/plugin install github:Jaganpro/sf-skills/sf-industry-commoncore-flexcard

ライセンス

MIT ライセンス。 Copyright (c) 2026 David Ryan (weytani)

コメント