2
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】非同期のFutureメソッドとQueueableクラスって何が違うの?

Last updated at Posted at 2024-12-12

FutureメソッドQueueableクラスは、Salesforceで非同期処理を行うための仕組みです。

それぞれの特徴と使い方について説明します。


1. Futureメソッド

Futureメソッドは、非同期で軽量な処理を実行する際に使用します。

特徴

  • 軽量: 簡単に非同期処理を設定できる。
  • 単一のトランザクション: 実行される処理は完全に独立している。
  • コールアウト対応: @future(callout=true) を指定すると、外部API呼び出しが可能。
  • 制限事項:
    • メソッドの引数はプリミティブ型(例: String, Integer)かコレクション型(例: List<String>)のみ。
    • メソッドから戻り値を取得できない。
    • コンテキスト情報(ジョブIDなど)を追跡するのが難しい。

Futureメソッドの宣言

public class FutureExample {
    @future(callout=true)
    public static void executeFuture(String accountId) {
        // 外部APIコールアウトなどの処理
        System.debug('Executing future method for Account ID: ' + accountId);
    }
}

トリガやクラスからの呼び出し

trigger AccountTrigger on Account (after insert) {
    for (Account acc : Trigger.new) {
        FutureExample.executeFuture(acc.Id);
    }
}

2. Queueableクラス

Queueableクラスは、非同期で複雑な処理や、状態管理が必要な処理を行う場合に使用します。

特徴

  • 状態管理: 非同期ジョブの処理状況を追跡可能(ジョブIDを取得できる)。
  • 柔軟な引数: クラスのコンストラクタで任意の型を引数に受け取れる。
  • コールアウト対応: Database.AllowsCallouts インターフェースを実装すれば外部API呼び出し可能。
  • 連鎖処理: System.enqueueJob() を使って、別のQueueableジョブをキューに追加可能。
  • 制限事項:
    • 同じQueueableクラスの連鎖呼び出しは50回まで。
    • 扱えるレコード数は1回の実行で50,000件まで。

Queueableクラスの作成

public class QueueableExample implements Queueable, Database.AllowsCallouts {
    private String accountId;

    // コンストラクタ
    public QueueableExample(String accountId) {
        this.accountId = accountId;
    }

    // executeメソッド
    public void execute(QueueableContext context) {
        System.debug('Executing queueable job for Account ID: ' + accountId);
        // 外部API呼び出しや複雑な処理を実行
    }
}

ジョブの登録

trigger AccountTrigger on Account (after insert) {
    for (Account acc : Trigger.new) {
        System.enqueueJob(new QueueableExample(acc.Id));
    }
}

ジョブIDの取得

Id jobId = System.enqueueJob(new QueueableExample('0015g00000xxxxx'));
System.debug('Queueable Job ID: ' + jobId);

Futureメソッド vs Queueableクラス

項目 Futureメソッド Queueableクラス
柔軟性 少ない 高い
引数 プリミティブ型、コレクション 任意の型(カスタムクラス含む)
戻り値 なし ジョブIDで追跡可能
ジョブ連鎖 不可能 可能
コールアウト 可能(@future(callout=true) 可能(Database.AllowsCallouts
追跡可能性 低い 高い
主な用途 軽量でシンプルな処理 複雑で連鎖的な処理

どちらを使うべきか?

  • シンプルで軽量な非同期処理が必要 → Futureメソッド
  • 複雑な処理や状態管理が必要Queueableクラス

例: 外部API呼び出しの場合

  • 簡単な外部APIコールアウト: Futureメソッド
  • 複数のステップを伴うAPIコールアウト: Queueableクラス

用途に応じて使い分けましょう!

2
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
2
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?