Salesforce と外部システムの連携パターン図解:同期・非同期・バッチの選び方

このページには広告リンクを含みます。

Salesforce 外部システム連携の6パターン

Salesforce Architects の Integration Patterns は、連携を次の6つに分けています。名前を覚えると、社内や委託先との会話が揃います。

同期・非同期と、処理・データの2軸に、Request and Reply、Fire and Forget、Remote Call-In、Batch Data Synchronization を置いた使い分け表
向きとタイミングで連携パターンを選ぶ
パターン 向き タイミング 典型的な場面 主な手段
Request and Reply Salesforce → 外部 同期 画面で与信の結果をその場で見る External Services、Flow の HTTP コールアウト、Apex コールアウト
Fire and Forget Salesforce → 外部 非同期 受注を基幹に知らせる プラットフォームイベント、Pub/Sub API、変更データキャプチャ
Batch Data Synchronization 双方向 非同期 顧客マスタの夜間同期 ETL ツール+Bulk API 2.0
Remote Call-In 外部 → Salesforce 同期・非同期 基幹から商談を作成・更新 REST API、Composite API、Bulk API 2.0
UI Update Based on Data Changes Salesforce のデータ変更 → 画面 非同期 ケースの完了を管理者の画面に自動で知らせる プラットフォームイベント+Lightning コンポーネント
Data Virtualization Salesforce から外部を参照 同期 基幹の請求履歴をコピーせず表示 Salesforce Connect

同期か非同期かの判断基準

同期は「結果が返るまで利用者を待たせる」連携です。向いているのは、少ないデータで、その場で結果が要る場面に限られます。

Apex のコールアウトには、1トランザクション100回、累計の待ち時間120秒という上限があります。既定の時間切れは10秒です。公式の連携パターンは、時間切れの危険を減らす案の1つとして、コールアウトの時間切れを5秒に設定する方法を挙げています。5秒を超えるトランザクションが50を超えて走る設計にも、公式は注意を促しています。

Request and Reply では、Salesforce 側の変更は成功の応答を受けてから確定させます。外部の処理は、同じ要求が2回届いても壊れないように作ります(べき等)。一意のメッセージ ID と upsert を使う方法が示されています。

非同期は「受け付けだけ確認して、処理は相手に任せる」連携です。外部の停止や遅延が利用者に伝わらないのが利点です。ただし、失敗に気付く仕組みを別に作る必要があります。

REST API・Composite API・Bulk API 2.0 の使い分け

外部から Salesforce に書き込むときの選び方です。

手段 件数の目安 向いている場面 ハマる点
REST API 少量 1件ずつの作成・更新・upsert 既定では1件ごとにコミットされる
Composite API 少量 親子を一度に作る、まとめて成功か失敗にしたい HTTP 200 でも副要求が失敗していることがある。本文を確認する
Bulk API 2.0 およそ2,000件超 大量の取り込み、非同期 並列処理で、バッチごとに別のトランザクション
SOAP API、Apex の独自 Web サービス 少量 既存の連携の維持 公式の評価は Suboptimal(次善)

Bulk API 2.0 の取り込みは、直近24時間で1億5,000万レコードが上限で、Salesforce が10,000件ごとに内部のバッチに分けます。1ジョブのファイルは150MBまでで、base64 への変換で増える分を見込むと、元のデータは100MB以内にします。バッチが別のトランザクションなので、全件が一度に成功するとは限りません。子レコードは親のキーでまとめておくと、ロックの競合を減らせます。

REST API、SOAP API、Bulk API の呼び出しは、組織の API 要求の割り当てに数えられます。割り当ては24時間あたりの回数で、Enterprise Edition と Unlimited Edition などでは「100,000+ライセンス数×ライセンス種別ごとの回数+追加購入分」で決まります。たとえば Salesforce ライセンス1つあたりは、Enterprise で1,000回、Unlimited で5,000回です。REST API の応答ヘッダー Sforce-Limit-Info で使用量を見られます。エディションの違いはエディションの比較も確かめてください。

データローダやデータインポートウィザードは、データの取り込みや移行を人が行うときの道具です。Salesforce Architects は、これらを連携の基盤にしないよう書いています。

バッチ同期では、最後に成功した時点を記録する制御テーブルやウォーターマーク、両方のシステムの ID を持つ外部キーの項目を用意します。夜間など、利用者とかち合わない時間に走らせます。

プラットフォームイベント・変更データキャプチャ・Outbound Message

Salesforce から外へ非同期で知らせる手段は複数あります。公式の評価と制限を並べました。

手段 何を送るか 保持期間 位置づけ
プラットフォームイベント 自分で定義した内容。上限1MB 3日 Flow でも Apex でも発行できる。連携パターンの評価は Best
変更データキャプチャ(CDC) レコードの変更内容。形式は決まっている。上限1MB 3日 項目の変更を送るのに向く。連携パターンの評価は Best
Pub/Sub API イベントを購読する口 3日 新しい発行・購読の連携に推奨
Outbound Message XML の通知。1メッセージ100通知まで 24時間 追加投資の予定なし。連携パターンの評価は Suboptimal(次善)

CDC は、既定で5オブジェクトまでで、それ以上は追加の契約が要ります。変更後の値は入りますが変更前の値は入らないため、状態の遷移を判断するには別の工夫が必要です。

プラットフォームイベントで間違えやすい点が2つあります。

  • ロールバックされない。発行後に元のトランザクションが失敗しても、イベントは取り消されません。購読側がコミット済みのデータを読むなら、Publish After Commit にします。
  • Salesforce は再送しない。発行は1回で、購読側がリプレイ ID を使って取り直します。購読側に「どこまで読んだか」を覚える仕組みが要ります。

Outbound Message は Salesforce が再試行を行う点が便利ですが、24時間たつと未配信のメッセージは失われます。既存の連携を今すぐ作り直す必要はありませんが、新規で選ぶ理由は少なくなっています。

レコードトリガーフローの非同期パスも、単純なコールアウトには向いています。元の保存のコミットの後に動くためです。順番は保存時の実行順序で確かめられます。

データを持ち込まない選択:Salesforce Connect

見るだけでよいデータをコピーすると、同期の仕組みと食い違いの対応を背負います。Salesforce Connect は外部のテーブルを外部オブジェクトとして扱い、画面を開いたときに取りに行きます。使うには別途ライセンスが要ります。

向いているのは、少量を見る・検索する・編集する場面です。バッチ処理やデータの複製には使いません。外部の応答待ちの上限は設定で最大120秒で、外部オブジェクトには使えない機能もあります。

件数と待てるかどうかで、REST API、Composite API、Bulk API 2.0、プラットフォームイベント、Salesforce Connect を選ぶ流れ図
要件から連携の道具を選ぶ流れ

iPaaS や MuleSoft を入れるべきか

1対1の連携が数本なら、ここまでの手段で足ります。連携先が増え、変換や順序の制御が複雑になると、中間のツールを検討します。公式の連携パターンは、複雑な変換やオーケストレーションをミドルウェアに任せるよう書いています。

MuleSoft Anypoint は別途ライセンスが要ります。同じ役割の ESB や ETL がすでに社内にあれば、それを使う選択も公式のガイドが認めています。他の iPaaS も、判断の軸は同じです。

要件を聞くときの質問を整理しておきます。編集部のおすすめです。

  • どちらのシステムが正のデータを持つか
  • 1日の件数と、一番多い時間帯の件数はいくつか
  • 片方が止まったとき、業務はどうするか
  • 重複して届いたときに、何で同じものと判断するか
  • 失敗を誰がいつ見て、どう再実行するか

関連記事

よくある質問

Salesforce と外部システムの連携方法はどう選びますか?
Salesforce の外部システム連携は、どちらから動くか、すぐ結果が要るか、データ量はどのくらいかの3点で選びます。少量ですぐ結果が要るなら REST API などの同期、待てるならプラットフォームイベント、大量なら Bulk API 2.0 が基本です。
Outbound Message は今後も使えますか?
Outbound Message は引き続き使えますが、Salesforce は追加の投資を予定していないとしています。新しい連携では、Salesforce Architects が勧めるプラットフォームイベントや Pub/Sub API を先に検討します。
Bulk API 2.0 はいつ使いますか?
公式の連携パターンでは、Salesforce に取り込む件数がおよそ2,000件を超えるときに Bulk API 2.0 を候補にしています。上限は24時間あたり1億5,000万レコードで、処理は非同期です。
プラットフォームイベントはロールバックされますか?
プラットフォームイベントは元のトランザクションと一緒にロールバックされません。購読側がコミット済みのデータに頼るときは、Publish After Commit の設定を使います。