Salesforce Apexにおけるアノテーションとは?
Apexのアノテーション(Annotation)は、@
記号で始まる特別なマークで、クラスやメソッド、プロパティの振る舞いを制御するために使用されます。主に以下の目的で使われます。
- メソッドの実行権限の指定
- 特定の処理を有効化
- 設定の簡略化
Javaのアノテーションと似ていますが、Salesforce特有のものも多くあります。
主なアノテーション一覧
できるだけ多くのアノテーションを紹介し、それぞれの意味とコード例を示します。
① @AuraEnabled
意味:
Lightningコンポーネント(Aura・LWC)からApexメソッドを呼び出せるようにする。
使い方:
-
@AuraEnabled
だけ: フロントエンド(Aura/LWC)から参照可能なメソッド・プロパティ -
@AuraEnabled(cacheable=true)
: メソッドの結果をキャッシュ可能にし、パフォーマンスを向上させる
コード例:
public with sharing class AccountController {
@AuraEnabled(cacheable=true)
public static List<Account> getAccounts() {
return [SELECT Id, Name FROM Account LIMIT 10];
}
}
この getAccounts
メソッドは、LWC から呼び出してアカウント情報を取得できます。
② @Future
意味:
時間のかかる処理を非同期(バックグラウンド)で実行する。
ポイント:
-
@future
を付けたメソッドはstatic
でなければならない。 - DML操作や外部APIコールに適している。
コード例:
public class FutureExample {
@future
public static void updateAccounts() {
List<Account> accs = [SELECT Id, Name FROM Account];
for (Account acc : accs) {
acc.Name += ' (Updated)';
}
update accs;
}
}
このメソッドを実行すると、Apex の非同期キューに入れられ、すぐには実行されません。処理負荷の分散に役立ちます。
③ @InvocableMethod
意味:
フローやプロセスビルダーから実行可能なメソッドを定義する。
ポイント:
-
static
メソッドに適用する必要がある。 -
List<T>
型のパラメータを受け取ることが多い。
コード例:
public class AccountHelper {
@InvocableMethod(label='Update Account Names' description='Updates account names')
public static void updateAccountNames(List<String> accountIds) {
List<Account> accs = [SELECT Id, Name FROM Account WHERE Id IN :accountIds];
for (Account acc : accs) {
acc.Name += ' (Processed)';
}
update accs;
}
}
これをフローから呼び出せば、指定したアカウント名を一括更新できます。
④ @InvocableVariable
意味:
フローやプロセスビルダーで参照できるクラス変数を定義する。
コード例:
public class AccountWrapper {
@InvocableVariable
public String accountId;
@InvocableVariable
public String accountName;
}
このクラスをフローで利用し、データをやりとりできます。
⑤ @TestMethod (または @isTest)
意味:
テストメソッドやテストクラスを定義する。
ポイント:
-
@isTest
はクラス・メソッドのどちらにも使える。 -
@TestMethod
はメソッド専用(推奨されていない)。
コード例:
@isTest
private class AccountTest {
@isTest
static void testAccountCreation() {
Account acc = new Account(Name='Test Account');
insert acc;
System.assert(acc.Id != null);
}
}
Salesforce ではコードカバレッジのためにテストを書くことが必須です。
⑥ @ReadOnly
意味:
SOQL のクエリ制限を一時的に緩和し、50,000行以上のレコードを取得可能にする。
コード例:
public class ReadOnlyExample {
@ReadOnly
public static void fetchLargeData() {
List<Account> accounts = [SELECT Id, Name FROM Account];
System.debug('Total Accounts: ' + accounts.size());
}
}
バッチ処理や大規模データ分析に使われます。
⑦ @RemoteAction
意味:
Visualforce(VFページ)から JavaScript 経由で Apex メソッドを呼び出す。
コード例:
public class AccountRemoteController {
@RemoteAction
public static List<Account> getAccounts() {
return [SELECT Id, Name FROM Account LIMIT 10];
}
}
Visualforce から sforce.apex.execute()
を使って呼び出します。
⑧ @NamespaceAccessible
意味:
パッケージ開発時に、異なる名前空間のクラスやメソッドを呼び出し可能にする。
コード例:
@NamespaceAccessible
public class PublicUtility {
public static String getMessage() {
return 'Hello from Managed Package!';
}
}
このクラスは、パッケージ外からも利用できます。
⑨ @Deprecated
意味:
将来的に削除される可能性があるメソッドやクラスをマークする。
コード例:
public class SampleClass {
@Deprecated
public static void oldMethod() {
System.debug('This method is deprecated.');
}
}
将来削除予定のメソッドに使い、新しいメソッドを用意しておく。
まとめ
アノテーション | 用途 |
---|---|
@AuraEnabled |
LWC/Aura から呼び出し可能にする |
@Future |
非同期処理を実行する |
@InvocableMethod |
フローやプロセスビルダーから実行可能にする |
@InvocableVariable |
フローで使用するクラス変数を定義 |
@isTest |
Apex テストクラス・メソッドを定義 |
@ReadOnly |
SOQL のレコード取得上限を緩和 |
@RemoteAction |
Visualforce から JavaScript 経由で呼び出す |
@NamespaceAccessible |
パッケージ外からアクセス可能にする |
@Deprecated |
非推奨メソッドを示す |
Apex のアノテーションを適切に使うことで、パフォーマンスの最適化や開発効率の向上ができます。