sf-flow について
sf-flowは、SalesforceのFlow XML生成とProcess Builder移行を支援するスキルです。Salesforceの自動化を構築・保守する開発者向けに、エラー処理、依存関係のデプロイ、カバレッジ確認を案内します。
主な機能
- 01.flow-meta.xmlファイルの生成
- 02Process Builderの移行と統合
- 03複数のFlowタイプに対応
- 04DMLとコールアウトへの障害パス追加
- 05カスタム権限メタデータの生成
- 06Flowテストカバレッジの確認
活用シーン
- 01Process Builderを統合したFlowへ変換
- 02レコードトリガーFlowや画面Flowの作成
- 03DMLエラーのログ記録や通知経路の追加
- 04Flowをデプロイして分岐カバレッジを確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ clientell-ai/ salesforce-skills --skill sf-flowインストール後、Claude Code で/sf-flowを入力して読み込まれたか確認します。
同梱ファイルreferences/flow-elements.mdreferences/global-variables.md
詳細
フロージェネレーターとプロセスビルダーマイグレーター
Salesforce Flow のスペシャリストとして、適切な .flow-meta.xml ファイルを生成し、Process Builder を最適化された Flow に移行します。
Flow のベストプラクティス
アーキテクチャルール
- オブジェクトごとにレコードトリガーフローは最大 3 つ(保存前、保存後、削除前)
- すべてのレコードトリガーフローで、カスタム権限によるバイパスメカニズムを使用します
- Process Builder のロジックを統合します。安易に 1 対 1 で変換しないでください
- 再利用可能なロジックにはサブフローを使用します
- すべての DML 要素とコールアウト要素にフォールトコネクタを設定します
バイパスパターン
すべてのレコードトリガーフローは、次を確認する Decision 要素から開始します。
<decisions>
<name>Check_Bypass</name>
<label>Check Bypass</label>
<defaultConnector>
<targetReference>Main_Logic</targetReference>
</defaultConnector>
<defaultConnectorLabel>Continue</defaultConnectorLabel>
<rules>
<name>Is_Bypassed</name>
<conditionLogic>or</conditionLogic>
<conditions>
<leftValueReference>$Permission.Bypass_Automation</leftValueReference>
<operator>EqualTo</operator>
<rightValue>
<booleanValue>true</booleanValue>
</rightValue>
</conditions>
<label>Bypassed</label>
</rules>
</decisions>
Flow の種類
-
レコードトリガーフロー(Process Builder と Workflow Rules を置き換えます)
before save— 項目の更新(DML が不要で、最も効率的です)after save— 関連レコードの更新、コールアウト、プラットフォームイベントbefore delete— 検証、カスケード操作
-
画面フロー — ユーザー向けのウィザード、ガイド付きプロセス
-
自動起動フロー — Apex、他のフロー、またはプラットフォームイベントから起動
-
スケジュール済みフロー — 時間ベースのバッチ処理
Flow XML 構造
<?xml version="1.0" encoding="UTF-8"?>
<Flow xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>62.0</apiVersion>
<label>Account Before Save</label>
<processType>AutoLaunchedFlow</processType>
<triggerType>RecordBeforeSave</triggerType>
<objectType>Account</objectType>
<triggerOrder>1</triggerOrder>
<status>Active</status>
</Flow>
Process Builder の移行
移行手順
- インベントリ:
force-app/main/default/flows/から Process Builder のメタデータを読み取ります - 分析:すべての条件ノードとアクションを特定します
- 統合:同じオブジェクトの関連する PB を 1 つのフローにまとめます
- 生成:次の要素を含む最適化された Flow XML を作成します
- エントリ時のバイパス判定
- 統合した条件を Decision 要素として設定
- 項目の更新を Assignment 要素(保存前)または Record Update 要素(保存後)として設定
- 関連レコードの更新を Get 要素と Update 要素として設定
- 依存関係:最初にカスタム権限とカスタムメタデータをデプロイします
- デプロイ:
sf project deploy start -d force-app/main/default/flows/ - 確認:フローが有効で、PB が無効化されていることを確認します
よくある PB → Flow の変換
| Process Builder | Flow での対応 |
|---|---|
| 条件ノード | Decision 要素 |
| 項目の更新(同じレコード) | 保存前の Assignment |
| 項目の更新(関連レコード) | 保存後の Get Records + Update Records |
| レコードの作成 | 保存後の Create Records |
| Email Alert | 保存後のアクション(Email Alert) |
| Chatter への投稿 | 保存後の Create Records(FeedItem) |
| Apex の呼び出し | 保存後のアクション(Apex) |
| スケジュール済みアクション | 保存後のフロー上のスケジュール済みパス |
エラー処理
- すべての DML 要素とコールアウト要素にフォールトコネクタを追加します
- フォールトパスではログレコードを作成するか、管理者に通知します
- エラーログでは
$Flow.FaultMessageと$Flow.InterviewGuidを使用します
Flow の全種類
- レコードトリガー — 保存前、保存後、削除前
- 画面フロー — 画面、入力、選択肢を備えたユーザー向けのウィザード
- 自動起動 — Apex、他のフロー、または REST API から起動
- スケジュール済み — 時間ベースのバッチ処理(1 日あたり最大 250K 件のインタビュー)
- プラットフォームイベントトリガー — Platform Events を購読
- オーケストレーション — ステージを含む複数ステップの承認/業務プロセス
グローバル変数
| 変数 | 説明 | 例 |
|---|---|---|
$Record | トリガーされたレコード(すべての項目) | {!$Record.Name} |
$Record__Prior | 以前の項目値 | {!$Record__Prior.Status__c} |
$Api | セッション/サーバー情報 | {!$Api.Session_ID} |
$Organization | 組織情報 | {!$Organization.Name} |
$Profile | 現在のユーザーのプロファイル | {!$Profile.Name} |
$User | 現在のユーザーの項目 | {!$User.Email} |
$Flow | 実行時情報 | {!$Flow.FaultMessage} |
$Permission | カスタム権限の確認 | {!$Permission.Bypass_Automation} |
$Label | カスタム表示ラベル | {!$Label.Error_Message} |
$Setup | カスタムメタデータ | {!$Setup.Config__mdt.Value__c} |
画面フローの要素
- 選択肢セット:静的な選択肢、SOQL による動的な選択肢、選択リストの選択肢
- 条件付き表示:条件に基づいてコンポーネントを表示または非表示にします
- ステージ:ガイド付きフロー用の複数ステップの進行状況インジケーター
- 検証:コンポーネント単位および画面単位の検証数式
コレクション操作
- ループ:ループ変数を使ってコレクションを反復処理します
- コレクションに追加:Add 演算子を使う割り当て要素
- フィルター:ループ内の Decision 要素でフィルター済みコレクションを構築します
スケジュール済みパス
Workflow の時間ベースのアクションを置き換えるには、レコード項目値を基準とした時間オフセット(時間、日数)を指定して、保存後フローにスケジュール済みパスを追加します。
フローテストのカバレッジ
- フローでテストカバレッジを追跡できるようになりました(FlowTestCoverage オブジェクト)
- すべての Decision 分岐を実行するフローテストを作成します
- 次のコマンドでカバレッジを確認します:
SELECT FlowVersionId, NumElementsCovered, NumElementsNotCovered FROM FlowTestCoverage
注意点
- フローインタビューの上限はスケジュール済みフローで 1 日あたり 250,000 件です。計画に反映してください
- フロー内のループでの DML は、Apex と同様にガバナ制限に達します
- 保存前フローでの
$Recordの変更は、レコードが保存されるときにのみ確定します - 数式項目には、同じフロー内で先に行われた変更は反映されません
- スケジュール済みフローはシステムコンテキストで実行されます。WITH USER_MODE に相当するものはありません
- フローには、失敗したコールアウトに対するネイティブの再試行メカニズムがありません
- 大規模なデータセットでは、コレクション変数が大量のメモリを消費することがあります
- サブフローの変数マッピングでは、型を正確に一致させる必要があります。null や型の不一致があると実行時エラーが発生します
- カスタム権限のチェック結果はキャッシュされるため、最近の変更がすぐには反映されないことがあります
ワークフロー
- 移行する場合:Glob/Read ツールで既存の PB メタデータを読み取ります
- 要件または既存の自動化ロジックを分析します
.flow-meta.xmlファイルを生成します- 必要なカスタム権限メタデータを生成します
- 依存関係を先にデプロイし、その後フローをデプロイします
- フローテストのカバレッジを確認します:
FlowTestCoverageをクエリして、すべての Decision 分岐が実行されていることを確認します - 検証手順を提示します
参考資料
コメント
Markdown 対応