この記事は新社会人のSalesforce学習記録とその他 Advent Calendar 2025のだいたい25日目くらいの記事です。
調べていたらこんなものがあったので学習します。
Ligtningデータサービス(LDS)とは
Lightning Webコンポーネントの中で、APIを使用してSOQLも使わずにSalesforceのデータを使用できるものになります。
通常のLightningWebコンポーネントでは、Apexを一緒に使用してデータを操作します。しかし、LDSを使用することでApexがなくてもJavascript側のfunctionで直接APIを使用してデータを取得→表示、作成や更新ができるようになります。
例えばボタンを押す→レコードを作成するときなどに便利です。
Apexの必要性
jsでのレコード操作は基本的なもの(CRUDの操作)のみのようです。例えばボタンを押すと大量のデータを入れられるようなバッチ処理を行いたい場合等の状況ではApexを使用する必要があります。
Apexを使用した方が良い状況の一例を載せておきます。
トランザクション処理は不可能
大量のデータを入れようとしてガバナ制限に引っかかった場合、Apexでは入れようとしたデータは基本ロールバックされます。しかし、LDSでは基本的にロールバックされません。
Apexでは1回のトランザクションで行われるため、エラーが起きる→その回のトランザクション処理がロールバックとなります。しかしLDSではレコード単位のため1レコードずつ処理されているようです。これによりロールバックの処理はされずエラーが起きても起きる前のデータは正常に処理されたままになります。
複雑な操作ができない
LDSは簡単にデータを取ってくることができるサービスではありますが、SOQL分を使用していないため複雑な操作を行うことはできません。集計関数を使用して集計を行うなどといった操作は、Apexを使用して行うことになります。
メリット
Apexよりも
・パフォーマンス
・一貫性
・簡潔さ
が優れているそうです。
パフォーマンス
一度とってきたデータはキャッシュができます。これにより新しく同じデータを取ってくる必要がなくなります。
一貫性
項目レベルセキュリティや共有ルールが常に適用された状態になるようです。
簡潔さ
Apexクラスをわざわざ作って、SOQLを書く手間が省けます。
開発的な面で見ても効率がいいです。
実際に作ってみる
最小構成です。
単純にlwcコンポーネントとしてつけたオブジェクトのデータを取ってくるなら
import { LightningElement,api,wire } from 'lwc';
import { getRecord } from 'lightning/uiRecordApi';
import ACCName from '@salesforce/schema/Account.Name';
export default class Study1222 extends LightningElement {
@api recordId;
@wire(getRecord,{recordId:'$recordId',fields:[ACCName]})
account;
}
これと
<template>
<template if:true={account.data}>
<p>そのオブジェクトのデータを取ってこれる↓(今回は名前)</p>
<p>{account.data.fields.Name.value}</p>
</template>
</template>
結果⇩

jsの$recordIdをレコードIDに変更すると、任意のデータを取ってくることができるみたいです。
まとめ
jsで完結できるので便利。少ないレコードのみ取得する場合はとても良い機能だと感じました。