はじめに
Salesforce の LWC デコレータ(@wire
)を勉強していると、
- Lightning Data Service(LDS)って何?
- wire アダプタって何?
という感じで ?
が多かったので、この記事では
@wire
と LDS(wire アダプタ)の関係性 を整理してみました。
🔗 LWC デコレータの基本については前回の記事を参照してください
[Salesforce] LWCデコレータ(@api / @track / @wire)とはなんぞや
@wire とは?(前回の復習)
@wire
は LWC のデコレータのひとつで、
「データを自動取得してコンポーネントにバインドする仕組み」
- データの取得源は
@wire
に渡す ソース(wire アダプタ or Apex メソッド) によって変わる。
つまり、
✅ @wire
は「データ取得の仕組み」 であって
✅ 「どこからデータを取るか」は別で決まる ということ。
LDS(Lightning Data Service)とは?
LDS(Lightning Data Service) は
Salesforce が提供する Apex不要の標準データサービス
- 標準オブジェクト・カスタムオブジェクトの CRUD を Apex なしで操作可能。
要するに…
「@wire は呼び出しの仕組み、LDS はその呼び先の一種」
wire アダプタとは?
LDS の機能を @wire
から呼び出せるようにするのが wire アダプタ です。
LDS を使った代表的な wire アダプタ
wire アダプタ | 説明 |
---|---|
getRecord |
単一レコードを取得 |
getRecords |
複数レコードを取得(複雑なのであまり一般的ではない) |
getObjectInfo |
オブジェクトのメタ情報を取得 |
getFieldValue |
レコードデータから単一フィールドを取得 |
getPicklistValues |
ピックリスト値を取得 |
getListUi |
リストビューに基づいて複数レコードを取得 |
LDS wire アダプタのメリット
-
Apex クラス不要で簡単
標準オブジェクト・カスタムオブジェクトの CRUD を Apex なしで扱える。 -
権限チェックが自動で適用される
FLS(項目レベルセキュリティ)、CRUD 権限、共有ルールを自分で気にする必要がない。 -
キャッシュが効くのでパフォーマンスが良い
LDS は内部でレコードデータをキャッシュするので、同じレコードを何度も取得する場合に効率が良い。 -
リアクティブに動作する
依存パラメータ(例:recordId
)が変われば自動で再取得される。 -
オフライン対応
モバイルや Lightning Experience でオフライン状態でも LDS がキャッシュを使って動作可能。
⚠️ LDS wire アダプタの制約
-
複雑な SOQL は書けない
サブクエリや集計、JOIN、WHERE 条件の複雑なロジックは不可。
→ 必要なら Apex で実装する。 -
取得できるデータが静的
fields
に渡す項目はコンポーネントコード内で固定される。
動的に項目を切り替えたい場合は Imperative Call や Apex が必要。 -
トランザクション制御はできない
複数のレコードをまとめて処理したり、複雑なバリデーションを挟むことはできない。 -
取得件数に限界がある
大量データを扱う場合は SOQL+Apex が必須。 -
細かいエラーハンドリングが難しい
成功/失敗の条件分岐はできるが、複雑なリトライロジックなどは Imperative Apex で対応するほうが柔軟。
@wire と LDS のまとめ
- ✅
@wire
= 「データ取得の仕組み(呼び方)」 - ✅ LDS = 「データを提供する仕組み(呼び先)」
- ✅ wire アダプタ =
@wire
で LDS を呼ぶための便利パーツ
つまり、@wire
は LDS を呼び出すための窓口のひとつ!
メリット | 制約 |
---|---|
Apex 不要で手軽 | 複雑な条件は書けない |
権限チェックが自動 | 動的クエリは不可 |
キャッシュで高速 | 大量データには不向き |
依存が変われば自動更新 | トランザクション制御は不可 |
オフラインでも動く | エラーハンドリングに制約 |
参考資料