概要とビジネスシーン
Salesforce Flow は、Salesforce プラットフォーム上でビジネスプロセスをノーコードまたはローコードで自動化するための、非常に強力で柔軟なツールセットです。これにより、手作業によるプロセスを効率化し、データの整合性を向上させ、ユーザーエクスペリエンスを最適化することが可能になります。Flow は、レコードの作成・更新、スケジュールされたイベント、ユーザーとの対話、プラットフォームイベントなど、様々なトリガーに基づいて複雑なロジックを実行できます。
実際のビジネスシーン
シーンA:製造業 - 注文処理の自動化
ビジネス課題:製造業の企業では、顧客からの注文がシステムに入力された際、そのステータス更新、関連する生産指示タスクの作成、顧客への確認メール送信といった一連のプロセスを手動で行っており、時間がかかり、エラーが発生しやすい状況でした。
ソリューション:レコードトリガーフロー(Record-Triggered Flow)を導入。新しい注文レコードが作成されると自動的にフローが起動し、注文ステータスを「処理中」に更新、生産チーム向けのタスクを作成、そして顧客に注文確認メールを送信するように設定しました。
定量的効果:注文処理にかかる時間が約 25%短縮され、手動による入力ミスが80%削減されました。
シーンB:医療業界 - 患者オンボーディングプロセスの効率化
ビジネス課題:新規患者が来院した際、受付スタッフが患者情報を様々なシステムに手動で入力し、同意書を印刷して署名してもらい、予約を確定するといった多段階のオンボーディングプロセスがありました。これは時間がかかり、患者の待ち時間も長くなる原因でした。
ソリューション:画面フロー(Screen Flow)を使用して、新規患者情報の入力、必要な同意書のデジタル署名(外部連携)、初回診察の予約設定をガイド付きのステップバイステップ形式で統合しました。受付スタッフは一つの画面フローを完了するだけで、必要なすべての情報入力と手続きが完了します。
定量的効果:患者のオンボーディング時間が平均 30%削減され、受付スタッフの業務負担が軽減されるとともに、患者満足度が15%向上しました。
シーンC:サービス業界 - サポートケースのエスカレーション自動化
ビジネス課題:カスタマーサポート部門では、特定の条件(例:SLA違反間近、特定のキーワードを含む)を満たすサポートケースについて、手動で上級エージェントやマネージャーにエスカレートし、通知するプロセスに遅延が生じ、顧客の不満につながっていました。
ソリューション:レコードトリガーフローを実装し、ケースレコードが更新されるたびにSLA(Service Level Agreement)の残り時間やケースの内容を評価します。特定の条件を満たした場合、自動的にケースの優先度を「高」に設定し、担当マネージャーにChatter通知とメールを送信し、関連するエスカレーションパス(Escalation Path)をトリガーするようにしました。
定量的効果:エスカレーションが必要なケースの処理遅延が90%改善され、顧客からの苦情件数が10%減少しました。
技術原理とアーキテクチャ
Salesforce Flow は、宣言型自動化(Declarative Automation)の中心的な存在であり、その柔軟性と強力な機能は、Salesforce が提供する各種自動化ツールの中で最も包括的なものです。Flow は内部的に Salesforce の自動化エンジン(Automation Engine)上で動作し、指定されたトリガーに応じて一連の論理ステップを実行します。
基礎的な動作メカニズム
Flow は、以下の主要な種類のトリガーによって開始されます:
- レコードトリガーフロー(Record-Triggered Flow):レコードの作成、更新、または削除イベントに応じて自動的に実行されます。最も一般的に使用されるフロータイプであり、高速で効率的なバックエンド処理に適しています。
- 画面フロー(Screen Flow):ユーザーが画面上のボタンをクリックしたり、Lightning アクションから起動したりすることで、ユーザーとの対話を伴うステップバイステップのプロセスを実行します。
- スケジュールトリガーフロー(Schedule-Triggered Flow):指定された時間と頻度で自動的に実行され、大量のレコードに対してバッチ処理を実行するのに適しています。
- 自動起動フロー(Auto-launched Flow):Apex コード、カスタムボタン、プロセスビルダー、または別のフローから呼び出されるフローです。ユーザーとの対話はありません。
- プラットフォームイベントトリガーフロー(Platform Event-Triggered Flow):特定のプラットフォームイベントが発生した際に起動されます。リアルタイムの連携シナリオに有用です。
主要コンポーネントと依存関係
Flow は、複数の要素(Elements)とリソース(Resources)を組み合わせて構築されます。
- 要素(Elements):フローのビジネスロジックを構成する個々のステップです。
- 相互作用(Interaction):画面(Screen)、アクション(Action)、サブフロー(Subflow)など。
- ロジック(Logic):割り当て(Assignment)、決定(Decision)、ループ(Loop)、コレクション並べ替え(Collection Sort)など。
- データ(Data):レコードの作成(Create Records)、レコードの更新(Update Records)、レコードの取得(Get Records)、レコードの削除(Delete Records)など。
- リソース(Resources):フロー内で使用されるデータや値を定義します。
- 変数(Variables):値を一時的に保存し、フロー内で利用します。
- 定数(Constants):固定された値を定義します。
- 数式(Formulas):計算された値を動的に生成します。
- テキストテンプレート(Text Templates):動的なテキストコンテンツを作成します(例:メール本文)。
- 選択リストの選択肢セット(Picklists Choice Sets):画面フローで選択リストの選択肢を提供します。
これらのコンポーネントは、Salesforce の標準オブジェクト、カスタムオブジェクト、カスタム設定(Custom Settings)、カスタムメタデータ型(Custom Metadata Types)、Apex クラス、外部サービスなど、Salesforce プラットフォーム上の様々な要素と密接に連携し、依存関係を形成します。
データフローの概要
| ステップ | 説明 | 関連コンポーネント |
|---|---|---|
| 1. トリガーイベント | レコードの作成/更新、スケジュール時間、ユーザー操作などのイベントが発生 | レコードトリガー、スケジュールトリガー、画面フロー、プラットフォームイベント |
| 2. レコードの取得 | 条件に合致するレコードをデータベースから取得 | Get Records 要素 |
| 3. ロジック処理 | 条件分岐、ループ処理、値の割り当てなど、ビジネスロジックを実行 | Decision, Loop, Assignment 要素 |
| 4. データ操作 | レコードの作成、更新、削除、Apex アクションの呼び出し | Create Records, Update Records, Delete Records, Action 要素 |
| 5. ユーザー対話 (画面フローの場合) | ユーザーに情報を表示し、入力を受け付ける | Screen 要素 |
| 6. 終了 | フローが完了し、結果をコミット | (暗黙的なプロセス) |
ソリューション比較と選定
Salesforce の自動化ツールには Flow 以外にもいくつか存在します。管理者は、適切な自動化ツールを選択するために、それぞれの特性を理解する必要があります。
| ソリューション | 適用シーン | パフォーマンス | Governor Limits | 複雑度 | メンテナビリティ |
|---|---|---|---|---|---|
| Flows | 複雑な宣言的プロセス、ユーザー対話、バッチ処理、多段階承認 | 適切 (特にレコードトリガーフローは高速化) | Apex と同等レベルの制限を意識する必要あり | 中~高 (複雑なロジックも可) | 中 (視覚的で理解しやすい) |
| Apex Triggers | 非常に複雑なビジネスロジック、外部システム連携、高度なデータ操作 | 非常に高速 | 厳格な制限 (ループ内の DML/SOQL 等) | 高 (開発スキル必須) | 低~中 (コードレビュー、テストが必須) |
| Workflow Rules / Process Builder | シンプルなフィールド更新、タスク作成、メール送信(新規開発非推奨) | 比較的低速 (特にProcess Builder) | 比較的緩い (Flowsより前世代) | 低~中 (設定ベース) | 中 (ただし新規開発はFlowに移行推奨) |
Flows を使用すべき場合
- ✅ 宣言的な自動化で要件を満たせる場合:複雑なビジネスロジックであっても、Apex コードを記述することなく、Flow Builder の視覚的なインターフェースで実現できる場合。
- ✅ ユーザーとの対話を伴うプロセスが必要な場合:アンケート、オンボーディング、申請フォームなど、ユーザーから情報を収集し、ステップバイステップで案内する必要がある場合(画面フロー)。
- ✅ 特定の時間に大量のデータを処理したい場合:毎日または毎週、特定の条件を満たすレコードを一括で更新・作成するなどのバッチ処理が必要な場合(スケジュールトリガーフロー)。
- ✅ 複数のオブジェクトにまたがる複雑なデータ操作が必要な場合:関連する複数のオブジェクトのレコードを取得、更新、作成するようなシナリオ。
- ❌ 不適用シーン:非常に高度なアルゴリズム計算、Salesforce の標準機能では実現できない外部ライブラリの利用、大規模な外部システムとのリアルタイムかつ複雑な API 連携が必要な場合。これらは Apex の使用が適切です。
実装例
ここでは、Salesforce 管理者が Flow Builder を使って、商談(Opportunity)が「クローズ済み/成立(Closed Won)」になった際に、関連する契約(Contract)レコードを自動的に作成し、いくつかのフィールドを初期化するレコードトリガーフローの実装例をステップバイステップで解説します。
シナリオ:商談が成立したら契約を自動作成するフロー
このフローは、商談のステージが「Closed Won」に更新された際に自動的に起動し、新しい契約レコードを作成します。作成された契約には、商談の取引先情報、契約期間、開始日などが自動で入力されます。
1. Flow Builder を起動
設定(Setup)> プロセス自動化(Process Automation)> フロー(Flows)へ移動し、「新規フロー(New Flow)」をクリックします。タイプとして「レコードトリガーフロー(Record-Triggered Flow)」を選択し、「作成(Create)」をクリックします。
2. トリガーを設定
「オブジェクト(Object)」として Opportunity を選択します。
「フローをトリガーするタイミング(Configure Trigger)」で「レコードが作成または更新されたとき(A record is created or updated)」を選択します。
「フローを実行する条件(Entry Conditions)」を以下のように設定します。
フィールド:StageName
演算子:Equals
値:Closed Won
「レコードが更新されたときのみフローを実行(Run Flow Only When a Record Is Updated to Meet the Condition Requirements)」にチェックを入れます。
「フローの最適化(Optimize the Flow for)」で「高速フィールド更新とアクション(Fast Field Updates and Actions)」を選択します。
3. 「レコードを作成(Create Records)」要素を追加
キャンバス上の [+] アイコンをクリックし、「要素(Elements)」から「レコードを作成(Create Records)」を選択します。
ラベル:Create Contract
API 参照名:Create_Contract
「作成するレコードを数と設定する方法(How to Set Record Fields)」で「個別のリソースを使用してレコードを作成(Use separate resources, and literal values.)」を選択します。
「オブジェクト(Object)」として Contract を選択します。
4. 作成する契約レコードのフィールド値を設定
以下のフィールドと値を設定します。
AccountId(取引先ID):{!$Record.AccountId}(トリガーとなった商談の取引先ID)Status(ステータス):Draft(ドラフト)StartDate(開始日):{!$Flow.CurrentDate}(フロー実行時の現在日)ContractTerm(契約期間):12(ヶ月)
5. 数式リソースの追加 (例: 契約終了日を計算)
左側の「ツールボックス(Toolbox)」から「リソース(Resources)」の「新規リソース(New Resource)」をクリックします。
リソース種別(Resource Type):数式(Formula)
API 参照名:formula_ContractEndDate
データ型(Data Type):日付(Date)
数式:
ADDMONTHS({!$Flow.CurrentDate}, 12)
この数式は、契約開始日(現在のフロー実行日)から12ヶ月後を契約終了日として計算します。
6. 作成する契約レコードのフィールド値に数式を適用
「Create Contract」要素に戻り、以下のフィールドを追加で設定します。
EndDate (終了日):{!formula_ContractEndDate}
7. 商談レコードを更新 (契約IDを関連付け)
キャンバス上の [+] アイコンをクリックし、「要素(Elements)」から「レコードを更新(Update Records)」を選択します。
ラベル:Update Opportunity with Contract ID
API 参照名:Update_Opportunity_with_Contract_ID
「更新するレコードを数と設定する方法(How to Find Records to Update and Set Their Values)」で「フローをトリガーした Opportunity レコードを更新(Use the Opportunity record that triggered the flow)」を選択します。
以下のフィールドと値を設定します。
フィールド:ContractId (契約ID)
値:{!Create_Contract.Id} (上で作成した契約レコードのID)
8. 保存と有効化
フローを保存します。ラベルとAPI参照名を入力し、「保存(Save)」をクリックします。その後、「有効化(Activate)」をクリックしてフローを有効にします。
このフローは、商談が「Closed Won」になった瞬間に自動的に実行され、新たな契約レコードを作成し、その契約レコードの ID を元の商談レコードに紐付けるという一連の処理を宣言的に実現します。これにより、手動での契約作成作業が不要になり、業務効率とデータ整合性が大幅に向上します。
注意事項とベストプラクティス
権限要件
Flow の作成、管理、実行には特定の権限が必要です。
- Flow を作成および管理するユーザー:システム管理者プロファイル、または
Manage Flows(フローの管理)権限を含む権限セットが必要です。 - Flow を実行するユーザー:
Run Flows(フローの実行)権限が必要です。通常、これは標準プロファイルやカスタムプロファイルに含まれています。画面フローなどユーザーが直接起動するフローの場合、この権限が必須です。 - フローがデータにアクセスする権限:フローは、実行ユーザーのコンテキスト、またはシステムコンテキスト(通常、レコードトリガーフローやスケジュールトリガーフローで設定可能)で実行されます。システムコンテキストの場合、フローは共有設定やフィールドレベルセキュリティを無視してデータにアクセスしますが、実行ユーザーにそのオブジェクトやフィールドに対するアクセス権限がなければエラーになる可能性があります。
Governor Limits
Flow は内部的に Apex コードを生成して実行するため、Salesforce の Governor Limits(ガバナ制限)に準拠します。特に注意すべき制限は以下の通りです(2025年版)。
- SOQL クエリの最大数:100
- DML ステートメントの最大数:150
- クエリによって取得されるレコードの最大数:50,000
- DML 操作によって処理されるレコードの最大数:10,000 (特にバッチ操作時)
- CPU 時間の制限:同期処理 10,000 ms、非同期処理 60,000 ms
- ループ反復回数:レコードトリガーフローでループを使用する場合、200,000 回の反復制限があります。
- スケジュールトリガーフローの制限:1日あたり最大 250,000 回の非同期フロー実行(Apex の非同期呼び出しと共有)。
Flow を設計する際は、これらの制限を意識し、特にループ内で DML や SOQL を実行しないように注意が必要です。
エラー処理
Flow は堅牢なエラー処理メカニズムを提供します。
- Fault Path(エラーパス):Flow Builder で各データ要素(Get Records, Create Records, Update Records, Delete Records など)にエラーパスを追加し、エラー発生時に代替ロジック(例:エラーメッセージの表示、管理者への通知、エラーログの作成)を実行できます。
- エラーメール:フローのバージョン設定で、実行中に未処理のエラーが発生した場合にエラー詳細を特定のユーザーにメールで通知するように設定できます。
- デバッグログ:Flow のデバッグ実行や、Salesforce のデバッグログを有効にすることで、フローの実行パスと発生したエラーの詳細を確認できます。
パフォーマンス最適化
Flow のパフォーマンスを最大化するためのベストプラクティス。
- 1オブジェクト1レコードトリガーフロー原則:同じオブジェクトに対する複数のレコードトリガーフローを避けることで、実行順序の複雑さを軽減し、将来的なメンテナンスを容易にします。
- ループ内での DML/SOQL 回避:ループ内でデータベース操作を行うと Governor Limits に抵触しやすくなります。代わりに、コレクション変数にデータを集めてから一括で DML を実行する「Bulkification(バルク化)」を実践します。
- 条件付き実行の活用:不必要なロジックを実行しないよう、デシジョン(Decision)要素で厳密な条件を設定し、フローの実行パスを最適化します。
- 非同期処理の利用:時間のかかる処理や Callout を伴う処理は、非同期パス(Run Asynchronously)を活用してバックグラウンドで実行し、ユーザーエクスペリエンスを向上させます。
- 古いプロセスビルダー/ワークフロールールからの移行:Flow は Process Builder や Workflow Rules よりもパフォーマンスが優れているため、既存の自動化を Flow に移行することを検討します。
よくある質問 FAQ
Q1:レコードトリガーフローと Apex トリガーのどちらを使うべきか、判断基準は?
A1:一般的に、Salesforce の宣言的機能である Flow で要件を満たせる場合は、Flow を優先すべきです。Flow は保守が容易で、開発スキルがない管理者でも作成・変更が可能です。Apex トリガーは、外部サービスとの高度なリアルタイム連携、非常に複雑な計算ロジック、または Flow では実現できない特定の Apex クラスの利用が必須となる場合にのみ使用を検討します。
Q2:フローのデバッグがうまくいかない場合、どのような手順で調査すべきですか?
A2:まず、Flow Builder 内の「デバッグ(Debug)」ボタンを使用して、フローを特定のレコードや入力値でテスト実行します。これにより、フローの実行パス、各要素の入力・出力値、発生したエラーメッセージを詳細に確認できます。それでも解決しない場合は、Salesforce の「デバッグログ(Debug Logs)」を有効にし、フロー実行ユーザー(または自動化ユーザー)でログをキャプチャし、より低レベルのシステム挙動を確認します。また、エラーパスを適切に設定し、エラー発生時に管理者へのメール通知が来るように設定することも重要です。
Q3:フローのパフォーマンスが期待よりも低い場合、何を確認すべきですか?
A3:パフォーマンスが低い場合、いくつかの一般的な原因が考えられます。最も一般的なのは、ループ内で DML ステートメント(レコードの作成、更新、削除)や SOQL クエリが頻繁に実行されていることです。コレクション変数にデータを格納し、ループ後に一括で処理する「バルク化」を検討してください。また、レコードトリガーフローの開始条件が広すぎる場合や、不必要なレコードを大量に取得している場合もパフォーマンスに影響します。デバッグログで SOQL クエリの回数や CPU 時間を確認し、最適化のポイントを見つけることが重要です。
まとめと参考資料
Salesforce Flow は、Salesforce プラットフォームにおけるビジネスプロセス自動化の要であり、管理者にとって不可欠なスキルです。ノーコード/ローコードで複雑なロジックを実装できるその能力は、組織の生産性とデータ品質を飛躍的に向上させます。
本記事で紹介したFlow の種類、主要コンポーネント、実装例、そしてベストプラクティスを理解し実践することで、皆様の Salesforce 環境での自動化戦略はより堅牢なものとなるでしょう。Flow を活用することで、手作業を減らし、ユーザーエクスペリエンスを高め、最終的にはビジネス価値の向上に大きく貢献できます。
重要ポイントの要約
- Flow はレコードトリガー、画面フロー、スケジュールトリガーなど多様な自動化ニーズに対応。
- 宣言的なアプローチで複雑なビジネスロジックを実装可能。
- Apex トリガー、Process Builder/Workflow Rules との適切な使い分けが重要。
- Governor Limits とパフォーマンス最適化のベストプラクティスを常に意識する。
- 堅牢なエラー処理とデバッグ能力が成功の鍵。
公式リソース
- 📖 公式ドキュメント:Flow Builder とは?
- 📖 公式ドキュメント:Flow Builder のベストプラクティス
- 🎓 Trailhead モジュール:Flow Builder でフローを作成する
- 🎓 Trailhead 学習パス:Flow Builder でのフロー構築の基本
コメント
コメントを投稿