Lightning Web コンポーネントのプロパティに接続できるようにするには、開発者は Apex メソッドでどのアノテーションを使用する必要がありますか?
正解:A
The@AuraEnabled(cacheable=true)annotation makes an Apex method available to Lightning Web Components and allows it to be wired to a property while enabling client-side caching for improved performance. Reference:Apex Methods for Lightning Web Components Incorrect Options: B, C:@RemoteActionis not used for Lightning Web Components. D:@AuraEnabledwithoutcacheable=truecannot be wired.
最新のコメント (最新のコメントはトップにあります。)
正解は **A** です。
ドキュメントの「LWC の例」および「ワイヤリング」のセクションに基づき解説します。
### 領域の確認
* **領域:** **3. ユーザーインターフェース (User Interface)**
* **トピック:** Lightning Web Components (LWC)、Apex メソッドの呼び出し、ワイヤサービス (@wire)
-----
### 正解の解説
**A. @AuraEnabled(cacheable=true)**
LWC の JavaScript 側で **`@wire` デコレータ(ワイヤサービス)** を使用して、Apex メソッドの結果を直接コンポーネントの **プロパティ** に接続(バインド)する場合、Apex メソッド側には以下の2つの要件があります。
1. [cite\_start]**`@AuraEnabled`**: Lightning コンポーネントから呼び出し可能にするため [cite: 1596]。
2. [cite\_start]**`cacheable=true`**: データをクライアント側にキャッシュし、パフォーマンスを最適化するため。ワイヤサービスを使用する場合は**必須**です [cite: 1601, 1764-1768]。
**実装例:**
* **Apex:**
```apex
@AuraEnabled(cacheable=true)
public static List<Account> getAccounts() { ... }
```
* **LWC (JS):**
```javascript
import getAccounts from '@salesforce/apex/AccountController.getAccounts';
// プロパティに直接接続 (Wire)
@wire(getAccounts)
accounts;
```
-----
### 不正解の解説
**D. @AuraEnabled**
これは **不正解** です。
`cacheable=true` がない場合、そのメソッドは **「命令的 (Imperative) 呼び出し」**(ボタンクリック時などに `getAccounts().then(...)` と書く方法)でしか使用できません。
`@wire` を使ってプロパティに接続しようとすると、「キャッシュ不可能なメソッドはワイヤリングできません」というエラーが発生します。
**B. @RemoteAction (cacheable=true)**
**C. @RemoteAction**
これらは **不正解** です。
`@RemoteAction` は **Visualforce** ページで JavaScript Remoting を使用する際のアノテーションです。Lightning コンポーネント(LWC/Aura)では使用しません。
-----
### 💡 学習のポイント
**「LWC でデータを取得する」** と聞かれたら、以下の使い分けを思い出してください。
| 呼び出し方 | JSの書き方 | Apexの要件 | 特徴 |
| :--- | :--- | :--- | :--- |
| **ワイヤ (Wire)** | `@wire(method) pr...