この記事は新社会人のSalesforce学習記録とその他 Advent Calendar 2025の7日目の記事です。
非同期処理のBatch Apexです。
他と違ってコードが特徴的です。
Batch Apexの特徴
Batch Apexは大量のレコードを処理するのに最適な非同期処理です。
通常の同期処理では、SOQLを使おうとしてもガバナ制限によって割と早い段階で上限を迎えてしまいます。しかし、BatchApexであれば、数百万単位で問題なく処理を行うことができます。
バルク処理という、大量のレコードを小さな大量の塊にしてちょっとずつ処理していくやり方です。以下で解説します。
バルク処理

簡潔にまとめるとこんな感じです。バルク処理では、ガバナ制限の上限である200個までに引っかからないようにするため200個の塊を大量につくります。
するといいかんじに、サーバーに入るわけです。大量なので時間がかかるわけで、非同期になっています。
書き方
主に
・start
・execute
・finish
の3つから構成されています。
また、implements Database.Batchableがくっついています。
start
まずは処理を行うレコードの準備を行います。処理は次の段階(execute)で行うためここでは行いません。
public class BatchStudy implements Database.Batchable<sObject> {
public Database.QueryLocator start(Database.BatchableContext bc) {
// ここで準備する
return Database.getQueryLocator('SELECT Id, Name FROM Contact');
}
}
準備するレコードをreturnします。
execute
ここでは、startで準備されたレコードに対して処理を行っていきます。ちなみにここの段階で指定されたバッチの大きさの塊(チャンク)に分割されます。また、処理済みのレコードはこの段階で挿入されます。
public void execute(Database.BatchableContext bc, List<Contact> con){
//ここに処理を入れる
}
第2引数のListにContactを指定していますが、startで取得したオブジェクトのものであればOKです。
finish
バッチに対しての処理は既に完了しているので、後処理が行われます。
public void finish(Database.BatchableContext bc){
//ここに後処理を入れる
}
まとめ
Batch Apexを使用すると、大量のレコードを処理できる。
start、execute,finishの3つから構成されており、それぞれ役割を持っている。