【必読】なぜ今、Aura ではなく LWR を選ぶべきなのか?

【B2B不動産ポータル 制作日誌 Vol.5】マイページ構築の鉄則:ダークモード対応を見据えたデータテーブル自作とレスポンシブ実装

「LWRサイト × Agentforce」 不動産ポータル開発連載、ついに最終回(Vol.5)です。 ここまでに、物件検索、詳細閲覧、AI提案、そして予約までの一連のフローを構築してきました。

最後は、それらの活動履歴を一元管理する 「マイページ(担当者ダッシュボード)」 の構築です。 管理画面だからといって手を抜かず、PCでは一覧性の高いテーブル、スマホでは操作しやすいカード型UIに切り替わる、徹底したレスポンシブ実装を行いました。

DXforce Point for Developers

今回の記事で作成したコンポーネントの全ソースコードをGitHubで公開しています。 ぜひ Clone して、あなたの組織で動かしてみてください。

完成イメージ

マイページには、「週間スケジュール(カレンダー)」と「今後の内見予定リスト(テーブル)」の2つを配置しています。

  • PC
  • タブレット&スマホ

なぜ lightning-datatable を使わないのか?

Salesforce開発者なら、リスト表示には標準の lightning-datatable を使いたくなるでしょう。実際、列幅の定義やカスタム型(電話リンクなど)の実装は標準コンポーネントでも可能です。

しかし、今回あえて 「HTMLテーブル (<table>) によるフルスクラッチ」 を選んだ最大の理由は、「ダークモード(サイトテーマ色)への完全対応」 です。

テーマ変数(Styling Hooks)の壁

以前の記事(ダークモード切り替えLWCの作成)で紹介したコンポーネントを追加で配置すると、LWRのテーマ機能を使って配色の動的切り替えができます。

lightning-datatable は便利な反面、内部構造(Shadow DOM)がカプセル化されており、セルの背景色や境界線に対して、LWRのブランド変数(--dxp-g-root など)を自由に適用しきれないという課題がありました。

そこで、標準の SLDSクラス を使った素のテーブルを組み、CSS変数で色を制御する設計を採用しました。

agentScheduleDashboard.css

/* テーブル背景:サイトのルート色(ダークモード時は黒など)に追従 */
.slds-table {
    background-color: var(--dxp-g-root, #fff);
}

/* ヘッダー背景:ブランドのコントラスト色に追従 */
.slds-table thead th {
    background-color: var(--dxp-g-brand-contrast, #f3f3f3);
}

/* 行ホバー時も色を統一 */
.slds-table:not(.slds-no-row-hover) tbody tr:hover>td {
    background-color: var(--dxp-g-brand-contrast, #f3f3f3);
}

このように実装することで、サイトの設定で「ダークモード」に切り替えた瞬間、テーブルの背景も文字色も美しく反転します。「機能」よりも「サイト全体の世界観(デザインシステム)」を優先する、LWRサイトならではの判断です。

レスポンス実装:テーブルからカードへの変身

PCとスマホで全く異なるUIを表示するために、CSSメディアクエリとユーティリティクラスを活用しました。

agentScheduleDashboard.html

<template if:true={hasData}>
    <div class="desktop-only">
        <table class="slds-table slds-table_bordered ...">
        </table>
    </div>

    <div class="mobile-only">
        <template for:each={tableData} for:item="row">
            <div key={row.Id} class="slds-box slds-box_small slds-m-bottom_medium">
            </div>
        </template>
    </div>
</template>

agentScheduleDashboard.css

/* デフォルト(PC)ではモバイル用を非表示 */
.mobile-only {
    display: none;
}

/* モバイル用ブレークポイント (768px以下) */
@media (max-width: 768px) {
    .desktop-only {
        display: none; /* テーブルを消す */
    }
    
    .mobile-only {
        display: block; /* カードを出す */
    }
}

このシンプルな切り替えにより、PCでは情報の網羅性を、スマホでは視認性と操作性を両立させています。

カレンダーコンポーネントの再利用

ダッシュボード上部にある「週間スケジュール」は、Vol.3で作成した物件カレンダーのロジックを流用した agentScheduleCalendar です。

物件カレンダーが「空き枠(◎)」を表示するのに対し、こちらは「自分の予定(顧客名/物件名)」を表示します。 Apex側で取得するデータを変えるだけで、LWC側の 「Sticky Column(時間軸固定)」「週切り替えロジック」 はそのまま再利用できています。

agentScheduleCalendar.js

    // 自分の予定を取得するApexメソッドを呼び出し
    const result = await getAgentWeeklySchedule({ startDate: dateStr });

連載のまとめ:LWRで作る次世代ポータル

全5回にわたり、LWRサイトによる不動産ポータル開発を解説してきました。

  • Vol.1: 検索UIのグリッド設計
  • Vol.2: 自作スライダーによるリッチな詳細画面
  • Vol.3: リアルタイム予約システム
  • Vol.4: Agentforceの統合と回答解析
  • Vol.5: レスポンシブ対応ダッシュボード

Auraサイトに比べて標準機能が少ないLWRですが、その分、HTML/CSS/JSの標準技術を駆使すれば、ここまでモダンで高速なWebアプリケーションを構築できます。 そして何より、「Salesforceのデータをリアルタイムに扱う」 という強みは、他のWebフレームワークでは真似できない最大の利点です。

本連載が、皆さんのLWR開発のヒントになれば幸いです。

DXforceの管理人

福島 瑛二

2013年にJavaエンジニアとしてのキャリアをスタート。2019年にSalesforceと出会い、Salesforceエンジニアの道へ。

デザインや UI/UX の観点からもシステムを捉え、ユーザーにとって心地よい体験を実装することにやりがいを感じています。

CRM(顧客データ)や Data Cloud と連携した高度なサイトを目に見える形で表現できる Experience Cloud に大きな可能性を見出しており、バックエンドのデータ構造とフロントエンドの表現力を極めることがこれからの Salesforce エンジニアに求められるスキルだと確信しています。

Trailblazer: efukushima

福島 瑛二をフォローする

読者の声

タイトルとURLをコピーしました