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】@futureとは?

Posted at

SalesforceのApexには非同期処理を実装するための @future アノテーションがあります。本記事では @future の基本的な使い方や特徴、注意点について解説します。

@futureとは?

@future は、Apexのメソッドを非同期に実行するためのアノテーションです。時間のかかる処理や、DMLの制約を回避する際に利用されます。

特徴

  • 非同期実行:トランザクションの終了後にSalesforceが実行
  • DML操作可能:ただし、トランザクションが異なる
  • Webコールアウト可能callout=true を指定することで、外部APIを呼び出せる
  • 静的メソッドでのみ使用可能

@futureの基本的な使い方

以下のコードは @future を使ってアカウント名を非同期で更新する例です。

コールアウトを含む@futureメソッド

外部APIを呼び出す場合は、callout=true を指定します。

public class FutureCalloutExample {
    @future(callout=true)
    public static void doCallout() {
        Http http = new Http();
        HttpRequest request = new HttpRequest();
        request.setEndpoint('https://api.example.com/data');
        request.setMethod('GET');
        HttpResponse response = http.send(request);
        System.debug(response.getBody());
    }
}

@futureの制約

@future メソッドを使用する際には、以下の点に注意が必要です。

  • メソッドは静的である必要がある
  • 戻り値を持てない(voidである必要がある)
  • パラメータはプリミティブ型またはリストのみSObject を直接渡せない)
  • 同一トランザクションで最大50回までしか呼び出せない
  • @future メソッドから他の @future メソッドを呼び出せない(ネスト不可)
  • トランザクション完了後に処理されるため、即時実行が保証されない

いつ@futureを使うべきか?

@future を使うケース

  • DML制限を回避したいとき
  • Web APIコールアウトを非同期で実行したいとき
  • 時間のかかる処理を非同期で実行したいとき

@future を避けるべきケース

  • 即時実行が必要な場合(非同期のため、処理順が保証されない)
  • 複雑な非同期制御が必要な場合Queueable の方が適している)
  • 連続的な非同期処理が必要な場合@future メソッドから別の @future メソッドは呼べない)

まとめ

sObjectやオブジェクトを引数として取ることはできませんので、そこは注意が必要ですね。

@future も、使用する際にはガバナ制約やトランザクションの影響を考慮する必要があります。

もしより柔軟な非同期処理を行いたい場合は、@QueueableApexバッチ も検討すると良いと思います。

参考
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_annotation_future.htm

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?