1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LWCでSalesforceのレコード情報を取得する方法まとめ

Last updated at Posted at 2025-09-12

LWCでSalesforceのレコード情報を取得する方法まとめ

Lightning Web Components (LWC) では、Salesforceのレコード情報を取得する方法がいくつかあります。
今回は、「同じ Account レコードの Name を取得する」 というテーマで
①標準コンポーネント 
②Apex呼び出し(Imperative / @wire
③標準API
でのデータ取得の比較を行います。

1. 標準コンポーネント(lightning-record-form)

// js
import { LightningElement } from 'lwc';
import NAME_FIELD from '@salesforce/schema/Account.Name';

export default class AccountViewerForm extends LightningElement {
    recordId = '001XXXXXXXXXXXXXXX';
    fields = [NAME_FIELD];
}
<template>
    <lightning-card title="③ 標準コンポーネント">
        <lightning-record-form
            record-id={recordId}
            object-api-name="Account"
            fields={fields}
            mode="view">
        </lightning-record-form>
    </lightning-card>
</template>

2. 標準API(UI API:getRecord + getFieldValue)

Salesforce 標準の UI API を使ってデータを直接取得可能。
少ないコード量で実装でき、権限や共有ルールが自動で適用され安全。

getRecord / getFieldValue

import { getRecord, getFieldValue } from 'lightning/uiRecordApi';
import { wire } from 'lwc';
import NAME_FIELD from '@salesforce/schema/Account.Name';

@wire(getRecord, { recordId: '$recordId', fields: [NAME_FIELD] })
    recordId = '001XXXXXXXXXXXXXXX';

    @wire(getRecord, { recordId: '$recordId', fields: [NAME_FIELD] })
    account;

    get accountName() {
        return getFieldValue(this.account.data, NAME_FIELD);
    }
  • メリット: セキュリティ考慮が自動で効く / 単純なレコード表示に最適
  • デメリット: 複雑な検索や条件分岐はできない

3. Apexで呼び出し

最も柔軟な方法です。SOQLを使った複雑な検索や、サーバーサイドでのビジネスロジックを組み込みたい場合に利用します。

1-1 Imperative(命令型)呼び出し

import { LightningElement } from 'lwc';
import getAccount from '@salesforce/apex/AccountController.getAccount';

export default class AccountViewerApexImperative extends LightningElement {
    recordId = '001XXXXXXXXXXXXXXX';
    accountName;

    // Imperative 呼び出しは メソッドの中で呼ぶ必要がある
    connectedCallback() {
        this.loadAccount();
    }
    
    getAccount({ recordId: this.recordId })
        .then(result => {
            this.accountName = result.Name;
        })
        .catch(error => {
            console.error(error);
        });
    }
}
// html
<template>
    <lightning-card title="Apex(Imperative)">
        <p>Account Name: {accountName}</p>
    </lightning-card>
</template>
  • メリット: 任意タイミングで取得(ボタンクリック時などに便利)
  • デメリット: リアクティブ(自動更新)にはならない

@wire(リアクティブ呼び出し)

// apex
public with sharing class AccountController {
    @AuraEnabled(cacheable=true)
    public static Account getAccount(Id recordId) {
        return [SELECT Id, Name FROM Account WHERE Id = :recordId LIMIT 1];
    }
}
// js
import { LightningElement, wire } from 'lwc';
import getAccount from '@salesforce/apex/AccountController.getAccount';

export default class AccountViewerApexWire extends LightningElement {
    recordId = '001XXXXXXXXXXXXXXX';
    account;

    @wire(getAccount, { recordId: '$recordId' })
    wiredAccount({ error, data }) {
        if (data) {
            this.account = data;
        } else if (error) {
            console.error(error);
        }
    }

    get accountName() {
        return this.account ? this.account.Name : '';
    }
}
<template>
    <lightning-card title="Apex(@wire)">
        <p>Account Name: {accountName}</p>
    </lightning-card>
</template>
  • メリット: 引数が変わると自動で再取得される
  • デメリット: 引数を柔軟に扱いにくい

4. data.field.value と getFieldValue(record, field) の違い

4-1. data.fields.項目名.value

getRecord の結果オブジェクトから、直接フィールド値を参照する書き方。

this.contact.data.fields.Name.value
  • 特徴: 直接アクセスできるが、ネストが深くなりがち
  • デメリット: undefined チェックを自分で書く必要がある

4-2. getFieldValue(record, field)とは?

import { getFieldValue } from 'lightning/uiRecordApi';
import NAME_FIELD from '@salesforce/schema/Contact.Name';

get name() {
    return getFieldValue(this.contact.data, NAME_FIELD);
}

record: getRecord で取得したレコードオブジェクト
field: 項目のAPI名(文字列 or @salesforce/schema でimportしたもの)

特徴

  • ネストを意識せず、値をシンプルに取得できる
  • 最大5レベルの参照関係をサポート
  • 単純にアクセスするだけ → data.fields.Name.value
  • 安全で見やすく、参照関係も扱う → getFieldValue(record, field) を推奨

✅ まとめ:使い分けの目安

単純にレコード取得・表示 → LDS (getRecord, lightning-record-form)
検索や複雑な条件付き取得 → Apex (imperative / @wire)

方法 代表例 特徴 向いているケース
① 標準API getRecord + getFieldValue 宣言的・セキュリティ自動適用・推奨 基本的なレコード取得
② Apex(@wire / Imperative) @AuraEnabled メソッド SOQL可・柔軟・ビジネスロジックも実装可 複雑な検索や条件分岐が必要
③ 標準コンポーネント lightning-record-form UI込み・最小コード シンプルに表示/編集だけしたい

7.参考資料

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?