Apexバッチとは
Apexバッチは、Salesforce プラットフォーム上で大量のデータを効率的に処理するための仕組みです。バッチ処理は非同期で実行され、大規模なデータセットに対して操作を行うことができます。Apexバッチは Database.Batchable
インターフェースを実装することで定義されます。
以下は、Apexバッチの主な構成要素や特徴です:
-
Database.Batchable
インターフェース:- Apexバッチは、
Database.Batchable
インターフェースを実装します。このインターフェースには、start
、execute
、finish
の 3 つのメソッドが含まれています。
global class MyBatchClass implements Database.Batchable<sObject> { global Database.QueryLocator start(Database.BatchableContext BC) { // バッチ処理の開始前に実行される処理 // ... } global void execute(Database.BatchableContext BC, List<sObject> scope) { // バッチ処理のメインロジック // ... } global void finish(Database.BatchableContext BC) { // バッチ処理の終了時に実行される処理 // ... } }
- Apexバッチは、
-
start
メソッド:- バッチ処理の最初に一度だけ呼び出され、処理の準備などを行います。このメソッドは
Database.QueryLocator
を返す必要があります。 Database.QueryLocator
で取得可能なレコード数の上限が5000
万件にまで拡張されます。
- バッチ処理の最初に一度だけ呼び出され、処理の準備などを行います。このメソッドは
-
execute
メソッド:- バッチ処理のメインロジックを記述するメソッドです。データセットを受け取り、それに対して処理を行います。このメソッドが実行されるごとに新しいトランザクションが開始されます。
-
finish
メソッド:- バッチ処理が完了した際に一度だけ呼び出され、後処理などを行います。通常、ログの出力やレポートの生成などがここで行われます。
Apexバッチの中に他のバッチを呼び出す方法
Apexバッチから別のバッチを呼び出すには、finish
メソッド内しか呼び出すことができませんので、
finish
メソッド内で Database.executeBatch
を使用して、別のバッチを実行できます。
global class MyBatchClass implements Database.Batchable<sObject> {
global Database.QueryLocator start(Database.BatchableContext BC) {
// バッチ処理の開始
// ...
}
global void execute(Database.BatchableContext BC, List<sObject> scope) {
// バッチ処理の実行
// ...
}
global void finish(Database.BatchableContext BC) {
// バッチ処理の終了
// ...
// 別のバッチを非同期に実行
AnotherBatchClass anotherBatch = new AnotherBatchClass();
Database.executeBatch(anotherBatch);
}
}