ストリーミング API の使用

学習の目的

この単元を完了すると、次のことができるようになります。
  • プル技術を凌ぐプッシュ技術の主な利点を説明する。
  • ストリーミング API でサポートされるさまざまなイベント製品について説明する。
  • イベントバスの使用と再生オプションを指定する方法について説明する。

ストリーミングイベント

Salesforce のデータ API に関する調査の結論を出すために、まったく異なるユースケースに用いられるもう 1 つの API を見てみましょう。ストリーミング API では、公開-登録モデルを使用してクライアントにリアルタイムの通知をプッシュできます。一部の種類の通知は Salesforce でのデータ変更に基づきます。このような通知は、変更データキャプチャイベントと PushTopic イベントを使用すると可能です。その他の通知にはお客様が定義するカスタムデータが含まれます。このような通知には、プラットフォームイベントと汎用ストリーミングが含まれます。

他の API ではクライアントアプリケーションが Salesforce にデータを要求する方式 (プル型) が採られていますが、プッシュ型通知はこのプル型とどのように異なるのでしょうか? ここで、船長になった気分でこの違いを検証してみましょう。

船長となったあなたは外洋航海中、予測される危険や他の船舶、そして宝に溢れた島々を見逃さないようにしたいと考えています。船員の 1 人を見張り台に登らせ、異変を積極的に見つけ出すよう指示します。では開発者の立場に戻ります。あなたは開発者で、取引先が更新されていないかどうかを定期的に確認する REST または SOAP API を使用して、アプリケーションを記述しているとします。取引先データを絶えず要求して、古いデータと一致しているかどうかを確認することは、異変を積極的に見つけ出すことに通じる手法です。

さて、あなたは再び船上にいるとします。ただし、今回は最新のレーダー表示装置を利用できるものとします。気になる物体が近づくと表示装置から信号音が発せられるため、見張り台に船員を立たせておく必要がありません。

ストリーミング API は、このレーダーの役割を果たします。API でイベントを定義し、イベントが発生したときにクライアントアプリケーションに通知を転送 (プッシュ) できます。データの変更やカスタム通知を積極的に見つけ出す必要がありません。Salesforce に絶えずポーリングして、不要な API 要求を行う必要がありません。

ストリーミング API はレーダーと同様、データの変更を検知して通知を送受信することができます。

Salesforce の外部にあるシステムにビジネスデータが保存されている場合は特に Salesforce のデータ変更の追跡が役立ちます。ストリーミング API を使用すれば、変更データキャプチャイベントと PushTopic イベントを使用して、外部ソースを Salesforce データと常に同期させておくことができます。また、ストリーミング API により、Salesforce でのデータの変更に応じて、外部システムでビジネスプロセスを処理できます。たとえば、ストリーミング API を使用すれば、商談が更新されるたびに注文発送センターに通知することができます。

データ変更のほかにも、ストリーミング API では、プラットフォームイベントと汎用ストリーミングを使用してカスタム通知をブロードキャストできます。たとえば、アプリケーションは、注文フルフィルメントサービスが処理する注文のプラットフォームイベント通知を生成できます。または、Salesforce によって公開されるプラットフォームイベントをリスンして、Salesforce 内のユーザアクティビティを監視できます。汎用イベントの場合は、イベントをリスンし、システムメンテナンス期間の開始前やユーザへの新機能の提供時などにメッセージを表示できます。

ストリーミング API とイベント製品

ストリーミング API は CometD に基づく登録メカニズムで、イベントメッセージのリアルタイムストリーミングを可能にします。CometD を使用すると、データが利用可能になったときに、クライアントがサーバとの接続を維持している場合、サーバからクライアントにデータをプッシュできます。 


初期のストリーミング API では PushTopic と汎用ストリーミングという 2 種類のイベントが提供されました。 

  • PushTopic イベント — PushTopic イベントは Salesforce データに関連付けられています。PushTopic レコードの SOQL クエリで定義する条件に基づいて、Salesforce レコードの変更をクライアントにストリーミングできます。イベントメッセージには、SOQL クエリで指定する項目のみが含まれます。追跡されるレコード操作は、レコードの作成、更新、削除、復元です。
  • 汎用ストリーミングイベント — 汎用ストリーミングイベントでは、クライアントが受信する任意の文字列値を使用してイベントメッセージを公開できます。

その後、第二世代のイベント製品が導入されました。 

  • 変更データキャプチャ — 変更データキャプチャは PushTopic イベントの新しいバージョンです。変更データキャプチャを使用すると、サポート対象である変更された項目すべてのレコードの変更を受信します。追跡されるレコード操作は、レコードの作成、更新、削除、復元です。SOQL クエリを指定する必要はありません。各イベントメッセージには、変更に関する情報を表示するヘッダー項目が含まれます。
  • プラットフォームイベント — プラットフォームイベントは汎用ストリーミングの新しいバージョンです。カスタムプラットフォームイベントを使用して、カスタム通知を公開および登録できます。プラットフォームイベントオブジェクトと項目を作成して、イベントデータのスキーマを定義できます。また、Salesforce によって定義および公開される標準プラットフォームイベントに登録して、Salesforce 内のユーザ関連アクティビティやセキュリティ関連アクティビティなどを監視できます。
第一世代と第二世代のイベント製品

すべてのイベント製品では、ストリーミング API で表される、CometD に基づく同じ登録メカニズムがサポートされています。また、イベントバスも使用されています。イベントバスは、イベントメッセージの保存と取得を可能にするサービスです。 


新しいイベント製品であるプラットフォームイベントと変更データキャプチャでは、柔軟性、拡張性、強化されたセキュリティが提供されています。 

  • これらのイベント製品では CometD の他にも登録方法がサポートされています。Apex トリガを使用してプラットフォームイベントと変更データキャプチャイベントに登録できます。さらに、プラットフォームイベントではフローとプロセスを使用した登録がサポートされています。
  • 第二世代のイベント製品では、イベントデータの保存時の暗号化がサポートされています。
  • プラットフォームイベントまたは変更データキャプチャイベントのバージョン付きスキーマで、登録者はイベントを確定的に解析できます。各スキーマのバージョンは、イベント通知メッセージに含まれる一意のスキーマ ID に対応しています。
  • 変更データキャプチャでは、PushTopic イベントより多くの標準オブジェクトが提供されています。また、変更データキャプチャイベントでは、変更に関する情報が含まれるヘッダー項目など、追加の機能が提供されています。

Salesforce では、プラットフォームイベントと変更データキャプチャに新機能を追加して、今後も機能を拡張していきます。引き続き古いイベント製品の PushTopic イベントと汎用イベントを提供し、サポートしますが、アップグレードのロードマップには含まれていません。各イベント製品で提供される機能を比較するには、『Streaming API 開発者ガイド』「ストリーミングイベント機能」を参照してください。

イベントバスを使用した過去の通知の取得

API バージョン 37.0 以降、イベントはイベントバスに公開されます。登録者はイベントバスのチャネルから、イベント (一時的に保存されている過去のイベントを含む) を取得します。イベントバスは、イベント登録者からイベント公開者を切り離します。

PushTopic イベント、汎用イベント、標準規模のイベントは 24 時間、大規模イベントは 72 時間それぞれ保存されます。大規模イベントには、プラットフォームイベントと変更データキャプチャイベントが含まれます。標準規模イベントは使用できなくなり、Spring ’19 より前に定義されたイベントのみが含まれます。 

保存されたイベントメッセージをイベントバスから取得すると、クライアントが切断されていた間に見逃したイベントを確認できます。 

API バージョン 37.0 以降、各イベントメッセージには ReplayId という項目が含まれています。ReplayId 項目値は、イベントが登録者に配信されるときにシステムによって入力され、イベントストリーム内のイベントの位置を参照します。連続するイベントの再実行 ID 値が連番になるという保証はありません。たとえば、ID 999 のイベントの次のイベントの ID が 1,025 になることもあり得ます。

登録者は、再実行 ID 値を保存し、その ID を再登録で使用して保持期間内のイベントを取得することができます。たとえば、登録者は接続障害が発生した後に、欠落イベントを取得できます。登録者が、保存された再実行 ID に基づいて新しい再実行 ID を計算し、ストリーム内の他のイベントを参照することはできません。

さらに、次の表に示す他の再生オプションがあります。

表 1. 再生オプション  
再生オプション 説明 使用方法
再実行 ID 登録者は、replayId 値で指定したイベント後に発生したすべての保存されたイベントと新しいイベントを受信します。 特定のイベントメッセージ (接続障害など) の後に、見逃したイベントを確認することができます。特定の再生 ID を使用して登録するには、取得する保存されたイベントの最初のイベントメッセージの再生 ID を保存します。そして、再登録するときにこの再生 ID を使用します。
-1 登録者は、クライアントが登録した後にブロードキャストされる新規イベントを受信します。 新しいイベントメッセージを受信するように、クライアントは -1 オプションを使用して登録することをお勧めします。クライアントが以前のイベントメッセージを取得する必要がある場合は、他の再生オプションを使用できます。
-2 登録者は、保管期間中の過去のイベントと、新規イベントを含め、すべてのイベントを受信します。 たとえば接続障害などの後に、見逃したイベントを確認し、すべての保存されているイベントを取得することができます。このオプションは慎重に使用してください。多数のイベントメッセージが保存されている場合に -2 オプションを使用して登録すると、パフォーマンスが低下する恐れがあります。

次の図は、イベントコンシューマがさまざまな再生オプションを使用してイベントのストリームを読み取る方法を示しています。

ストリーミングイベントと再生オプション
無料で学習を続けましょう!
続けるにはアカウントにサインアップしてください。
サインアップすると次のような機能が利用できるようになります。
  • 各自のキャリア目標に合わせてパーソナライズされたおすすめが表示される
  • ハンズオン Challenge やテストでスキルを練習できる
  • 進捗状況を追跡して上司と共有できる
  • メンターやキャリアチャンスと繋がることができる