Skip to main content
Register now for TDX! Join the must-attend event to experience what’s next and learn how to build it.

プラットフォームイベントトリガーのバッチサイズを調整する

学習の目的

この単元を完了すると、次のことができるようになります。

  • プラットフォームイベントトリガーのバッチサイズが小さい場合と大きい場合の長所と短所を挙げる。
  • Tooling API を使用して PlatformEventSubscriberConfig でトリガーバッチサイズを設定する。
メモ

メモ

日本語で受講されている方へ
Challenge は日本語の Trailhead Playground で開始し、かっこ内の翻訳を参照しながら進めていってください。Challenge での評価は英語データを対象に行われるため、英語の値のみをコピーして貼り付けるようにしてください。日本語の組織で Challenge が不合格だった場合は、(1) この手順に従って [Locale (地域)] を [United States (米国)] に切り替え、(2) [Language (言語)] を [English (英語)] に切り替えてから、(3) [Check Challenge (Challenge を確認)] ボタンをクリックしてみることをお勧めします。

翻訳版 Trailhead を活用する方法の詳細は、自分の言語の Trailhead バッジを参照してください。

プラットフォームイベントトリガーのバッチサイズ

デフォルトでは、トリガーはトリガー呼び出しごとに最大 2,000 件のイベントメッセージを受信できるバッチサイズになっています。このバッチサイズは、200 である通常の Apex オブジェクトトリガーのバッチサイズより大きくなっています。バッチサイズが大きいことで、プラットフォームイベントトリガーを拡張しやすくなり、大量のイベントをより速く処理できます。バッチサイズが大きいことによる副作用の 1 つは、特にトリガーが DML 操作や SOQL 操作を実行する場合に、Apex ガバナ制限に達する可能性が高くなることです。この場合は、バッチサイズを小さく設定することで、Apex ガバナ制限に達するのを避けやすくなります。

setResumeCheckpoint を使用すると、制限例外が発生した後にトリガーを再開できますが、トリガーバッチサイズを制限して制限例外自体を避けることも 1 つの方法です。

選択するトリガーバッチサイズ

トリガーバッチサイズは、イベントの公開レートによって決まります。トリガーバッチサイズを小さくすると、イベント処理が遅くなる場合があります。トリガーが大量のイベントを受信する場合、バッチサイズが小さいとイベント処理が追い付かず、受信イベントのキューが大きくなることがあります。

イベントはイベントバスに 72 時間保存されるため、バッチサイズが小さいことでトリガーの実行が遅くなると、保存されたイベントを場合によっては利用できなくなることがあります。小さすぎるバッチサイズを使用したり、バッチサイズを 1 に設定したりすることはお勧めしません。設定するバッチサイズを決めるときは、イベント量と、トリガーでのイベント処理速度を考慮してください。トリガーが Apex ガバナ制限に頻繁に達する場合には、トリガーバッチサイズを小さくして制限に達しないようにすることも効果的です。

Note

メモ

バッチサイズの設定に加えて、デフォルトの自動化プロセス実行ユーザーを上書きするユーザーを指定することもできます。独自のユーザーを使用する利点の 1 つは、レコードがそのユーザーによって作成され、OwnerId 項目にそのユーザーが自動入力され、デバッグログもそのユーザーによって作成されることです。このモジュールでは、その手順は省略します。

バッチサイズを設定する

デフォルトのバッチサイズを上書きするには、Tooling API または Metadata API の PlatformEventSubscriberConfig を使用します。この例では、Postman を使用して Tooling API 要求を実行し、OrderEventTrigger のバッチサイズを 100 に設定します。

Postman に Trailhead Playground 組織を接続する

  1. Trailhead Playground 組織にログインしていることを確認してください。
  2. 「Quick Start: Connect Postman to Salesforce (クイックスタート: Postman を Salesforce に接続する)」プロジェクトを完了して Postman を設定したら、Postman アプリケーションを開き、ワークスペースを選択して、Salesforce API コレクションの自分のフォークに移動します。
  3. [Authorization (認証)] タブで、最下部までスクロールして [Get New Access Token (新しいアクセストークンを取得)] をクリックします。
  4. [許可] をクリックします。
  5. [Manage Access Tokens (アクセストークンを管理)] ダイアログで、インスタンス URL をクリップボードにコピーします。
  6. [Use Token (トークンを使用)] をクリックします。
  7. [Variables (変数)] タブの _endpoint 行で、[VALUE] 列に先ほどコピーしたインスタンス URL を貼り付けます。
  8. 接続が機能していることをテストします。
  9. [Collections (コレクション)] で、Salesforce Platform API コレクションのフォークを選択します。
  10. [REST] を選択して、REST APIs を展開します。
  11. [GET Limits] を選択して、[Send (送信)] をクリックします。
  12. 応答ウィンドウの [Status (状況)] 項目に [Status: 200 OK] と表示されるはずです。表示されない場合は、ステップを繰り返して新しいトークンを取得します。

Tooling API コールを実行してトリガーバッチサイズを設定する

トリガー設定を作成する前に、トリガーの ID を取得する必要があります。トリガー ID は、SOQL クエリを実行して取得できます。

  1. Salesforce Platform APIs コレクションの自分のフォークで [Tooling] を展開し、[Tooling Query (Tooling クエリ)] をクリックします。
  2. [Params (パラメーター)] タブをクリックします。
  3. 前の単元のハンズオン Challenge で作成した OrderShippingEventTrigger の ID を取得します。[Query Params (クエリパラメーター)] の q に、SELECT Id FROM ApexTrigger WHERE Name='OrderShippingEventTrigger' というクエリを入力します。
  4. [Send (送信)] をクリックします。
  5. レスポンスにはトリガー ID が含まれます。次の手順で使用するために、その ID をコピーします。
{
 "size": 1,
 "totalSize": 1,
 "done": true,
 "queryLocator": null,
 "entityTypeName": "ApexTrigger",
 "records": [
   {
     "attributes": {
       "type": "ApexTrigger",
       "url": "/services/data/v60.0/tooling/sobjects/ApexTrigger/01q8b0000002wXDAAY"
     },
     "Id": "01q8b0000002wXDAAY"
   }
 ]
}
  1. Salesforce Platform APIs コレクションの自分のフォークで [Tooling] を展開し、[Post Tooling SObject (Tooling SObject を送信)] をクリックします。
  2. [Params (パラメーター)] タブをクリックします。
  3. [Path Variables (パス変数)] の SOBJECT_API_NAME に、PlatformEventSubscriberConfig と入力します。
  4. [Body (本文)] をクリックして、[Raw (未加工)] と [JSON] のオプションが選択されていることを確認します。
  5. 本文を次の JSON 本文に置き換えます。<Apex_Trigger_ID> プレースホルダーを、先ほどコピーしたトリガー ID に置き換えます。
{
    "BatchSize": "100",
    "DeveloperName":"OrderShippingEventTriggerConfig",
    "MasterLabel":"OrderShippingEventTriggerConfig",
    "PlatformEventConsumerId": "<Apex_Trigger_ID>"
}
  1. [Send (送信)] をクリックします。
  2. 201 Created」(201 作成済み) というレスポンスが返されることを確認します。レスポンスは次の例のようになります。
{
  "id": "3JK8b000000blKRGAY",
  "success": true,
  "errors": [],
  "warnings": [],
  "infos": []
}

これで、トリガーは一度に 100 件のイベントを処理するバッチサイズに設定されました。

詳細は、『Tooling API 開発者ガイド』の「PlatformEventSubscriberConfig」または『Metadata API 開発者ガイド』の「PlatformEventSubscriberConfig」を参照してください。

Note

メモ

トリガーが実行中でプラットフォームイベントに登録している場合は、プラットフォームイベント詳細ページの [Subscriptions (サブスクリプション)] 関連リストでトリガーを一時停止して再開した後に、新しい設定が有効になります。詳細は、『プラットフォームイベント開発者ガイド』の「View and Manage an Event’s Subscribers on the Platform Event’s Detail Page (プラットフォームイベントの詳細ページでイベントのサブスクライバーを表示および管理する)」を参照してください。

詳細は、『プラットフォームイベント開発者ガイド』の「Configure the User and Batch Size for Your Platform Event Trigger with PlatformEventSubscriberConfig (PlatformEventSubscriberConfig を使用してプラットフォームイベントトリガーのユーザーとバッチサイズを設定する)」を参照してください。

お疲れ様でした。この単元では、プラットフォームイベントの公開とサブスクリプションをデバッグするためのさまざまな手法を学習しました。また、堅牢なプラットフォームイベントトリガーの記述方法と、トリガーバッチサイズを制御する方法も学習しました。これで、Apex でイベント駆動型アプリケーションを自信を持って記述できるだけの知識と手法が身に付きました。

リソース

Salesforce ヘルプで Trailhead のフィードバックを共有してください。

Trailhead についての感想をお聞かせください。[Salesforce ヘルプ] サイトから新しいフィードバックフォームにいつでもアクセスできるようになりました。

詳細はこちら フィードバックの共有に進む