mcpField
S
salesforce-flow-design

salesforce-flow-design

github.com/github開発40.5k839 回インストール今日更新
リポジトリ

salesforce-flow-design について

Salesforce の自動化を設計・レビューするチーム向けの Flow スキルです。Flow の適否、バルク処理の安全性、障害処理、画面設計、デプロイ時のリスクを確認できます。

主な機能

  1. 01Flow と他の手段の選択
  2. 02適切な Flow 種別の選定
  3. 03バルク処理パターンの確認
  4. 04障害パスの追加
  5. 05自動化の重複確認
  6. 06有効化前のテスト

活用シーン

  1. 01要件が Flow に適するか判断
  2. 02Flow のガバナー制限リスクを確認
  3. 03エラー処理と Screen Flow UX の改善
  4. 04デプロイ前の自動化競合の確認

インストール

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

$npx skills add https://github.com/github/awesome-copilot --skill salesforce-flow-design

インストール後、Claude Code で/salesforce-flow-designを入力して読み込まれたか確認します。

詳細

Salesforce Flow の設計と検証

設計、構築、レビューするすべての Flow に、次のチェックを適用してください。

ステップ 1 — Flow が適切なツールか確認する

Flow を設計する前に、より軽量な宣言型の方法で問題を解決できないか確認してください。

要件最適なツール
副作用なしで項目値を計算する数式項目
ユーザーメッセージを表示して不正なレコード保存を防ぐ入力規則
親レコード上で子レコードを合計またはカウントする積み上げ集計項目
複雑な複数オブジェクトのロジック、コールアウト、大量データ処理Apex(Queueable / Batch)— Flow ではありません
その他すべてFlow ✓

数式項目または入力規則で置き換えられる Flow を構築している場合、その要件が本当により複雑なのか、ユーザーに確認してください。

ステップ 2 — 適切な Flow の種類を選ぶ

ユースケースFlow の種類主な制約
保存前に同じレコードの項目を更新する保存前レコードトリガーメール送信、コールアウト、関連レコードの変更はできません
関連レコード、メール、コールアウトを作成または更新する保存後レコードトリガーコミット後に実行されます — 再帰の落とし穴を避けてください
複数ステップの UI プロセスをユーザーに案内する画面 Flowレコードイベントによって自動的にトリガーすることはできません
別の Flow から呼び出される再利用可能なバックグラウンドロジック自動起動(サブフロー)入出力変数で契約を定義します
Apex @InvocableMethod から呼び出されるロジック自動起動(呼び出し可能)入出力変数を宣言する必要があります
時間ベースのバッチ処理スケジュール済み Flowバッチコンテキストで実行されます — ガバナ制限を守ってください
イベントへの応答(Platform Events / CDC)プラットフォームイベントトリガー非同期で実行されます — 結果整合性となります

判断ルール:トリガーとなったレコード自身の項目だけを変更する場合は、保存前を選んでください。関連レコードの変更、メール送信、またはコールアウトが必要になった時点で、保存後に切り替えてください。

ステップ 3 — 一括処理の安全性チェックリスト

次のパターンは、大規模な処理でガバナ制限違反を引き起こします。Flow を有効化する前に、すべて確認してください。

ループ内の DML — 即時不合格
Loop element
  └── Create Records / Update Records / Delete Records  ← ❌ DML inside loop

修正方法:ループ内でレコードをコレクション変数に集めてから、DML 要素をループの外で実行します。

ループ内のレコード取得 — 即時不合格
Loop element
  └── Get Records  ← ❌ SOQL inside loop

修正方法:ループの前にレコード取得クエリを実行してから、コレクション変数をループ処理します。

適切な一括処理パターン
Get Records — collect all records in one query
└── Loop over the collection variable
    └── Decision / Assignment (no DML, no Get Records)
└── After the loop: Create/Update/Delete Records — one DML operation
Transform とループの使い分け

コレクションの形を変えることが目的の場合(例:あるオブジェクトから別のオブジェクトへ項目値をマッピングする場合)、ループ+割り当てパターンではなく、Transform 要素を使用してください。Transform は設計上、一括処理に安全で、より見やすい Flow グラフを作成できます。

ステップ 4 — フォールトパスの要件

実行時に失敗する可能性があるすべての要素には、フォールトコネクタが必要です。フォールトパスのない Flow は、未加工のシステムエラーをユーザーに表示します。

フォールトコネクタが必要な要素
  • レコードを作成
  • レコードを更新
  • レコードを削除
  • レコードを取得(存在しない可能性がある必須レコードにアクセスする場合)
  • メールを送信
  • HTTP コールアウト/外部サービスアクション
  • Apex アクション(呼び出し可能)
  • サブフロー(サブフローがフォールトを発生させる可能性がある場合)
フォールトハンドラーパターン
Fault connector → Log Error (Create Records on a logging object or fire a Platform Event)
               → Screen element with user-friendly message (Screen Flows)
               → Stop / End element (Record-Triggered Flows)

フォールトパスを、フォールトが発生した同じ要素に決して接続しないでください。無限ループが発生します。

ステップ 5 — 自動化の密度を確認する

デプロイ前に、同じオブジェクトおよびトリガーイベントで重複する自動化がないことを確認してください。

  • 同じ Object + When to Run の組み合わせで有効になっている他のレコードトリガー Flow
  • 同じオブジェクトで有効なレガシー Process Builder ルール
  • 同じ項目の変更時に実行されるワークフロールール
  • 同じ before insert / after update コンテキストで実行される Apex トリガー

自動化が重複すると、予期しない実行順序、再帰、ガバナ制限違反が発生する可能性があります。有効化する前に、そのオブジェクトの自動化一覧を文書化してください。

ステップ 6 — 画面フローの UX ガイドライン

  • 画面フローのすべての経路が End 要素に到達するようにします。孤立した分岐を作らないでください。
  • 複数ステップのフローでは、戻る操作によってデータが破損する場合を除き、Back ナビゲーションを用意します。
  • すべてのユーザー入力には lightning-input と SLDS 準拠のコンポーネントを使用します。HTML フォーム要素は使用しないでください。
  • ユーザーが次に進む前に、画面上で必須入力を検証します。画面上の Flow 検証ルールを使用してください。
  • セッションをまたいでユーザーの操作を待つ必要がある場合は、Pause 要素を処理します。

ステップ 7 — デプロイの安全性

Deploy as Draft    →   Test with 1 record   →   Test with 200+ records   →   Activate
  • まず必ず Draft としてデプロイし、有効化する前に十分にテストします。
  • レコードトリガーフローの場合:正確なエントリー条件(例:ISCHANGED(Status))を使ってテストします。テストデータが実際にその条件を満たすことを確認してください。
  • スケジュール済みフローの場合:本番環境で有効にする前に、サンドボックスで少量のバッチを使ってテストします。
  • オブジェクトの自動化密度スコアを確認します。1 つのオブジェクトで有効な自動化が 3 つを超えると、実行順序に関するリスクが高まります。

クイックリファレンス — フローのアンチパターンの概要

アンチパターンリスク対処法
ループ内の DML 要素ガバナー制限の例外DML をループの外に移動する
ループ内の Get RecordsSOQL ガバナー制限の例外ループの前にクエリを実行する
DML/メール/コールアウト要素にフォールトコネクタがない未処理の例外がユーザーに表示されるそのような要素すべてにフォールトパスを追加する
再帰ガードなしで、保存後フロー内のトリガーレコードを更新する無限のトリガーループエントリー条件または再帰ガード変数を追加する
$Record コレクションを直接ループする大規模時に誤った動作が発生するまずコレクション変数に割り当ててからループする
新しい Flow と並行して Process Builder が有効なままになっている二重実行、予期しない実行順序Flow を有効化する前に Process Builder を無効化する
すべての分岐に End 要素がない画面フロー実行時エラーまたはユーザーが先に進めなくなるすべての分岐が End 要素に到達するようにする

コメント