この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

AuraEnabled アノテーション

AuraEnabled アノテーションにより、Lightning コンポーネントから Apex メソッドおよびプロパティへのアクセスが可能になります。
AuraEnabled アノテーションはオーバーロードされ、2 つの別々の異なる目的で使用されます。
  • Apex クラスの静的メソッドに対して @AuraEnabled を使用すると、その静的メソッドをリモートコントローラアクションとして Lightning コンポーネントで使用できます。
  • Apex インスタンスのメソッドおよびプロパティに対して @AuraEnabled を使用すると、クラスのインスタンスがサーバ側アクションからデータとして返されたときにそれらのメソッドおよびプロパティを逐次化できます。
  • @AuraEnabled のこの異なる使用法を同じ Apex クラス内で組み合わせないでください。
  • 静的 @AuraEnabled Apex メソッドのみをクライアント側コードからコールできます。Visualforce スタイルのインスタンスのプロパティと getter/setter メソッドは使用できません。代わりに、クライアント側コンポーネントの属性を使用します。

重要

コンポーネントのセキュリティ境界およびカプセル化

Apex では、@AuraEnabled のアノテーションが付加されたすべてのメソッドを Web サービスインターフェースとして取り扱う必要があります。つまり、開発者は、開発者のクライアント側コードでメソッドを呼び出していなくても、またはサニタイズしたパラメータのみを使用してメソッドを呼び出していても、攻撃者が任意のパラメータを使用してこのメソッドをコールできることを前提とする必要があります。このため、@AuraEnabled メソッドのパラメータには次の要件があります。

  • サニタイズされていない SOQL クエリに配置してはならない
  • このパラメータを信頼して、ユーザがアクセスできる項目とオブジェクトを指定してはならない

@AuraEnabled メソッドで sObject を変更する場合は、クライアントがこのメソッドを呼び出したときに、フル CRUD/FLS だけでなく共有チェックを実行して、クライアントが権限を昇格していないことを確認する必要があります。このチェックはサーバ (Apex 内) で実行する必要があります。これは Visualforce の状況とは異なります。Visualforce では、CRUD/FLS チェックを Visualforce プレゼンテーションレイヤで自動的に実行できます。つまり、Visualforce から Lightning にコードをポーティングするには、sObject へのアクセスのたびに CRUD/FLS チェックの追加が必要になります。

Lightning コンポーネントは再利用可能であり共有可能であることを目的とします。そのため、各グローバル属性または公開属性は、コンポーネントの内部ロジックの観点から、信頼されないものとして参照する必要があります。つまり、属性のコンテンツを取得して、innerHTML または $().html() を介して DOM に直接表示しないでください。アプリケーション内で、属性が、制御されている別のコンポーネントにより提供されているかどうかは関係ありません。未加工の HTML 書き込みを実行するか、href 属性を設定する必要がある場合、属性を JavaScript コードでサニタイズ済みとしてマークする必要があります。

AuraEnabled コンポーネントでセッションがどのように認証されるかの仕組みを理解することが重要です。コミュニティユーザのセッションが期限切れになった場合、表示されているページにカスタム Apex メソッド (AuraEnabled) を呼び出せる Lightning コンポーネントがあれば、コミュニティサイトのゲストユーザとしてそれらのメソッドが呼び出されます。実装において、サイトのゲストユーザへのアクセスを許可する/無効にするか、またはセッションのタイムアウトを監視してログイン要求を必要に応じて呼び出すかを決めてください。

メソッドの結果のキャッシュ

実行時のパフォーマンスを改善するには、@AuraEnabled(cacheable=true) を設定してクライアントにメソッドの結果���キャッシュします。cacheable=true を設定するには、メソッドがデータの取得のみを行う必要があります。メソッドでデータを変更することはできません。

メソッドを保存可能 (キャッシュ可能) としてマークすると、サーバとの往復を待たずにクライアント側ストレージのキャッシュデータをすばやく表示できるようになり、コンポーネントのパフォーマンスが向上します。キャッシュデータが古くなっている場合、フレームワークによってサーバから最新データが取得されます。特に、待ち時間の長い接続、低速の接続、信頼性の低い接続 (3G ネットワークなど) のユーザの場合には、キャッシュが役立ちます。

API バージョン 44.0 以上のコンポーネントの Apex メソッドから返されるデータをキャッシュするには、Apex メソッドに @AuraEnabled(cacheable=true) アノテーションを付加する必要があります。次に例を示します。

1@AuraEnabled(cacheable=true)
2public static Account getAccount(Id accountId) {
3    // your code here
4}

API バージョン 44.0 より前では、Apex メソッドから返されるデータをキャッシュするには、Apex メソッドをコールするアクションごとに JavaScript コードで setStorable() をコールする必要がありました。API バージョン 44.0 以上では、Apex メソッドを保存可能 (キャッシュ可能) としてマークする必要があり、JavaScript コードの setStorable() をコールする必要がなくなりました。Apex クラスのメソッドのキャッシュ表記が一元化されるため、Apex アノテーション手法の方が優れています。

継続の使用

Apex で Continuation クラスを使用して、外部 Web サービスへの長時間要求を行います。

継続では @AuraEnabled アノテーションを使用します。使い方のルールは次の通りです。

@AuraEnabled(continuation=true)
継続を返す Apex コントローラメソッドには、@AuraEnabled(continuation=true) アノテーションを付加する必要があります。
@AuraEnabled(continuation=true cacheable=true)
継続アクションの結果をキャッシュするには、Apex コールバックメソッドのアノテーションで cacheable=true と設定します。

continuation=true cacheable=true の間は、コンマではなくスペースで区切ってください。

メモ