sf-industry-commoncore-omnistudio-analyze について
Salesforce Industries の OmniStudio を分析するスキルです。名前空間の特定、コンポーネントの棚卸し、依存関係の追跡を行い、循環参照検出と Mermaid 図で変更影響の確認を支援します。
主な機能
- 01Core、vlocity_cmt、vlocity_ins の名前空間特定
- 02OmniStudio コンポーネントの状態とバージョンの棚卸し
- 03循環参照を検出する依存関係グラフの構築
- 04コンポーネント変更の影響分析
- 05Mermaid 図とレポートの生成
活用シーン
- 01組織で使われている OmniStudio 名前空間の確認
- 02OmniScript や FlexCard などの依存関係の整理
- 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.mdLICENSEreferences/dependency-patterns.mdnamespace-guide.md詳細
sf-industry-commoncore-omnistudio-analyze:OmniStudio コンポーネント横断分析
名前空間の検出、依存関係のマッピング、OmniStudio コンポーネントスイート全体にわたる影響分析を専門とする OmniStudio アナリストです。OmniScript、FlexCard、Integration Procedure、Data Mapper の組織全体のインベントリを作成し、依存関係グラフを自動構築して Mermaid で可視化します。
主な役割
- 名前空間の検出:組織で Core(Industries)、vlocity_cmt(Communications, Media & Energy)、vlocity_ins(Insurance & Health)のいずれの名前空間が使われているかを特定します
- 依存関係の分析:循環参照を検出しながら、BFS トラバーサルを使用してコンポーネント間の依存関係を有向グラフとして構築します
- 影響分析:特定の OmniScript、IP、FlexCard、Data Mapper を変更した場合に、どのコンポーネントが影響を受けるかを判断します
- Mermaid による可視化:ドキュメントやレビュー用に、依存関係図を Mermaid 構文で生成します
- 組織全体のインベントリ: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() が正常に返されるまで、順番にオブジェクトを検証します。
-
Core(Industries 名前空間):
SELECT COUNT() FROM OmniProcessこれが成功した場合、組織では Core 名前空間が使われています(API 234.0+/Spring '22+)。
-
vlocity_cmt(Communications, Media & Energy):
SELECT COUNT() FROM vlocity_cmt__OmniScript__c -
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 Action | bundle, bundleName | Data Mapper(名前で指定) |
| DataRaptor Turbo Action | bundle, bundleName | Data Mapper(名前で指定) |
| Remote Action | remoteClass, remoteMethod | Apex Class.Method |
| Integration Procedure Action | integrationProcedureKey | IP(Type_SubType) |
| OmniScript Action | omniScriptKey or Type/SubType | OmniScript(Type_SubType) |
| HTTP Action | httpUrl, httpMethod | 外部エンドポイント(URL) |
| DocuSign Envelope Action | docuSignTemplateId | DocuSign テンプレート |
| Apex Remote Action | remoteClass | Apex 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 オブジェクトとフィールドの完全なマッピング:
主要オブジェクト
| 概念 | Core | vlocity_cmt | vlocity_ins |
|---|---|---|---|
| OmniScript/IP コンテナー | OmniProcess | vlocity_cmt__OmniScript__c | vlocity_ins__OmniScript__c |
| OmniScript/IP 要素 | OmniProcessElement | vlocity_cmt__Element__c | vlocity_ins__Element__c |
| FlexCard | OmniUiCard | vlocity_cmt__VlocityUITemplate__c | vlocity_ins__VlocityUITemplate__c |
| Data Mapper | OmniDataTransform | vlocity_cmt__DRBundle__c | vlocity_ins__DRBundle__c |
| Data Mapper 項目 | OmniDataTransformItem | vlocity_cmt__DRMapItem__c | vlocity_ins__DRMapItem__c |
主要なフィールド
| 概念 | コアフィールド | vlocity_cmt フィールド | vlocity_ins フィールド |
|---|---|---|---|
| スクリプトの種類 | Type | vlocity_cmt__Type__c | vlocity_ins__Type__c |
| スクリプトのサブタイプ | SubType | vlocity_cmt__SubType__c | vlocity_ins__SubType__c |
| 言語 | Language | vlocity_cmt__Language__c | vlocity_ins__Language__c |
| 有効かどうか | IsActive | vlocity_cmt__IsActive__c | vlocity_ins__IsActive__c |
| バージョン | VersionNumber | vlocity_cmt__Version__c | vlocity_ins__Version__c |
| 要素の設定 | PropertySetConfig | vlocity_cmt__PropertySet__c | vlocity_ins__PropertySet__c |
| Integration Procedure かどうか | IsIntegrationProcedure | vlocity_cmt__IsIntegrationProcedure__c | vlocity_ins__IsIntegrationProcedure__c |
| FlexCard のデータソース | DataSourceConfig | vlocity_cmt__Definition__c | vlocity_ins__Definition__c |
| FlexCard のレイアウト/状態 | PropertySetConfig | (同じフィールド) | (同じフィールド) |
| DM の入力オブジェクト | InputObjectName(Item 上) | vlocity_cmt__InterfaceObject__c | vlocity_ins__InterfaceObject__c |
| DM の出力オブジェクト | OutputObjectName(Item 上) | vlocity_cmt__TargetFieldObjectType__c | vlocity_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-metadata | Data Mapper の分析用に sObject メタデータを提供 | 依存関係の抽出中にオブジェクトフィールドを検証します |
| sf-deploy | デプロイでは名前空間に対応したメタデータ型を使用 | このスキルは、名前空間ごとの正しいメタデータ型名を提供します |
エッジケース
| シナリオ | 対応 |
|---|---|
| 複数の名前空間が混在する組織(移行中) | 3 つすべての名前空間を確認し、複数の名前空間で結果が返された場合は報告します。コンポーネントは、旧名前空間と移行後の名前空間の両方に存在することがあります。 |
| 依存関係のある非アクティブなコンポーネント | 依存関係グラフに含めますが、非アクティブとしてマークします。アクティブなコンポーネントが非アクティブなコンポーネントに依存している場合は警告します。 |
| 大規模な組織(コンポーネントが 1000 個以上) | SOQL のページネーション(LIMIT/OFFSET または queryMore)を使用します。200 件ずつバッチ処理します。 |
| PropertySetConfig が SOQL のフィールド長を超える | 設定が切り詰められた要素について、Tooling API または REST API を使って JSON 本文全体を取得します。 |
| 循環依存が検出された | 循環の経路(A → B → C → A)を記録し、関与するすべての辺をマークして、残りの分岐の走査を続行します。 |
| 削除済みの項目を参照するコンポーネント | 出力に「参照切れ」として記録します。クリーンアップ対象としてフラグを付けます。 |
| バージョンの競合(複数のアクティブバージョン) | 実行時には、最も高いアクティブバージョン番号のみが対象になります。低いバージョンに固有の依存関係がある場合は警告します。 |
注意事項
- 依存関係:組織認証済みの
sfCLI が必要です。オプション:スタイル付きの可視化には 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)