0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

この記事は新社会人のSalesforce学習記録とその他 Advent Calendar 2025の7日目の記事です。
非同期処理のBatch Apexです。
他と違ってコードが特徴的です。

Batch Apexの特徴

Batch Apexは大量のレコードを処理するのに最適な非同期処理です。
通常の同期処理では、SOQLを使おうとしてもガバナ制限によって割と早い段階で上限を迎えてしまいます。しかし、BatchApexであれば、数百万単位で問題なく処理を行うことができます。
バルク処理という、大量のレコードを小さな大量の塊にしてちょっとずつ処理していくやり方です。以下で解説します。

バルク処理

アドカレ1207_1.png
簡潔にまとめるとこんな感じです。バルク処理では、ガバナ制限の上限である200個までに引っかからないようにするため200個の塊を大量につくります。
するといいかんじに、サーバーに入るわけです。大量なので時間がかかるわけで、非同期になっています。

書き方

主に
・start
・execute
・finish
の3つから構成されています。
また、implements Database.Batchableがくっついています。

start

まずは処理を行うレコードの準備を行います。処理は次の段階(execute)で行うためここでは行いません。

BatchStudy.apxc
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で準備されたレコードに対して処理を行っていきます。ちなみにここの段階で指定されたバッチの大きさの塊(チャンク)に分割されます。また、処理済みのレコードはこの段階で挿入されます。

BatchStudy.apxc
    public void execute(Database.BatchableContext bc, List<Contact> con){
        //ここに処理を入れる
    }

第2引数のListにContactを指定していますが、startで取得したオブジェクトのものであればOKです。

finish

バッチに対しての処理は既に完了しているので、後処理が行われます。

BatchStudy.apxc
    public void finish(Database.BatchableContext bc){
        //ここに後処理を入れる
    }

まとめ

Batch Apexを使用すると、大量のレコードを処理できる。
start、execute,finishの3つから構成されており、それぞれ役割を持っている。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?