ウェブ開発

Salesforce 連携アーキテクチャ:REST、Bulk 2.0、Pub/Sub

Salesforce連携アーキテクチャを徹底解説。REST、Bulk API 2.0、Pub/Sub APIを比較し、スループット向上やガバナ制限回避を実現する最適な設計パターンを紹介します。

ブログに戻る読了まで約16分
Salesforce連携アーキテクチャ:API選定と設計ガイド
読了まで約16分残り約16分

堅牢なSalesforce 連携 アーキテクチャを設計するには、システムのスループットやレイテンシーの要件をプラットフォームの制約と整合させる必要があります。標準的な REST エンドポイントは同期的なトランザクションワークロードに対応できますが、適切に調整されていないアーキテクチャでは、急激なスパイクや大量データの同期処理によってパフォーマンスが低下することが少なくありません。同期 REST、非同期 Bulk API 2.0、そしてイベント駆動型 Pub/Sub API の中から適切なプロトコルを選択できるかどうかが、エンタープライズパイプラインにおいてリアルタイムデータ連携の整合性を維持できるか、それとも厳格な運用上のしきい値に直面するかを左右します。

なぜエンタープライズのSalesforce 連携 アーキテクチャはスケール時に破綻するのか?

開発チームがSalesforceを「スロットリングのないエンドポイント経由でアクセス可能な通常のリレーショナルデータベース」として扱ってしまうと、エンタープライズのデータパイプラインは頻繁にパフォーマンス低下に陥ります。小規模な運用フェーズであれば、請求、マーケティング、ERPといった各タッチポイント間で、ポイントツーポイントの同期RESTコールが問題なく実行されます。しかし、トランザクションの頻度が増加するにつれて、こうした無秩序な接続はテナントの上限値(しきい値)を瞬く間に枯渇させます。単純なポイントツーポイントモデルにはバッファリング、バックプレッシャー制御、共通のトークンガバナンスが欠如しているため、局所的なデータ取り込みの急増が、事業部門全体における極めて重要な本番運用の停止を招く事態につながります。

アーキテクチャ上の主要なボトルネックは、リアルタイムな同期実行と厳格なマルチテナント制約の結合に起因します。外部マイクロサービスが状態変更のたびに個別のHTTPリクエストを発行すると、アップストリーム側のバックログが連鎖的な接続タイムアウトを引き起こします。Salesforce公式のAPIリクエスト制限ドキュメントに記載されている通り、テナントは総リクエスト数の上限だけでなく、同時実行の制約とのバランスも考慮しなければなりません。堅牢なSalesforce 連携 アーキテクチャは、直接的なエンドポイント呼び出しを疎結合な取り込み層やキューイングレイヤーに置き換えることで、こうした連鎖障害を防止します。

耐障害性の高いシステムを構築するには、ミッションクリティカルなワークフローをバックグラウンドの同期処理から隔離する、計画的なSalesforce ガバナ制限 API 対策が不可欠です。現代のエンジニアリングチームは、コネクタのひな型作成やクライアントのボイラープレート生成を迅速化するためにAIコーディングツールを活用することが増えていますが、自動化されたスクリプトでは並行処理のボトルネックやアプリケーション間のリソース競合まで予測することはできません。継続的な高負荷環境下でも運用の安定性を維持するためには、シニアシステムエンジニアが厳格な境界分離、エラーリカバリルーチン、プロトコルの階層化を確立する必要があります。

1日のAPI制限とデータスループットはプロトコル選定をどう左右するのか?

接続アプリケーション全体における24時間ローリングAPI割り当ての算出

Salesforceは、固定のカレンダー日単位ではなく、24時間のローリングウィンドウにおける組織全体の総割り当て量に対して、受信するREST、SOAP、Bulkコールを計測します。Enterprise Editionの導入環境では、基本プールは100,000リクエストから開始され、これにライセンスシートの付与分(通常、標準ユーザーライセンス1つにつき追加で1,000コール)が加算されます。接続されたすべてのアプリケーション、カスタムマイクロサービス、および管理パッケージがこの共有リソースから呼び出しを行うため、単一のサブシステムから流量制御を行わずにデータを取り込むと、組織全体のクォータを枯渇させてしまう恐れがあります。クライアントシステムは、プラットフォームの制限に達する前に送信リクエストの流量を動的に制御できるよう、Sforce-Limit-Info HTTPヘッダーをプロアクティブに検査するか、limitsリソースをポーリングして監視する必要があります。

同時リクエスト実行の制約とタイムアウトの脆弱性

1日の総割り当て量だけでなく、アーキテクトは厳格な同時実行の境界も考慮しなければなりません。プラットフォーム仕様によると、本番環境では長時間実行リクエスト(20秒以上実行されるコール)が最大25個の同時スレッドに制限されています。最適化されていないトランザクションクエリや同期連携がこれらの実行枠を占有してしまうと、後続の受信コールは直ちにREQUEST_LIMIT_EXCEEDED例外で失敗します。高頻度のRESTポーリングは、接続スレッドをアクティブな状態に保ち続け、標準的な10分のタイムアウトしきい値に近づく原因となるため、このリスクをさらに増大させます。

効果的なSalesforce ガバナ制限 API 対策を講じるには、反復的なポーリングをイベント駆動型のメッセージ配信へと移行することが求められます。成熟したエンタープライズ向けSalesforce 連携 アーキテクチャにおいて、エンジニアリングチームはキューイングミドルウェアを介してペイロードをバッファリングし、スループットの要求を分離します。Canvas Developersでは、弊社のエンジニアが接続サービス全体の連携トラフィックを評価し、予期せぬトランザクションの急増から本番組織を保護するトークンバケット方式のレートリミッターや非同期バッファを設計しています。

リアルタイム連携においてSalesforce REST APIを採用すべきケースとは?

同期RESTエンドポイントは、インタラクティブなユーザーインターフェース、チェックアウトのワークフロー、トランザクション処理を行うマイクロサービスに必要な即時リクエスト・レスポンスサイクルを提供します。モバイルアプリでユーザーが顧客プロファイルの詳細を更新する場合や、外部ポータルがサブスクリプションの利用権限を検証する場合、同期RESTは非同期アーキテクチャでは実現できない1秒未満の応答時間を実現します。即時の確認が求められる単一レコードの操作において、標準sObjectエンドポイントはシステム境界を越えた確実なデータ整合性を担保します。

単一レコードのCRUDパイプラインとUI起点のデータ取得

トランザクションのワークフローにおいて、外部マイクロサービスが上流の処理を完了させるには、即座にレコードIDを必要とすることがよくあります。ポイントツーポイントのRESTコールを実装することで、システムはシリアライズのオーバーヘッドを最小限に抑えながら、個々のレコードの照会、作成、更新を行うことができます。しかし、Salesforce 連携 アーキテクチャにおけるSalesforce REST APIとBulk APIの違いやトレードオフを検討する際、定期的なデータ同期を個別のRESTリクエストに依存すると、過剰なネットワークレイテンシーが発生し、24時間のガバナ制限を急速に消費してしまいます。

CompositeおよびsObject Treeリソースによるペイロード呼び出しのバッチ処理

API割り当てを枯渇させないSalesforce ガバナ制限のAPI対策として、効率的なSalesforce リアルタイム データ連携を実現するために、エンジニアはSalesforce Compositeリソースを活用します。Salesforce Composite APIの使い方として、何十回もの独立したHTTPラウンドトリップを実行する代わりに、クライアントアプリケーションから最大25件のサブリクエストを単一のHTTP POSTリクエストにまとめて送信できます。参照変数(@{NewAccount.id}など)を使用してサブリクエスト間で親の識別子を参照することで、開発者は単一の実行コンテキスト内で、AccountとネストされたContactsやOpportunitiesといった複雑な階層構造を作成できます。さらにallOrNoneパラメータを指定することで、依存関係にある子エンティティのいずれかで検証が失敗した場合に、アトミックなロールバックを適用できます。

AIコーディングツールによってCompositeのJSONスキーマやペイロードシリアライザーの生成は迅速化されますが、人間のエンジニアがトランザクションの原子性、ペイロードサイズの上限、エラーハンドリングのロジックを検証する必要があります。当社のAPI開発サービスを通じて高パフォーマンスなパイプラインを構築するチームは、AI支援によるスキャフォールディングを活用しつつ、同期RESTの適用を低レイテンシーが求められるトランザクションユースケースに限定することを徹底しています。

Salesforce Bulk API 2.0は大量データの非同期データパイプラインをどのように処理するのか?

データセットが数千件のエンティティを超えて拡大すると、同期リクエストの処理サイクルはデータベースのパフォーマンスを低下させ、プラットフォームの割り当て(ガバナ制限)を急速に消費してしまいます。大規模なデータ移行(Salesforce 大量データ 移行 APIの活用など)や夜間のデータウェアハウス同期、カタログデータの投入においては、非同期の一括インジェストが不可欠となります。アーキテクチャ選定における定番の議論であるSalesforce REST API Bulk API 違いにおいても、Bulk API 2.0は処理をクライアント側での即時実行から、高スループットなバッチ処理向けに設計されたサーバー側の非同期キューへと移行させます。

サーバー側の自動チャンク分割によるインジェストとクエリの仕組み

クライアント側でペイロードを手動で10,000レコードずつのチャンクに分割し、複数のバッチステータスを追跡する必要があった従来のBulk API 1.0とは異なり、Bulk API 2.0はパイプラインのオーケストレーションを大幅に簡素化します。インジェストワークフローに必要な運用フェーズは、インジェストジョブの作成、未加工のCSVペイロードのジョブエンドポイントへの直接ストリーミング、そしてジョブステータスをUploadCompleteとしてマークする、というわずか3段階のみです。プラットフォーム側でデータが最適なバッチ(トランザクションチャンクとして標準化された200レコード単位)へと自動的に分割され、バックグラウンドの処理ワーカーにワークロードが分散されます。同様に、Bulkクエリジョブも非同期で実行されるため、ダウンストリームのコンシューマーは同期クエリのメモリを飽和させることなく、locatorトークンを使用してギガバイト単位でエクスポートされたレコードをページング処理できます。

日次1億5,000万レコードのBulk制限と長時間実行バッチステータスの管理

Bulk API 2.0に関するSalesforce公式のプラットフォーム仕様によると、組織には直近24時間のローリングウィンドウあたり最大1億5,000万(150,000,000)件のアップロードレコードが割り当てられ、インジェストファイルの最大サイズは150MBに達します。CSVのエンコードはBase64送信時にデータサイズが肥大化するため、エンジニアリングチームはペイロードの拒否を回避すべく、1回の送信あたりのファイルサイズを100MB未満に抑えています。一度キューに入ると、成功、失敗、未処理のレコードを含む完了したジョブの結果は、7日間にわたって取得可能な状態が維持されます。

堅牢なSalesforce 連携 アーキテクチャにおいて耐障害性の高いETLパイプラインを設計するには、インデックス付き外部IDを使用した冪等なupsertの実装と、failedResults CSVエンドポイントを解析する自動ポーリングリスナーの実装が必要です。AIエージェントによってETLインジェストワーカーやCSVパーサーの基盤は迅速に構築できるようになりましたが、シニアエンジニアはスキーマ検証ルールの確認、ロック競合例外に対するリトライメカニズムの確立、そして一括トランザクションが最適化されていないApex自動化ループを意図せずトリガーしないことの確認を徹底する必要があります。

Salesforce Pub/Sub APIでイベント駆動型ストリーミングを実装する方法

現代の分散システムにおけるSalesforce 連携 アーキテクチャでは、繰り返しのポーリング処理による運用オーバーヘッドやガバナ制限の消費を招くことなく、イベントを即座に伝播させることが求められます。応答性に優れたメッセージングを実現するため、Salesforce Pub/Sub APIは従来のCometDストリーミングを刷新し、統合された高性能なパブリッシュ/サブスクライブインターフェースを提供します。

gRPCトランスポート、バイナリApache Avroエンコーディング、双方向ストリーム

HTTP/2トランスポートおよびgRPCプロトコル上に構築されたPub/Sub APIは、多重化された接続によって双方向のイベントストリーミングを提供します。ペイロードのシリアライズにはバイナリ形式のApache Avroスキーマを採用しており、REST経由の標準的なJSON表現と比較してネットワークペイロードのサイズを大幅に削減します。外部クライアントアプリケーションはProtocol Buffers定義を言語固有のスタブへとコンパイルし、単一のエンドポイント(api.pubsub.salesforce.com:7443)と通信してパブリッシュ、サブスクライブ、動的なスキーマ取得を行います。このモダンなプロトコルアーキテクチャにより、マイクロサービスや外部メッセージングプラットフォーム間にまたがるスケーラブルなSalesforce リアルタイム データ連携パイプラインの構築が可能になります。

Change Data Capture(CDC)対 カスタムPlatform Eventsのアーキテクチャ

イベント駆動型パイプラインを実装するアーキテクトは、Change Data Capture(CDC)とカスタムPlatform Eventsのどちらを活用すべきかを評価する必要があります。CDCは、標準オブジェクトおよびカスタムオブジェクトに対する作成、更新、削除、復元(undelete)といった変更を表す通知イベントを自動的に発行し、外部データベースとの正確な同期を確実にします。これに対して、カスタムPlatform Eventsを使用すると、エンジニアはメッセージを内部データベースのスキーマ変更に直接紐付けることなく、決済処理や注文履行のトリガーなど、ビジネス要件に合わせた独自のスキーマを定義できます。

信頼性の高いSalesforce Pub/Sub API 実装には、堅牢なディザスタリカバリメカニズムが不可欠です。Pub/Sub API Managed Subscriptionsに関するSalesforce公式ドキュメントによると、Salesforceイベントバスは大量データイベントを72時間の保持期間にわたって保持します。サブスクライバーは不透明なReplayIdを指定してネットワーク切断後にストリームを再開でき、少なくとも1回(at-least-once)のメッセージ配信が保証されます。外部のコンシューマーは、メッセージの重複やデータの損失を防ぐために、最後に処理したリプレイ識別子を永続化するか、サーバー側のマネージドサブスクリプションを活用する必要があります。

スループット、レイテンシー、データ量の要件に適したSalesforce APIプロトコルとは?

最適なAPIプロトコルの選定には、データの転送速度(ベロシティ)、データ量、そしてテナントの割り当て制限(ガバナ制限)のバランスを考慮する必要があります。エンタープライズのエコシステム全体において、あらゆるアーキテクチャ要件を単一のエンドポイントだけで満たすことはできません。現代のエンタープライズにおけるSalesforce 連携 アーキテクチャでは、アーキテクトがレイテンシーやスループットの異なる要件特性に合わせて、複数のプロトコルを適切に組み合わせています。

プロトコル 主なユースケース レイテンシー特性 スループットのしきい値
REST API / Composite 対話型UIトランザクション、単一レコードのCRUD、トランザクションにおける注文検証(Salesforce Composite API 使い方に沿ったリクエスト集約など) 1秒未満(同期) 2,000レコード未満、Composite呼び出し1回あたり最大25件のサブリクエスト
Bulk API 2.0 大量データ移行(Salesforce 大量データ 移行 APIの活用)、夜間ETL同期、データウェアハウスへのデータ投入 数分〜数時間(非同期) 2,000レコード超、24時間あたり最大1億5,000万レコード
Pub/Sub API 双方向イベントストリーミング、Change Data Capture、イベント駆動型マイクロサービス 1秒未満のイベントバスストリーミング 72時間の再配信(リプレイ)保持期間を備えた継続的なイベントストリーム

ストリーミングアーキテクチャとともにSalesforce REST API Bulk API 違いのアプローチを比較・分析する際、最も耐障害性に優れた導入環境ではハイブリッドパターンが採用されています。このアーキテクチャにおけるSalesforce Pub/Sub API 実装では、エンティティの変更イベントをリアルタイムにリッスンして更新タイムスタンプをキャプチャする一方、バックグラウンドワーカーがBulk API 2.0を活用して過去の大量エンティティを非同期に取得・蓄積します。この疎結合なデータフローにより、1日のリクエストクォータを保護して確実なSalesforce ガバナ制限 API 対策としつつ、外部システム全体にわたってSalesforce リアルタイム データ連携によるほぼリアルタイムな運用状況の把握を実現します。

よりシンプルな選択肢が適している場合: システム連携において、ペイロードの変換や厳格な配信順序を必要とせず、少量の単方向通知のみで要件を満たせる場合、標準のSalesforce Outbound Messagesや基本的なWebhookが、gRPC接続やAvroスキーマレジストリを維持・管理する運用オーバーヘッドを伴わない有効なソリューションとなります。

エンジニアリングチームはエンタープライズSalesforce連携をどのように構築、テスト、堅牢化すべきか?

Canvas Developersでは、当社のエンジニアがAntigravityなどのAIコーディングツールやハーネスを活用し、gRPCスタブ、Avroモデル、Bulk API取り込みパイプラインのスキャフォールディングを行っています。AI支援による迅速なイテレーションによってスキャフォールディングは加速しますが、本番環境における耐障害性を確保するには、アーキテクチャを統括し、コードをレビューし、リリース前にガバナ制限を検証できるシニアエンジニアが不可欠です。

本番運用に向けた準備を整えるには、すべてのエンタープライズSalesforce連携パターンにおいて、4つの不可欠な受け入れゲートを検証する必要があります。

  • 認証セキュリティ:JWTベアラーフローを適用し、Connected Appのスコープを最小権限に制限します。
  • レートガバナンス:クライアントサイドにトークンバケット方式のリミッターを実装し、ローリング24時間のAPI割り当て枠を保護します。
  • 状態の耐障害性:処理後に不透明なReplay IDを永続化することで、重複ミューテーションを発生させずに、at-least-once(少なくとも1回)のストリーミングを保証します。
  • 障害の隔離:失敗したBulk APIの行をデッドレターキューにルーティングし、自動トリアージを実施します。

貴社のSalesforce 連携 アーキテクチャの評価や堅牢化をご検討の際は、お問い合わせフォームよりスコープを定めた技術アセスメントをご依頼いただくか、技術スタックの制約に応じた当社のクラウドインフラストラクチャおよびSalesforceエンジニアリングサービスをご確認ください。

FAQ

よくあるご質問

Salesforceのガバナ制限は、REST API連携の設計にどう影響しますか?

Salesforce 連携 アーキテクチャにおいて、インバウンドREST APIリクエストは暦日ではなく接続アプリ全体で24時間のローリング枠として計算されます。さらに本番環境では、実行時間が20秒を超える同時リクエストが25件までに制限されます。これらのしきい値を超えると即座に例外が発生するため、流量制御のないポイントツーポイントのRESTポーリングは大規模な運用に耐えられません。

Salesforce REST APIからBulk API 2.0へ切り替えるべきタイミングはいつですか?

データ処理が2,000レコードを超える場合は、同期RESTやCompositeエンドポイントからBulk API 2.0へ移行すべきです。RESTは単一レコードの即時トランザクション需要に対応する一方、Bulk API 2.0は1日最大1億5,000万件のレコードを処理でき、サーバー側で200レコード単位に自動分割されるため、手動でのバッチ調整が不要となり日々のガバナ制限を保護できます。

Salesforce Pub/Sub APIは、接続切断時のメッセージ配信をどのように保証しますか?

Salesforce Pub/Sub APIはSalesforce Event Busを利用しており、大容量プラットフォームイベントやChange Data Captureの変更履歴を72時間保持します。サブスクライバーは不透明なReplay IDによりストリーム内の位置を追跡します。ネットワーク切断後の再接続時も、最後にコミットしたReplay IDの提示や管理サブスクリプションの利用により、メッセージを損失することなく配信を再開できます。

Canvas Developersは、AIでスキャフォールディングされたSalesforce連携をどのように堅牢化しますか?

Canvas Developersは、スキーマやクライアントスタブ、パーサーを迅速に雛形生成するAIコーディングツールと、厳格なエンジニアによる監視を組み合わせています。経験豊富なエンジニアがアーキテクチャを主導し、コードレビュー、OAuthセキュリティ設定、リトライバッファの構築、統合テストを徹底します。これにより迅速な提供を実現しつつ、同時実行のボトルネックやデータの重複、ガバナ制限の枯渇を防ぎます。