- リンクを取得
- ×
- メール
- 他のアプリ
Batch Apex を使用する理由とそのメリット
Salesforce では、大量のデータ処理や特定のスケジュールで実行される複雑な操作を実行する必要がある場合に Batch Apex が利用されます。Batch Apex は Salesforce のガバナ制限を回避しつつ効率的にデータを処理するための重要な機能です。以下に、Batch Apex を使用する理由とそのメリットを詳しく説明します。
1. ガバナ制限を超えた大量データ処理
Salesforce は以下のようなガバナ制限を持っています:
- 単一トランザクションでの SOQL クエリ制限 (最大 100 件)
- DML 操作制限 (最大 150 件)
- プロセスされるレコード数 (最大 50,000 件)
Batch Apex を使用すると、これらの制限を回避して数百万件規模のレコードを処理できます。Batch Apex は指定されたサイズでデータを分割して処理するため、制限を超えた操作が可能です。
2. 効率的なスケジューリング
Batch Apex は非同期で実行されるため、メインのユーザー操作に影響を与えずにバックグラウンドで処理を行えます。また、System.scheduleBatch
を使用して、特定のタイミングでジョブを実行することも可能です。
3. データの分割処理
Batch Apex はデータを「バッチ」と呼ばれる小さなチャンクに分割して処理します。それにより、以下が可能になります:
- プロセスが途中で失敗しても影響を最小限に抑えられる
- 処理結果の詳細なログやエラー情報を取得可能
- 個々のバッチでリソースを効率的に管理
4. 高度なカスタマイズ
Batch Apex を使用すると、ビジネスロジックを柔軟にカスタマイズできます。たとえば、次のようなシナリオで役立ちます:
- 特定の条件に基づいてレコードをフィルタリングして処理
- 複数オブジェクトをまたぐ処理
- データ集計や他システムとの連携処理
5. 再試行可能な非同期処理
Batch Apex のジョブは非同期で実行されるため、システムの負荷が高い時間帯を避けたり、後で再試行したりすることが可能です。また、Database.SaveResult
を活用することで、失敗したレコードを識別して再処理できます。
6. Salesforce ガバナンス要件への準拠
Batch Apex は Salesforce の設計思想に基づき、大量データ処理の際のプラットフォームへの影響を最小限に抑えます。そのため、サーバーリソースを効率的に利用し、他のユーザーやプロセスに影響を与えません。
Batch Apex の具体例
以下は、すべてのアカウントにフラグを設定するバッチプロセスのサンプルコードです:
- global class BatchUpdateAccounts implements Database.Batchable<sObject> {
- // Start メソッド: バッチ処理の対象を定義
- global Database.QueryLocator start(Database.BatchableContext bc) {
- return Database.getQueryLocator('SELECT Id, Active__c FROM Account WHERE PersonHasOptedOutOfEmail = false');
- }
- // Execute メソッド: 個々のバッチで実行する処理を定義
- global void execute(Database.BatchableContext bc, List<Account> scope) {
- for (Account acc : scope) {
- acc.PersonHasOptedOutOfEmail = true;
- }
- update scope;
- }
- // Finish メソッド: バッチ処理終了時の後処理
- global void finish(Database.BatchableContext bc) {
- System.debug('Batch processing complete.');
- }
- }
実行方法
- BatchUpdateAccounts batch = new BatchUpdateAccounts();
- Database.executeBatch(batch, 200); // バッチサイズ 200
Batch Apex の代替手段
- Queueable Apex: シンプルな非同期処理に適しており、バッチ処理よりも軽量。
- Future メソッド: 非同期処理を簡単に記述できるが、複雑なロジックには不向き。
- Scheduled Apex: 時間ベースの処理に特化している。
コメント
コメントを投稿