sf-diagram について
sf-diagramは、Salesforceのメタデータ、Apexコード、Flow定義からMermaid図を生成するスキルです。データモデルやコード構造、実行フロー、デプロイ依存関係を記録する開発者向けです。
主な機能
- 01オブジェクトと項目メタデータからERDを生成
- 02Apexクラスと依存関係を整理
- 03連携と実行シーケンスを可視化
- 04Flow XMLをフローチャートに変換
- 05メタデータのデプロイ依存関係を図示
- 06大規模な図を機能領域ごとに分割
活用シーン
- 01カスタムオブジェクトの関係を記録
- 02Apexクラス構造と呼び出し経路を説明
- 03Salesforce Flowや連携処理を追跡
- 04メタデータのデプロイ順序を計画
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ clientell-ai/ salesforce-skills --skill sf-diagramインストール後、Claude Code で/sf-diagramを入力して読み込まれたか確認します。
同梱ファイルreferences/diagram-reference.md
詳細
Salesforce 図表ジェネレーター
Salesforce のアーキテクチャ図作成を専門としています。実際の組織メタデータ、Apex ソース、Flow 定義を読み取り、正確な Mermaid 図を生成します。図はすべて、利用可能な場合は実際のプロジェクトファイルに基づいて作成します。
1. エンティティ関係図(ERD)
Salesforce のカスタムオブジェクトとそのリレーションから、Mermaid の erDiagram を生成します。
ERD の作成方法
-
オブジェクトメタデータを検索する — Glob を使用して
.object-meta.xmlファイルを検索します:Glob: force-app/**/objects/**/*.object-meta.xml -
項目メタデータを検索する — 各オブジェクトの
.field-meta.xmlを検索します:Glob: force-app/**/objects/*/fields/*.field-meta.xml -
リレーションを特定する — 各項目ファイルを読み取り、次を探します:
<type>Lookup</type>— 任意のリレーション(0 または 1 対多)<type>MasterDetail</type>— 必須のリレーション(1 対多、連鎖削除)<referenceTo>ObjectName</referenceTo>— 関連するオブジェクト
-
erDiagram として描画する(完全なテンプレートについては diagram-reference.md を参照してください):
erDiagram
Account ||--o{ Contact : "has"
Account ||--o{ Opportunity : "has"
Opportunity ||--|{ OpportunityLineItem : "contains"
Contact ||--o{ Case : "raised by"
Account ||--o{ Case : "related to"
Account {
Id Id PK
string Name
string Industry
}
Contact {
Id Id PK
Id AccountId FK
string LastName
string Email
}
リレーションの表記
| Salesforce のリレーション | Mermaid の表記 | 意味 |
|---|---|---|
| 主従関係 | ||--|{ | 1(必須)対多 |
| Lookup(必須) | ||--o{ | 1 対多(親は任意) |
| Lookup(任意) | }o--|| | 多対0または1 |
| 多対多(ジャンクション) | 2 つの ||--|{ | 2 つの主従関係を持つジャンクションオブジェクト |
| 自己リレーション | エンティティから自身へ | 例:Account の階層 |
ERD のフィルタリングルール
- 含める:カスタムオブジェクト(
__c)、カスタム項目から参照される標準オブジェクト - デフォルトで除外する:システム監査項目、メタデータオブジェクト、設定オブジェクト
- 項目の表示:ユーザーが完全な詳細を求めない限り、主要な項目(Id、Name、外部キー、最大5つのドメイン項目)のみを表示します
- サイズ制限:図あたり約30オブジェクトを上限とし、大規模なモデルは機能ドメインごとに分割します
2. クラス図
Apex ソースファイルから Mermaid の classDiagram を生成します。
クラス図の作成方法
-
Apex クラスを検索する:
Glob: force-app/**/classes/*.cls -
各クラスを解析する — Read/Grep を使用して次を特定します:
- クラス宣言:
public class、public abstract class、public virtual class - インターフェース:
implements SomeInterface - 継承:
extends ParentClass - 主要なメソッド:
public、@AuraEnabled、@InvocableMethod、@HttpGet - 依存関係:本文で参照されている他のクラス
- クラス宣言:
-
classDiagram として描画する(完全なテンプレートについては diagram-reference.md を参照してください):
classDiagram
class TriggerHandler {
<<abstract>>
+run() void
+beforeInsert() void
+afterUpdate() void
}
class AccountTriggerHandler {
+beforeInsert() void
-validateAccounts(List~Account~) void
}
class AccountService {
+getAccountsByIds(Set~Id~) List~Account~
}
TriggerHandler <|-- AccountTriggerHandler : extends
AccountTriggerHandler --> AccountService : uses
クラスのステレオタイプ
| Apex のパターン | Mermaid のステレオタイプ |
|---|---|
| インターフェース | <<interface>> |
| 抽象クラス | <<abstract>> |
| バッチクラス | <<batch>> |
| キュー可能 | <<queueable>> |
| スケジュール可能 | <<schedulable>> |
| REST リソース | <<restresource>> |
| テストクラス | <<test>> |
| トリガーハンドラー | <<handler>> |
可視性マーカー
+public-private#protected~internal(デフォルト/パッケージ)
3. シーケンス図
統合フロー、トリガー実行、非同期処理の Mermaid sequenceDiagram を生成します。
REST 呼び出しシーケンス
sequenceDiagram
autonumber
participant LWC as Lightning Component
participant Ctrl as ApexController
participant Svc as IntegrationService
participant Ext as External API
LWC->>Ctrl: callImperativeMethod()
Ctrl->>Svc: syncRecords(recordIds)
Svc->>Ext: POST /api/v2/records
Ext-->>Svc: 200 OK {response}
Svc-->>Ctrl: IntegrationResult
Ctrl-->>LWC: Return result
Platform Event のパブリッシュ/サブスクライブ
sequenceDiagram
autonumber
participant Pub as Order Service
participant Bus as Event Bus
participant Sub1 as Trigger Subscriber
participant Sub2 as Flow Subscriber
Pub->>Bus: EventBus.publish(Order_Event__e)
Note over Bus: Committed after transaction
Bus-->>Sub1: Trigger receives event
Bus-->>Sub2: Flow receives event
Sub1->>Sub1: Process in new transaction
Note right of Sub1: Separate governor limits
トリガー実行順序、非同期ジョブフロー、エラー処理シーケンスのテンプレートについては、diagram-reference.md を参照してください。
コードからの作成
- フローを特定する — ユーザーに尋ねるか、エントリーポイント(トリガー、LWC、REST エンドポイント)から推測します
- 呼び出しチェーンを追跡する — 関連する各クラスを読み取り、メソッド呼び出しをたどります
- 参加者をマッピングする — 各クラスまたは外部システムを参加者とします
- リクエスト/レスポンスを記録する — 呼び出しには実線の矢印、戻り値には破線の矢印を使用します
- 注記を追加する — 非同期境界、ガバナ制限のリセット、トランザクション境界を示します
4. フロー図
Salesforce Flow XML(.flow-meta.xml)を Mermaid のフローチャートに変換します。
フローの変換方法
-
Flow ファイルを探します:
Glob: force-app/**/flows/*.flow-meta.xml -
Flow の XML 要素を解析します — 各要素の種類を Mermaid のノード形状に対応付けます:
| Flow 要素 | XML タグ | Mermaid の形状 |
|---|---|---|
| 画面 | <screens> | [/ Screen Name /](平行四辺形) |
| 決定 | <decisions> | { Decision Label }(ひし形) |
| 割り当て | <assignments> | [ Assignment Label ](長方形) |
| レコード検索 | <recordLookups> | [( SOQL Query )](スタジアム形) |
| レコード作成 | <recordCreates> | [[ Insert Record ]](サブルーチン) |
| レコード更新 | <recordUpdates> | [[ Update Record ]](サブルーチン) |
| レコード削除 | <recordDeletes> | [[ Delete Record ]](サブルーチン) |
| サブフロー | <subflows> | [[ Subflow Name ]](サブルーチン) |
| アクション | <actionCalls> | ( Action Label )(角丸) |
| ループ | <loops> | { Loop Variable }(ひし形) |
| 開始 | <start> | ([ Start ])(スタジアム形) |
-
コネクターをたどります —
<connector><targetReference>をたどり、エッジを構築します:- デフォルトパスには
<defaultConnector>を使用します - エラーパスには
<faultConnector>を使用します(赤色/破線で描画します) - 決定の結果ごとに、ラベル付きの分岐を作成します
- デフォルトパスには
-
フローチャートとして描画します:
flowchart TD
Start([Start: Record-Triggered]) --> GetAcct[(Lookup Account)]
GetAcct --> CheckStatus{Status = Active?}
CheckStatus -->|Yes| UpdateAcct[[Update Account Rating]]
CheckStatus -->|No| SendEmail(Send Notification Email)
UpdateAcct --> End([End])
SendEmail --> End
フロー図のルール
- 開始ノードと終了ノードを必ず表示します
- 決定分岐には結果の名前をラベルとして付けます
- fault コネクターがある場合は、破線で表示します
- ループは視覚的にグループ化し、ループノードとその本体を表示します
- 大規模な Flow(要素数 20 以上)では、最初に概要を表示し、その後、詳細を提示します
5. デプロイ依存関係図
メタデータのデプロイ順序を、有向非巡回グラフとして表示します。
依存関係グラフの構築方法
- プロジェクトをスキャンします:
Glob: force-app/main/default/**/*-meta.xml - 依存関係をマッピングします:最初にオブジェクト、次に項目、クラス、トリガー、LWC、Flow、権限セット、プロファイルの順にします
- フローチャートとして描画します(完全なテンプレートについては diagram-reference.md を参照してください):
flowchart LR
subgraph "Phase 1: Schema"
Obj[Custom Objects] --> Fields[Custom Fields]
end
subgraph "Phase 2: Code"
Cls[Apex Classes] --> Trg[Apex Triggers]
end
subgraph "Phase 3: UI + Config"
LWC[LWC] --> Pages[FlexiPages]
Flows[Flows]
Perms[Permission Sets]
end
Obj --> Cls
Fields --> Cls
Cls --> LWC
Obj --> Flows
Obj --> Perms
6. データモデルの概要
objects ディレクトリ全体から、包括的なデータモデル図を生成します。
アプローチ
- すべてのオブジェクトをスキャンします:
Glob: force-app/**/objects/*/ - ドメインに分類します — Sales(Account、Contact、Opportunity、Lead)、Service(Case、Entitlement)、Custom(
__cはプレフィックスごとにグループ化) - ドメインごとの ERD と、ドメインを横断する高レベルのビューを生成します
- カーディナリティには項目のメタデータを使用します
ルール
- 機能ドメインごとにサブグラフにグループ化します
- 標準オブジェクトには通常の名前を使用し、カスタムオブジェクトには API 名を表示します
- 各サブグラフのオブジェクト数は約 10~15 個に制限します
- サブグラフ間では、ドメインをまたぐリレーションシップのみを表示します
- 完全なデータモデルのテンプレートについては diagram-reference.md を参照してください
7. Mermaid 構文のクイックリファレンス
Salesforce 向けの図の種類
| Salesforce のユースケース | Mermaid の種類 | 宣言 |
|---|---|---|
| オブジェクトのリレーションシップ | erDiagram | erDiagram |
| Apex クラスの構造 | classDiagram | classDiagram |
| 統合フロー | sequenceDiagram | sequenceDiagram |
| Flow の可視化 | flowchart | flowchart TD または flowchart LR |
| デプロイ順序 | flowchart | flowchart LR |
| タイムライン/リリース | gantt | gantt |
| 状態マシン | stateDiagram-v2 | stateDiagram-v2 |
方向
TD(上から下、フロー)、LR(左から右、ERD/依存関係)、RL、BT
ノードの形状
[Rectangle] プロセス、(Rounded) アクション、{Diamond} 決定、[(Cylinder)] データベース、([Stadium]) 開始/終了、[[Subroutine]] DML/サブフロー、[/Parallelogram/] 画面、((Circle)) コネクター
リンクの種類
--> 実線、-.-> 破線(非同期/障害)、==> 太線(重要)、-->|label| ラベル付き
Salesforce 固有のパターンを含む構文の完全な早見表については、diagram-reference.md を参照してください。
8. 出力形式
- Mermaid(デフォルト):
mermaid言語識別子を指定したフェンス付きコードブロックで囲みます - ASCII の代替形式:ユーザーが「ASCII」または「terminal」と指定した場合に使用します。テンプレートは diagram-reference.md を参照してください
- ユーザーが「both」と指定した場合、またはコンテキストが不明確な場合は、両方を提供します
- 図の後には必ず
Notesセクションを追加し、主要な関係と前提を説明します
9. 注意点
Mermaid の制限事項
- ノード数の上限:Mermaid のレンダラーは約100個を超えると処理に苦労するため、図を絞り込むか分割してください
- 長いラベル:40文字を超えるノードテキストはレイアウトを崩すことがあるため、短くしてください
- 特殊文字:ラベル内の括弧、引用符、コロンは引用符で囲む必要があります
- ジェネリクスの構文:クラス図のジェネリクスでは、
<>の代わりに~を使用します(例:List~Account~) - GitHub:
.mdファイル内の Mermaid をネイティブにレンダリングします。そこで図をテストしてください - VS Code:「Markdown Preview Mermaid Support」拡張機能を使用します
- Confluence / Jira:Mermaid プラグインが必要です。提供する前に利用可能か確認してください
Salesforce 固有の注意点
- ポリモーフィックな参照(WhoId、WhatId):単一の関係として表現できません。注記または複数の任意リンクとして示してください
- レコードタイプ:関係ではありません。別個のエンティティではなく、属性またはステレオタイプとして示してください
- 管理パッケージのオブジェクト:名前空間のプレフィックス(
ns__Object__c)が付く場合があります。プレフィックスを含めてください - 個人取引先:Account と Contact を統合します。有効な場合は、図にその旨を記載してください
- 外部オブジェクト(
__x):外部参照を介して接続します。異なるスタイルで示してください - Big Objects(
__b):非同期の挿入のみ可能です。含める場合は注記してください - 中間オブジェクト:直接の多対多の線ではなく、2つの主従関係を持つエンティティとして描画してください
図を分割する場合
- ERD のオブジェクトが30個を超える場合
- クラス図のクラスが15個を超える場合
- シーケンス図のステップが20個を超える場合
- フローチャートのノードが25個を超える場合
- ドメイン、モジュール、または機能領域ごとに分割します
10. ワークフロー
ERD の生成
- Glob を使用して、すべての
.object-meta.xmlファイルと.field-meta.xmlファイルを検索します - 関係フィールドを読み取り、Lookup と MasterDetail の接続を特定します
- 主要フィールドを含むエンティティ一覧を作成します
- 適切な多重度表記を使って
erDiagramとして描画します - ポリモーフィックな参照や特殊なパターンについて注記を追加します
クラス図の生成
- Glob を使用して、プロジェクト内のすべての
.clsファイルを検索します - 各クラスを読み取り、宣言、extends、implements、主要メソッドを特定します
- パターン(service、selector、handler、controller)ごとにクラスをグループ化します
- ステレオタイプと関係を含めて
classDiagramとして描画します - 継承(
<|--)、コンポジション(*--)、使用(-->)を示します
シーケンス図の生成
- フローのエントリーポイント(ユーザー操作、トリガー、スケジュール、API 呼び出し)を特定します
- 各クラス/メソッドを通じて実行経路を追跡します
- 外部システムへの呼び出しと非同期の境界を特定します
autonumberを指定したsequenceDiagramとして描画します- トランザクションの境界とガバナー制限のリセット地点を示します
フロー図の生成
- Glob を使用して
.flow-meta.xmlファイルを検索します - Flow XML を読み取り、すべての要素とコネクターを特定します
- 各要素タイプを Mermaid のノード形状に対応付けます
<connector>と<defaultConnector>をたどり、エッジを作成します- ラベル付きの判断分岐を含めて
flowchart TDとして描画します
デプロイ依存関係図の生成
- プロジェクト内のすべてのメタデータタイプを調べます
- タイプ間の依存関係(フィールドがオブジェクトを参照する、クラスがオブジェクトを参照するなど)を特定します
- デプロイレイヤーごとに並べます
- 各レイヤーのサブグラフを含めて
flowchart LRとして描画します
一般的なチェックリスト
- 図は実際のメタデータに基づいている(捏造されていない)
- ラベルは正確な API 名、または分かりやすい表示名である
- すべての関係で多重度が正しい
- 図が Mermaid で適切にレンダリングされる(ノード数をテストする)
- Notes セクションで前提と簡略化した箇所を説明している
- 要求された場合に ASCII の代替形式を提供している
参考資料
- 図のリファレンス — テンプレート、例、構文のチートシート、ASCII の代替パターン