Communityライティング&編集github.com

Salesforce Flow モダナイゼーション

Salesforce Flow を、最新のプラットフォーム要素(コレクションフィルター、トランスフォーム、レコード/選択リストの選択肢セット、リアクティブ画面、画面アクション、保存前更新、カスタムエラー、非同期・スケジュールパス、プラットフォームイベントトリガーと待機、エージェントアクションなど)を使用して構築、監査、移行します。ループと判断のパターンの代わりに使用します。フローの作成、レビュー、メタデータ生成、プロセスビルダーやワークフロールールの移行、トラブルシューティングなど、あらゆるフロー作業に活用できます。

Salesforce Flow モダナイゼーション とは?

このスキルは、Salesforce Flow のメタデータ(.flow-meta.xml)を扱うすべての開発者や管理者向けに設計されています。特に Claude Code、Cursor、Codex などの AI エージェントと組み合わせて使用することを想定しており、従来のループ+判断+代入のパターンを、Salesforce が推奨する最新のフロービルダー要素に自動的に置き換えます。これにより、ガバナー制限の超過、非効率的な DML 処理、複雑化した画面遷移といったレガシーパターンに起因する問題を解決します。 スキルは、判断表に基づいて要件を最新要素にマッピングする体系的なワークフローを提供します。各要素の最小 API バージョンと具体的なメタデータ構造が定義されており、デプロイ検証済みのサンプルファイルが examples/ ディレクトリに用意されています。ボットは、ワークフローのチェックリストに従い、org の API バージョンの確認、タスクの分類、サンプルファイルの参照、メタデータの作成、チェッカースクリプト(check-flow.mjs)による検証、そして最終的なデプロイ検証とレビューを実行します。 監査や移行タスクでは、既存のフローに対してチェッカーを実行し、レガシーパターンを洗い出した監査レポートを生成します。レポートは影響度(ガバナー制限 > セキュリティコンテキスト > ユーザーエクスペリエンス)でランク付けされ、計画的な移行を支援します。プロセスビルダーやワークフロールールのマッピングについては専用のリファレンスガイドが提供されています。 このスキルは、開発チームの規約(org-conventions.md)を尊重し、常に明記された例外(エスケープ条件)がない限り、レガシーパターンを許可しません。これにより、常に最新かつ保守性の高いフローの作成が保証されます。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/pariveo/salesforce-agent-skills/tree/HEAD/skills/salesforce-flow-modernizer

Installed? Explore more ライティング&編集 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Salesforce Flow モダナイゼーション は何をしますか?

モデルはデフォルトで、トレーニングデータにある Flow パターン(ループ+判断+代入、ループ内 DML、トリガーレコードの保存後更新、再計算のための追加画面)を採用します。このスキルはそれらを現在の要素に置き換え、各要素のデプロイ検証済みメタデータを examples/ に提供します。

以下のルールがほとんどの結果を決定します。

  1. 最新の要素がデフォルトです。 ループには明示的なエスケープ条件(後述)が必要です。要素の XML に不慣れな場合は、その要素を避けるのではなく、サンプルファイルから形状をコピーしてください。
  2. 検証不可は利用不可を意味しません。 利用可能性は組織の API バージョンと以下の表に従います。要素の最小 API バージョンが組織のバージョン以下の場合、その要素を使用するために Web アクセスは必要ありません。デプロイ検証が確認手段です。
  3. すべてのループと代替手段は説明されます。 ループの説明と成果物にエスケープ条件を明記してください。明記されたエスケープ条件がない限り、ループを作成しないでください。

ワークフロー

以下のチェックリストを作業ノートにコピーし、チェックを入れながら進めてください。

- [ ] 1. references/org-conventions.md を読む。このタスクが依存する未設定のスロットをリストアップする
- [ ] 2. 組織 API バージョンを確認する
- [ ] 3. タスクを分類する:構築、監査、または移行。フロータイプ、トリガーイベント、実行ユーザー
- [ ] 4. すべての要件を判断表にマッピングする。使用する各サンプルを開く
- [ ] 5. メタデータ(または構築仕様書)を作成する
- [ ] 6. scripts/check-flow.mjs を実行する。すべての ERROR を修正し、すべての WARNING を判断する
- [ ] 7. 組織が利用可能な場合はデプロイ検証を実行する。それ以外の場合は XML に未検証のラベルを付ける
- [ ] 8. references/delivery.md のレビューチェックリストを実行し、成果物を納品する

ステップ 1. 規約。 org-conventions.md で設定済みのスロットは、このスキルのデフォルトよりも優先されます。空のスロットはデフォルトが適用されることを意味し、成果物に未決定事項としてリストアップします。

ステップ 2. API バージョン。 組織がある場合、sf org display --target-org <エイリアス> で「API バージョン」が表示されます。組織がない場合は、プロジェクトの sfdx-project.json にある sourceApiVersion を使用し、それもない場合は 67.0 を使用し、その旨を明記します。新しいフローの apiVersion はそのバージョンに設定します。

ステップ 3. 分類。 既存のフローか新しい構築か。フロータイプ(画面、レコードトリガー保存前/保存後、自動起動、スケジュールトリガー、プラットフォームイベントトリガー)。トリガーオブジェクトとトリガーイベントは、サンプルを開く前に要件から回答します。問題は、既に条件を満たしているレコードが作成された場合もカウントするか、それとも条件を満たすように変更されたレコードのみかです。作成と更新で「条件を満たすように更新された場合のみ」は、そのような作成時にも起動しますが、更新のみでは起動しません。要件に明記されていない場合は、質問するか仮定を明記します(record-triggered.md)。実行ユーザー(ユーザー、システム、エージェント)。同期的に実行する必要があるもの。画面フローの場合、それを埋め込むサーフェスと、フローが受け取り返すものを確認します。

ステップ 4. マッピング。 各コレクション操作、選択肢リスト、画面操作、レコード更新、タイミング要件、統合について、判断表から該当する行を取得します。作成するすべての要素のサンプルファイルと、その制限に関するドメインリファレンスを読みます。タスクが扱うドメインのリファレンスのみを読みます。

ステップ 5. 作成。 メタデータは force-app/main/default/flows/<API名>.flow-meta.xml に配置します(プロジェクトのパッケージディレクトリに合わせて調整)。命名のデフォルト:フロー API 名は オブジェクト_動詞_条件、要素名は タイプ_目的(Get_Open_Cases、Filter_High_Priority、Transform_To_Tasks、Dec_Is_Renewal)。ただし、org-conventions.md で別の指定がある場合は除きます。明示的に有効化を依頼された場合、または activation-policy スロットで指定されている場合を除き、<status>Draft</status> に設定します。サンプルは実行されたために Active になっているだけです。同じタイプの要素はすべてファイル内でまとめて配置します(分割グループはデプロイに失敗します)。CLI がない場合は、delivery.md の形式で構築仕様書を納品します。

ステップ 6. チェック。 作成した、またはレビューを依頼されたすべてのフローに対してチェッカーを実行します。必要なのは Node のみです。

node <スキルディレクトリ>/scripts/check-flow.mjs --api <組織APIバージョン> force-app/main/default/flows/<API名>.flow-meta.xml

ERROR はレガシーパターンまたはプラットフォームが拒否する形式であるため、修正します。WARNING は判断が必要であり、その判断を成果物に明記します。

ステップ 7. 検証。 認証済みの組織がある場合、CLI のデフォルト組織に依存せず、組織を明示的に指定します。

sf project deploy validate --source-dir force-app/main/default/flows/<API名>.flow-meta.xml --target-org <エイリアス>

エラーメッセージに基づいて正確に修正し、再実行します。検証されなかった XML は、成果物に未検証と明記します。

ステップ 8. レビューと納品。 delivery.md のレビューチェックリストを実行します。成果物の最後に、次のブロックをすべての行を埋めて追加します。

モード: メタデータ | 構築仕様書
チェッカー: <コマンド> → <n> エラー, <n> 警告 (<警告ごとの判断>)
デプロイ検証: <コマンドと結果> | 未実行, 未検証 (<理由>)
ステータス: ドラフト | アクティブ (<理由>)
実行コンテキスト: <runInMode またはデフォルト、およびそれがこのフロータイプに対して意味すること>
エスケープ: <E-IDとループまたは代替手段ごとの理由> | なし
未決定事項: <このフローが依存する未設定の規約スロット> | なし

実行コンテキストのデフォルト(runInMode DefaultMode):レコードトリガー、スケジュールトリガー、プラットフォームイベントトリガーのフローは、共有なしのシステムコンテキストで実行されます。画面フローと自動起動フローは、UI または REST API から起動された場合はユーザーコンテキストで、Apex または別のフローから呼び出された場合は呼び出し元のコンテキストで実行されます。自動起動は「デフォルトでシステム」ではありません。

監査と移行

既存のフローについては、最初にチェッカーを実行し、次に判断表の最後の列に対して残りのレガシーパターンを棚卸しします。書き換えの前に、delivery.md で定義された監査レポートを、影響度(ガバナー制限 > セキュリティコンテキスト > ユーザーエクスペリエンス)でランク付けして納品します。依頼がない限りフローを変更しないでください。依頼があった場合は、レポートの移行計画に従って順番に進めてください。パターンを説明し、それを作成した人を説明しないでください。ほとんどのレガシーパターンは、作成当時は推奨されたアプローチだったからです。 プロセスビルダーとワークフロールールのマッピングは legacy-migration.md にあります。

判断表

「Org API」は、その要素を持つ最小の組織 API バージョンです(Flow、Metadata API 開発者ガイド)。サンプルは examples/flows/ にあり、API 67.0 でデプロイおよび実行されています。

要件使用する要素メタデータOrg APIサンプル置き換えるパターン
コレクションのうち条件に一致するアイテムを保持するコレクションフィルター (条件または数式)collectionProcessors, FilterCollectionProcessor53Opportunity_Create_Followup_Tasksループ + 判断 + 代入
コレクションからレコードを構築する、フィールドを再形成するトランスフォーム、マップtransforms59Opportunity_Create_Followup_Tasksループ + 代入(コレクション構築)
コレクションの合計またはカウントトランスフォーム、Sum / Count。保存前フローの場合、フィルター + 代入 AssignCount、または合計の場合はループ (E3)transforms, inputParameters59 (プリミティブターゲット 62)Opportunity_Create_Followup_Tasks, Account_Before_Save_Count_Contactsループカウンター
キーで2つのコレクションを結合するトランスフォーム、InnerJoin、同じトランスフォーム内にマッピングtransforms, JoinDefinition63Opportunity_Create_Account_Tasks_Joinedネストされたループ、ループ内のレコード取得
コレクションを並べ替えるコレクションソート (その場でソート)SortCollectionProcessor50Opportunity_Allocate_Budget_Waterfallループ内の手動ソート
多数のレコードを作成、更新、または削除する準備されたコレクションに対する1つのDMLrecordCreates inputReference任意Opportunity_Create_Followup_Tasksループ内 DML
レコードまたは選択リストからのオプションレコード / 選択リスト選択肢セットdynamicChoiceSets任意Account_Order_Entry_Screenレコード取得 + 選択肢構築ループ
入力に応じて変化する合計、表示、テキストリアクティブ数式、visibilityRuleformulas、画面フィールド59Account_Order_Entry_Screen再計算のための2番目の画面
画面上の入力ルールコンポーネント validationRule画面 fields任意Account_Order_Entry_Screen画面後の判断からエラー画面への戻り
画面から離れずにサーバー側ロジックを実行画面アクション + アクションボタンscreens.actions, triggers59Account_Check_Pipeline_Screen次へ、レコード取得、戻る
トリガーレコードのフィールドを設定する保存前フロー、$Record への代入triggerType RecordBeforeSave任意Opportunity_Before_Save_Set_Next_Step$Record への保存後更新レコード
メッセージで保存をブロックするカスタムエラーcustomErrors59Opportunity_Before_Save_Set_Next_Step保存後の補償
関連するフィールドが変更された場合のみ実行エントリ条件、ISCHANGED を使用した filterFormula、「条件を満たすように更新された場合のみ」start55 (数式)Opportunity_Before_Save_Set_Next_Step, Opportunity_Closed_Won_Handover最初の要素としての判断
ユーザーが待つ必要のない呼び出し、メール、無関係な DML非同期パスscheduledPaths AsyncAfterCommit53Opportunity_Closed_Won_Handoverすべて同期
レコード日付の前後の作業スケジュールパスscheduledPaths RecordField51Opportunity_Closed_Won_Handover期限切れレコードをポーリングするスケジュールトリガーフロー
プラットフォームイベントに反応するプラットフォームイベントトリガーフローtriggerType PlatformEvent49Order_Event_Create_TaskFlow ロジックを開始するために記述された Apex トリガー
イベントが到着するまで一時停止プラットフォームイベントを使用した待機要素waits任意Order_Wait_For_Confirmationポーリング
Agentforce エージェント用のフローロジック説明された入力と出力を持つ自動起動フローvariables description任意Case_Get_Status_For_Agent呼び出し可能な Apex ラッパー
1つのオブジェクト上のフロー間の順序トリガー順序triggerOrder54Opportunity_Closed_Won_Handover作成順序への依存
REST API を呼び出すHTTP 呼び出しアクションactionCalls (Builder 生成)統合リファレンス参照なし呼び出しのみのために記述された Apex

トランスフォームは保存前フローでは許可されていません(デプロイエラー)。保存前はトランスフォームよりも優先されるため、トリガーレコードの値は保存前のままであり、そこでの合計は E3 に基づくループであり、保存後のトランスフォームと2回目の保存ではありません。上記のその他すべては、その概念を持つすべてのフロータイプで機能し、ドメインリファレンスに例外がリストされています。

エスケープ条件

レガシーパターンが正しいのは、次のいずれかに該当する場合のみです。ループの <description> に Escape: E<n> <理由> として宣言し、成果物にも記載します。

ID許可されるもの該当する場合のみ
E1ループ各アイテムに、単一値のみを受け入れるアクション、サブフロー、または Apex プラグインへの個別の呼び出しが必要な場合。ループ本体にはその呼び出しが含まれます。
E2ループアイテムの結果が、合計やカウントを超えて、以前のアイテムに依存する場合:変動残高、割り当て、シーケンス番号、ラウンドロビンなど。
E3ループ保存前フローで合計が必要な場合(トランスフォームは許可されていません)。これは意図的なもので、インメモリループは保存後の2回目の保存よりも安価だからです。カウントは代わりにフィルター + AssignCount を使用します。
E4同期パスでの作業同じトランザクションの後の要素が結果を読み取る場合、またはユーザーが保存の完了前に結果を確認する必要がある場合。
E5リアクティブまたは新しい画面機能なし指定された埋め込みサーフェスがそれらをサポートしていない場合:Salesforce Classic ランタイム、Slack(コンポーネントセット制限)、またはリアクティブドキュメントが非リアクティブとしてリストしているコンポーネント。
E6レガシーパターンをそのまま残す監査スコープのみ:フローは依頼された変更の範囲外です。新規または書き換えられたフローには決して適用されません。

以下はエスケープ条件としてカウントされません。

  • 「この組織に要素が存在することを確認できない」(ルール2が適用されるため、API バージョンを確認し、デプロイ検証を実行してください)。
  • 「XML がわからない」(サンプルをコピーしてください)。
  • 「ループの方がシンプルまたは明確です。」
  • 「アイテムごとの条件付き値」(トランスフォーム数式で IF() を使用してください)。
  • 「フィルターとマップを1回のパスで」(フィルター、次にトランスフォーム)。
  • 「サーフェスがサポートしない可能性がある」(サーフェスを指定するか、未決定事項としてリストアップしてください。不明なサーフェスは E5 ではありません)。
  • ループ内での DML またはレコード取得。それらを許可するエスケープ条件はありません。

最もシンプルで十分な要素を使用してください。つまり、フィルタリングのみの場合はフィルター単独、オプションリストが固定の場合は静的な選択肢、呼び出し元が1つのロジックにはサブフローは不要です。

確認する前に主張しない

  • 利用可能性:組織 API バージョンと表を照合します。ライセンス制限のある機能(Agentforce、Einstein、Data 360、一部のオーケストレーションエディション)は、組織が確認するまで仮定として扱い、その旨を明記します。
  • 設計や監査結果を変える制限と GA 状況:公式ソース(help.salesforce.com、developer.salesforce.com)を引用します。記憶から数値を引用しないでください。ドメインリファレンスに検証済みの数値が記載されています。

エラー処理

  • CLI がない、または組織に到達できない:未検証のラベルが付いたメタデータ、または構築仕様書を納品し、その旨を明記します。
  • 検証が失敗する:正確なメッセージに基づいて修正し、チェッカーと検証を再実行します。ドメインリファレンスには、これまでに確認されたデプロイエラーがリストされています。
  • 機能が組織にない(API バージョン、エディション、ライセンス):表の最も近いサポート行を使用し、ギャップとエスケープを明記します。

リファレンス

タスクに必要なものを読んでください。

  • org-conventions.md:チームの決定事項。デフォルトよりも優先されます。
  • collections.md:フィルター、ソート、トランスフォーム(マップ、合計、カウント、結合)、一括 DML、ループ。
  • screens.md:選択肢セット、リアクティブ画面、検証、画面アクション、埋め込み。
  • record-triggered.md:エントリ条件、$Record、保存前/保存後、実行コンテキスト。
  • legacy-migration.md:プロセスビルダーとワークフロールールのマッピング。
  • delivery.md:監査レポート、構築仕様書、レビューチェックリスト、納品ブロックの形式。
  • integration.md(統合リファレンス):HTTP 呼び出し、サブフロー、Apex アクション、エージェントアクション。制限と管理方法。

関連スキル