Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

Apex バッチでバッチ数を制御し、スコープサイズを設定する

公開日: May 1, 2026
説明
※この記事は英語版を翻訳しており、一部機械翻訳を含むため内容は後日更新される可能性があります。最新の内容は英語版を参照してください。表示言語は画面右下の言語名から切り替えられます。

注意: この記事の内容は、start メソッドが内部クエリ (サブクエリ) を含まない SOQL クエリのクエリロケータを返す Apex 一括処理ジョブに適用されます。

設定されたバッチサイズで Apex 一括処理ジョブが実行される場合、1 回のバッチ反復で処理されるレコード数が設定されたバッチサイズ (scopeSize) と同じになるという保証はありません。その結果、バッチ反復回数は、クエリロケータが返すレコード数を設定されたスコープサイズで割った値よりも大きい最小の整数にはなりません。
解決策

クエリロケータからのレコードは、retrieveChunkSize と呼ばれる特定のチャンクサイズのチャンクで取得されます。

retrieveChunkSize には 100、400、2000 の 3 つの値を選択可能で、スコープサイズ (scopeSize) 以上の最小の値が選択されます。
  • 1 <= scopeSize <= 100 の場合、retrieveChunkSize = 100
  • 101 <= scopeSize <= 400 の場合、retrieveChunkSize = 400
  • 401 <= scopeSize <= 2000 の場合、retrieveChunkSize = 2000
ただし、各実行チャンク (execute() メソッドに渡されるレコード) のサイズは、選択された retrieveChunkSize、scopeSize、現在の取得チャンクで利用可能なレコードによって異なります。

たとえば、レコードが 290、スコープサイズが 75 である場合、retrieveChunkSize は 100 になります。この場合、3 つの取得チャンクと 6 つの実行チャンクができます。
 
1.取得チャンク 1: 最初の 100 レコードを取得します
  • 実行チャンク 1: 最初の 75 レコードを execute() メソッドに渡します
  • 実行チャンク 2: 残りの 25 レコードをこの取得チャンクから execute() メソッドに渡します
2.取得チャンク 2: 次の 100 レコードを取得します
  • 実行チャンク 1: この取得チャンクの最初の 75 レコードを execute() メソッドに渡します
  • 実行チャンク 2: 残りの 25 レコードをこの取得チャンクから execute() メソッドに渡します
3.取得チャンク 3: 残りの 90 レコードを取得します
  • 実行チャンク 1: この取得チャンクの最初の 75 レコードを execute() メソッドに渡します
  • 実行チャンク 2: 残りの 15 レコードをこの取得チャンクから execute() メソッドに渡します

この場合、バッチの総数は 6 であり、上限 (290/75) = 4 ではありません。

要するに、今回のケースでは 100 レコードの完全なチャンクがあれば、それぞれ 75 レコードと 25 レコードの 2 つの子バッチ実行で処理されます。
ナレッジ記事番号

000381863

 
読み込み中
Salesforce Help | Article