Apexバッチとは

Apexバッチは、Salesforce プラットフォーム上で大量のデータを効率的に処理するための仕組みです。バッチ処理は非同期で実行され、大規模なデータセットに対して操作を行うことができます。Apexバッチは Database.Batchable インターフェースを実装することで定義されます。

以下は、Apexバッチの主な構成要素や特徴です:

  1. Database.Batchable インターフェース:

    • Apexバッチは、Database.Batchable インターフェースを実装します。このインターフェースには、startexecutefinish の 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) {
            // バッチ処理の終了時に実行される処理
            // ...
        }
    }
    
  2. start メソッド:

    • バッチ処理の最初に一度だけ呼び出され、処理の準備などを行います。このメソッドは Database.QueryLocator を返す必要があります。
    • Database.QueryLocatorで取得可能なレコード数の上限が5000万件にまで拡張されます。
  3. execute メソッド:

    • バッチ処理のメインロジックを記述するメソッドです。データセットを受け取り、それに対して処理を行います。このメソッドが実行されるごとに新しいトランザクションが開始されます。
  4. 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);
    }
}