いつもご愛読いただきありがとうございます。
Salesforceで大量のレコードを処理する際に、エラーやパフォーマンスの問題に悩まされていませんか?
これを解決するための効果的な方法が「Apexのバッチ処理」です。
本記事では、大量のレコードをApexバッチで処理する方法について、ご紹介させていただきます。
Apexバッチとは
ApexバッチはSalesforceのApexコードを使って大量のレコードを非同期で処理するための機能です。
この機能を利用することで、レコードを小さな塊に分けて、順次処理することができます。
これにより、システムの負荷を分散させることができるのです。
Apexバッチの構造
Batchable インターフェース
Apexクラスで Database.Batchable インターフェースを実装します。
start メソッド
最初に呼び出され、SOQLで、処理対象のレコードを取得します。
execute メソッド
取得したレコードの更新処理等を行います。
取得したレコードは、バッチサイズ(一度に処理するレコード数)に分割され、処理されます。
finish メソッド
完了後に呼び出され、後処理を行ないます。
Apexバッチの実装例
以下は、Apexバッチで取引先オブジェクトのカスタム項目を更新する例です。
/**
* 取引先有効化バッチ
*/
public class AccountActiveBatch implements Database.Batchable<Sobject> {
/** 開始 */
public Database.QueryLocator start(Database.BatchableContext bc) {
// 対象となる取引先レコードを取得
return Database.getQueryLocator([SELECT Id FROM Account WHERE IsActive__c = false]);
}
/** 処理 */
public void execute(Database.BatchableContext bc, List<Account> accList) {
// 取引先を更新
List<Account> updAccList = new List<Account>();
for (Account acc : accList) {
updAccList.add(new Account(Id=acc.Id, IsActive__c=true));
}
update updAccList;
}
/** 完了 */
public void finish(Database.BatchableContext bc) {
// バッチ完了後の処理(メール送信やログ記録など)
}
}
Apexバッチの手動実行
Apexバッチは開発者コンソールから手動で実行することができます。
右上の歯車アイコンから「開発者コンソール」を選択します。
開発者コンソールが開いたら、Debugメニューから「Open Execute Anonymous Window」を選択します。
入力する画面が開いたら、以下のようなApexコードを入力します。
Apexバッチを実行するには Database.executeBatch メソッドを使用します。
この例では、バッチサイズ(一度に処理するレコード数)に200を設定しています。
「Execute」ボタンをクリックしてApexバッチを実行します。
Apexバッチの実行結果は、設定の「Apex ジョブ」で、確認することができます。
また、「Apex ジョブ」では、実行中のApexバッチを中止する事もできます。
Apexバッチのスケジュール実行
ApexバッチはApexスケジューラーで指定した時間に実行することもできます。
Apexクラスで Schedulable インターフェースを実装し、execute メソッドでApexバッチを呼び出します。
以下はApexスケジューラーの例です。
public class AccountActiveBatchScheduler implements Schedulable {
public void execute(SchedulableContext sc) {
Database.executeBatch(new AccountActiveBatch());
}
}
Apexスケジューラーは設定の「スケジュール済みジョブ」や開発者コンソールで登録することができます。
開発者コンソールで登録する場合は、System.schedule メソッドを使用します。
このメソッドは、ジョブ名、実行予定日時を表す式、Apexスケジューラーという 3 つの引数を取ります。
以下は「取引先有効化バッチ」というジョブ名で毎日午前6時にApexスケジューラーを実行させる例です。
System.schedule('取引先有効化バッチ', '0 0 6 * * ?', new AccountActiveBatchScheduler());
手動実行の時と同様に開発者コンソールのDebugメニューから「Open Execute Anonymous Window」を選択し、入力画面にコードを入力、「Execute」ボタンをクリックして登録します。
実行予定日時を表す式の意味は次のとおりです。
式の構文
秒 分 時 日 月 曜日 年(省略可)
式の値
特殊文字の定義
具体例
まとめ
Apexバッチを活用することで、大量のレコードを効率的に処理できます。
またトランザクションの制限やガバナ制限によるエラーにも悩まされず、システムのパフォーマンスを維持できます。
サンブリッジはSalesforceの日本法人設立パートナーであり、国内でも早くからSalesforceの導入・開発支援を行ってきました。
また、自社製品の開発やSalesforceを基盤とした他サービスの導入、Salesforceとの連携なども積極的に行っています。
「既存の環境を改修したいが対応できる人がいない」「もっとSalesforceを活用したいがどの機能から手を付けてよいかわからない」などお困りの際は、ぜひ、サンブリッジにご相談ください!
最後までお読みいただきありがとうございました。
Salesforce導入・活用支援のご案内

サンブリッジが提供するSalesforce導入・活用支援サービスは、お客様の現状の業務用件や目指すゴールをヒアリングし、システム設計から実装までを行います。
導入後のトレーニングまでを含むきめ細やかなサービスを一貫して実施することにより、Salesforceの活用向上と導入の効果を最大化します。