2022/04/8

SalesforceのAnnotationsとは?よく利用するAnnotations5選

 
  

SalesforceのAnnotationsとは?

SalesforceのAnnotationsとは、Apexのメソッドやクラスの動作を変更する機能です。SalesforceのAnnotationsはJavaのアノテーションと似ており、メソッドやクラスを宣言した行の前に、「@」から始まるキーワードを設定します。 Annotationsは、指定するだけで動作が変えられるため、コード量が減り、SalesforceのApex開発を効率化することが可能です。

よく利用するAnnotations5選

Salesforceでよく利用される5つのAnnotationsを、実装例とともに紹介します。

@AuraEnabled

@AuraEnabledはLightningコンポーネントからApexメソッドや、プロパティにアクセスできるようにするアノテーションです。主にクライアント側のLightningコンポーネントからサーバー側のApexメソッドを呼び出すときに利用します。 @AuraEnabledはstaticメソッドしか利用できません。また、APIバージョンが44.0以降から(cacheable=true)を指定することで、Apex メソッドから返されるデータをキャッシュできるようになりました。
@AuraEnabled(cacheable=true)
public static String getUserName(String userId) {
  // 処理を実装
}

@Future

@Futureは、メソッドの処理を非同期で処理できるようにするアノテーションです。 @futureを利用するメソッドは次の条件をすべて満たす必要があります。 ・staticメソッドであること ・メソッドは戻り値を返さないvoid型であること
global class MyFutureClass {
  @future
  static void testAsynchronous(String str) {
    // 非同期で実行する処理を実装
  }
}
また、デフォルトではコールアウトが実行しないため、コールアウトを実行する場合は、次のように(callout=true)を指定する必要があります。
@future (callout=true)
static void testCalloutFromFuture(String str) {
   // 非同期で実行する処理を実装
}

@IsTest

@IsTestは、テスト用のクラスやメソッドに付与するアノテーションです。@isTestで指定したクラスは、アクセス修飾子にprivateまたは、publicが宣言されている必要があります。なお、@isTestで指定したクラスは、Apexコードの組織内の上限である6MBには含まれません。 例)クラスのアクセス修飾子が「private」の場合
@isTest
private class MyPrivateTest {
  // テスト用メソッド
  @isTest static void test1() {
    // テスト用の処理を実装
  }
}
例)クラスのアクセス修飾子が「public」の場合
@isTest
public class TesPublictUtil {
  // テスト用メソッド
  public static void test1() {
    // テスト用の処理を実装
  }
}
@IsTestで使用できるオプションを紹介します。
アノテーション 概要
@IsTest(SeeAllData=true) テストクラスで組織のデータを使用する際に、指定する。Salesforce API バージョン 24.0以降から利用可能。
@IsTest(OnInstall=true) パッケージのインストール時にテストクラスを実行する際に、指定する。
@IsTest(isParallel=true) テストクラスを並列実行したい場合に指定する。同時テスト数のデフォルト上限には含まれない。@isTest(SeeAllData=true) と併用できないの注意。

@TestSetup

@testSetupは、テスト用メソッドを実行する前に実行したいメソッドに指定するアノテーションです。@isTestを宣言したクラス内でしか利用できません。主にテストクラス内のメソッドで共通して使用するデータを設定する目的で利用されます。
@isTest
private class MyPrivateTest {

  // テスト用情報を作成する
  @testSetup static void setup() {
    // テストで共通して使用するユーザー情報を設定します。
    List  testUsers = new List  ();
    for (Integer i = 0; i < 2; i++) {
      testUsers.add(new User(Name = 'TestUser' + i));
    }
    insert testUsers;
  }

  // テスト用メソッド
  @isTest static void test1() {
    // テスト用の処理を実装
    // ユーザー情報を取得する
    User user = [SELECT Id, Name, Mail FROM User WHERE Name = 'TestUser0' LIMIT 1];
    return user;
  }
}

@RemoteAction

@RemoteActionは、VisualforceページのJavaScriptから呼び出したいApexのメソッドに付与するアノテーションです。 @RemoteActionを利用するメソッドは次の条件をすべて満たす必要があります。 ・staticメソッドであること ・メソッドのアクセス修飾子がglobalまたは、publicであること 例)Apexのコード
global with sharing class UserRemoter {
  public String userId { get; set; }
  public static User user { get; set; }
  public UserRemoter() {} // コンストラクタは空で宣言
    @RemoteAction
    global static User getgetUser(String userId) {
      user = [SELECT Id, UserName, Mail FROM User WHERE Id = : userId];
      return user;
    }
}
例)Apexのメソッドを呼び出すVisualforce ページの処理
<apex:page controller=""UserRemoter"">
  <script type=""text/javascript"">
  function getRemoteUser() {
    var userId = document.getElementById('userId').value;

    Visualforce.remoting.Manager.invokeAction(
      '{!$RemoteAction.UserRemoter.getUser}',
      userId,
      function(result, event){
        if (event.status) {
          // アラートでユーザー名を表示する
          alert(""ユーザー名:"" + result.UserName);
        } else if (event.type === 'exception') {
          // Exceptionが発生した場合
          alert(event.message);
        } else {
          // Exception以外のエラーが発生した場合
          alert(event.message);
        }
      },
      {escape: true}
    );
  }
  </script>
  ~略~

Annotationsを使って、Salesforceのプログラムを開発してみよう!

今回は、よく利用されるSalesforceのApex Annotationsを実装例とともに紹介しました。Annotationsを利用することで、Apexのクラスやメソッドの動作を簡単に変更できます。 また、今回紹介したAnnotationsは、Apexで利用できるAnnotationsのごく一部です。興味はある方は、ぜひSalesforceのApex開発ガイドをご参照ください。]]>

ITエンジニアへのキャリアチェンジならキャリアチェンジアカデミー

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニア
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞

おすすめの動画

  • 【未経験からIT業界へ転職するなら】相談窓口とスキルの獲得はここで解決!IT転職が一気に有利に!【キャリアチェンジアカデミー】

  • 【費用一切不要】未経験からIT業界へ転職するならまずはここへ相談!【キャリアチェンジアカデミー】

  • 【何のエンジニアになれるのか?】未経験からITエンジニアを目指すとこんな道がある【キャリアチェンジアカデミー】