Salesforce Experience Cloud アーキテクチャの極意:設計原則とベストプラクティス

背景とアプリケーションシナリオ

Salesforce Experience Cloud(旧 Community Cloud)は、顧客、パートナー、従業員などの外部ユーザー(そして場合によっては内部ユーザー)向けのデジタルエクスペリエンスを迅速に構築、管理、および拡張するための強力なプラットフォームです。Salesforce Architect(セールスフォースアーキテクト)として、このプラットフォームの能力を最大限に引き出し、ビジネス目標を達成するための堅牢でスケーラブルなソリューションを設計することは、私たちの重要な役割です。

Experience Cloudの主なアプリケーションシナリオは多岐にわたります。

  • 顧客サービスポータル: 顧客がサポート記事を検索し、ケースを提出し、その状況を追跡できるセルフサービスポータル。これにより、顧客満足度を向上させ、サポートコストを削減します。
  • パートナーポータル: パートナーがリードや商談を共同で管理し、販売資料にアクセスし、トレーニングを受けることができる共同作業スペース。これにより、パートナーエンゲージメントと販売効率が向上します。
  • セルフサービスコミュニティ: 顧客やユーザーがお互いに質問し、回答し、知識を共有できるフォーラム。ブランドの周りにコミュニティを形成し、エンゲージメントを高めます。
  • 従業員向けイントラネット: 従業員が企業のニュース、ドキュメント、アプリケーションにアクセスし、互いに協力できる内部ポータル。社内コミュニケーションとコラボレーションを促進します。
  • 公開Webサイト: Salesforceデータと統合された公開Webサイトで、イベント登録、製品情報表示などを行います。

これらのシナリオでは、Experience CloudはCRMデータを外部ユーザーに安全に公開し、パーソナライズされたデジタルジャーニーを提供するための基盤となります。アーキテクトは、ビジネス要件を技術的な実装に変換し、Salesforceの標準機能とカスタム開発のバランスを取りながら、最適なパフォーマンス、セキュリティ、および拡張性を確保する責任があります。


原理説明

Experience Cloudのアーキテクチャは、Salesforceプラットフォームのセキュリティモデルとデータモデルの上に構築されています。主な原理を理解することは、効果的な設計に不可欠です。

Experience Builderとテーマ

Experience Cloudサイトは、Experience Builder(エクスペリエンスビルダー)を使用して構築されます。これは、ドラッグアンドドロップインターフェースで、コードを書かずにページやコンポーネントを配置できるツールです。テーマはサイトのブランドと外観を定義し、CSSとブランド設定でカスタマイズできます。アーキテクトは、ブランドガイドラインとユーザーエクスペリエンス(UX)要件に沿ったテーマの選択またはカスタムテーマの開発を指導します。

コンポーネント

Experience Cloudのページは、Lightning Web Components(LWC)やAura Components(オーラコンポーネント)で構築されたコンポーネントで構成されます。これらは、標準コンポーネント、AppExchangeから取得したコンポーネント、またはカスタムコンポーネントに分類されます。アーキテクトは、ビジネス要件を満たすためにどのコンポーネントを使用するか、または新しいカスタムコンポーネントが必要かを決定します。カスタムコンポーネントを設計する際には、再利用性、パフォーマンス、セキュリティを考慮に入れる必要があります。

データセキュリティと共有

Experience Cloudの最も重要な側面の一つは、外部ユーザーに対するデータセキュリティと共有の管理です。Salesforce Architectは、以下のメカニズムを組み合わせて、適切なユーザーが適切なデータにアクセスできるように設計します。

  • 外部ユーザーライセンス: Experience Cloudには、Customer Community、Customer Community Plus、Partner Community、External Appsなどの様々なライセンスがあります。各ライセンスタイプは、Salesforceデータへのアクセスレベルと機能が異なります。適切なライセンスモデルを選択することは、コストと機能要件の両方に影響します。
  • プロファイルと権限セット: 外部ユーザーには、専用のプロファイル(例: Customer Community User)が割り当てられ、必要に応じて権限セット(Permission Set)を付与して追加のアクセス権を付与します。外部ユーザープロファイルは、内部ユーザープロファイルよりもデータアクセスが厳しく制限されています。
  • 共有設定(Sharing Settings): 組織の共有設定(Organization-Wide Defaults, OWD)は、Experience Cloudサイトの共有モデルの基礎となります。外部ユーザーは、通常、OWDで定義された「非公開(Private)」設定によって、デフォルトではデータにアクセスできません。
  • 共有セット(Sharing Sets): 共有セットは、Experience Cloudの外部ユーザーが、関連するレコードにアクセスできるようにするための強力なツールです。特定のプロファイルを持つユーザーに、関連するオブジェクトのレコードへのアクセス権を付与します。たとえば、ケースオブジェクトの「取引先」項目がユーザーの「取引先」に一致する場合にケースレコードを表示させることができます。
  • 共有ルール(Sharing Rules): 内部ユーザーと同様に、条件に基づいてレコードへのアクセスを許可する共有ルールを設定することも可能です。ただし、外部ユーザーに対しては共有セットの方がより一般的で推奨されるアプローチです。
  • スーパーユーザーアクセス(Super User Access): パートナーユーザーの場合、スーパーユーザーアクセスを有効にすることで、同じ取引先に関連付けられた他のパートナーユーザーのデータを表示、編集する権限を付与できます。

アーキテクトは、これらの共有メカニズムを組み合わせて、ビジネス要件に合致する最も効率的かつ安全なデータアクセスモデルを構築します。

パフォーマンスとスケーラビリティ

Experience Cloudサイトは、大量の同時ユーザーをサポートするように設計する必要があります。これには、ページの読み込み速度の最適化、Apexコードの効率化、データクエリの最小化、キャッシュ戦略の活用などが含まれます。Salesforce CDN(Content Delivery Network)の利用は、静的アセットの配信を高速化し、ユーザーエクスペリエンスを向上させるのに役立ちます。


サンプルコード

Salesforce Architectとして、直接コードを書くことは稀ですが、開発者に対して安全でスケーラブルなコードのベストプラクティスを指導します。Experience Cloudサイトでよくあるシナリオは、Apexコントローラを使用してSalesforceからデータを安全に取得し、Lightning Web Component(LWC)で表示することです。

ここでは、認証されたExperience Cloudユーザーがアクセスできるカスタムオブジェクト(例: `My_Custom_Object__c`)のリストを取得するApexコントローラと、それを表示するLWCの例を示します。データセキュリティのために `with sharing` キーワードを使用し、外部ユーザープロファイルに応じた共有設定が適用されることを保証します。

Apex Controller (MyCustomObjectController.cls)

このApexクラスは、`My_Custom_Object__c` レコードのリストを返します。`with sharing` キーワードは、現在のユーザーの共有設定と権限を適用し、Experience Cloudのデータセキュリティモデルを尊重します。

public with sharing class MyCustomObjectController {
    @AuraEnabled(cacheable=true)
    public static List<My_Custom_Object__c> getMyCustomObjects() {
        // 現在のユーザーがアクセス可能なMy_Custom_Object__cレコードをクエリします。
        // with sharing キーワードにより、現在のユーザーの共有設定(共有セット、共有ルールなど)が適用されます。
        // これにより、外部ユーザーは自分に関連付けられたレコードのみを参照できます。
        try {
            return [SELECT Id, Name, Custom_Field_1__c, Custom_Field_2__c FROM My_Custom_Object__c ORDER BY Name LIMIT 100];
        } catch (Exception e) {
            // エラーロギングなど、適切なエラー処理を実装します。
            System.debug('Error retrieving My_Custom_Objects: ' + e.getMessage());
            throw new AuraHandledException('Failed to retrieve custom objects: ' + e.getMessage());
        }
    }
}

Lightning Web Component (myCustomObjectList.js)

このLWCは、上記のApexコントローラを呼び出し、取得したカスタムオブジェクトのリストを表示します。`@wire` アノテーションを使用することで、プロビジョニングされたデータをキャッシュし、サーバー側の呼び出しを最適化できます。

import { LightningElement, wire } from 'lwc';
import getMyCustomObjects from '@salesforce/apex/MyCustomObjectController.getMyCustomObjects';

export default class MyCustomObjectList extends LightningElement {
    customObjects;
    error;

    // Apexメソッドを呼び出してデータを取得します。
    // cacheable=trueに設定されたApexメソッドは、@wireデコレータで使用できます。
    // これにより、データのキャッシュが容易になり、パフォーマンスが向上します。
    @wire(getMyCustomObjects)
    wiredCustomObjects({ error, data }) {
        if (data) {
            this.customObjects = data;
            this.error = undefined;
        } else if (error) {
            this.error = error;
            this.customObjects = undefined;
            // エラーメッセージをユーザーに表示するか、コンソールにログを出力します。
            console.error('Error fetching custom objects:', error);
        }
    }
}

Lightning Web Component (myCustomObjectList.html)

このHTMLテンプレートは、LWCで取得したデータを表示します。


Lightning Web Component (myCustomObjectList.js-meta.xml)

このメタデータファイルは、LWCがExperience Cloudサイトで使用可能であることを定義します。

<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>59.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightningCommunity__Page</target>
        <target>lightningCommunity__Default</target>
    </targets>
    <masterLabel>My Custom Object List</masterLabel>
    <description>Displays a list of custom objects for Experience Cloud.</description>
</LightningComponentBundle>

この例では、`<target>lightningCommunity__Page</target>` と `<target>lightningCommunity__Default</target>` を使用して、コンポーネントがExperience Builderで利用可能であることを示しています。


注意事項

Salesforce ArchitectとしてExperience Cloudソリューションを設計する際には、以下の点に特に注意を払う必要があります。

1. セキュリティ

  • データ可視性: 共有セット、共有ルール、プロファイル、権限セットを適切に設定し、外部ユーザーが必要なデータのみにアクセスできることを徹底します。オブジェクトと項目レベルのセキュリティ(Object-Level Security and Field-Level Security)も重要です。
  • OWD設定: Experience Cloudサイトでは、OWDの最も厳しい設定(例: Private)から始め、共有メカニズムを通じてアクセスを開放することを推奨します。
  • ゲストユーザーセキュリティ: ログインを必要としないゲストユーザーのデータアクセスは極めて制限的であるべきです。重要なデータは公開せず、必要最小限のアクセスのみを許可します。
  • XSS/CSRF対策: Lightning Web Componentsはこれらの脅威に対して組み込みの保護を提供しますが、カスタムコードでユーザー入力を処理する際には、常にサニタイズ(Sanitize)とエスケープ(Escape)を徹底します。

2. パフォーマンスとスケーラビリティ

  • キャッシュ戦略: `@wire` メソッド、静的リソース、Salesforce CDNを活用し、サーバーへのリクエスト数を減らし、ページの読み込み速度を向上させます。
  • 非同期処理: 大量のデータ処理や外部システムとの連携が必要な場合は、非同期Apex(キュー可能、バッチ、Futureメソッド)を利用して、UIスレッドをブロックしないようにします。
  • クエリ最適化: SOQLクエリは選択的(Selective)であり、フィルターとインデックスを効果的に使用するように設計します。ループ内でSOQLクエリを実行するなどのアンチパターンは避けます。
  • ガバナ制限: Salesforceのガバナ制限(Governor Limits)を常に意識し、特にApexトランザクションやAPI呼び出しが制限を超えないように設計します。

3. API制限

  • 外部ユーザーライセンスには、内部ユーザーとは異なるAPI呼び出し制限が適用される場合があります。統合設計時には、これらの制限を考慮し、API呼び出しを最小限に抑えるか、バッチ処理などの効率的な方法を検討します。

4. ユーザーエクスペリエンス(UX)

  • レスポンシブデザイン: Experience Cloudはモバイルデバイスでの利用が多いため、すべてのページとコンポーネントがレスポンシブ(Responsive)に設計されていることを確認します。
  • ブランド整合性: サイトのテーマとデザインは、企業のブランドガイドラインに完全に合致している必要があります。
  • アクセシビリティ: WCAG(Web Content Accessibility Guidelines)などのアクセシビリティ標準に準拠し、すべてのユーザーがサイトを利用できるように設計します。

5. 展開と変更管理

  • サンドボックス戦略: 開発、テスト、ステージングのための適切なサンドボックス環境を設定し、本番環境への展開前に徹底的なテストを行います。
  • CI/CD: Experience Cloudサイトのコンポーネント、テーマ、ページ構造なども含め、継続的インテグレーション/継続的デリバリー(CI/CD)パイプラインに組み込むことを検討します。
  • メタデータAPIの活用: Experience Cloudサイトの構成はメタデータとして扱われるため、Metadata API(メタデータAPI)やSFDX(Salesforce DX)CLIツールを使用して、変更を管理し、環境間で展開します。

まとめとベストプラクティス

Salesforce Experience Cloudは、企業が顧客、パートナー、従業員とのデジタルエンゲージメントを強化するための戦略的なプラットフォームです。Salesforce Architectとして、私たちはこのプラットフォームの可能性を最大限に引き出すために、以下のベストプラクティスを遵守すべきです。

  1. 戦略的プランニングを優先する: 実装を開始する前に、明確なビジネス目標、ターゲットオーディエンス、ユーザー要件を定義します。Experience Cloudが提供できる価値と、それが既存のビジネスプロセスにどのように統合されるかを理解します。
  2. セキュリティを最優先する: 外部ユーザーのデータアクセスは厳格に管理されるべきです。共有セット、プロファイル、権限セット、OWDを慎重に設計し、必要最小限のアクセス原則(Principle of Least Privilege)を適用します。
  3. 標準機能を最大限に活用する: カスタム開発に走る前に、Experience Cloudの標準コンポーネント、テンプレート、機能を検討します。標準機能は一般的にパフォーマンスが高く、メンテナンスが容易です。カスタム開発は、差別化された体験が本当に必要な場合にのみ行います。
  4. パフォーマンスとスケーラビリティを考慮した設計: 大量の同時ユーザーをサポートするために、Apexコードの最適化、効果的なキャッシュ戦略、非同期処理の活用、CDNの利用を計画します。ガバナ制限とAPI制限を常に意識します。
  5. モバイルファーストアプローチを採用する: 多くの外部ユーザーはモバイルデバイスからサイトにアクセスするため、レスポンシブデザインとモバイルエクスペリエンスを優先して設計します。
  6. 継続的な監視と最適化: サイトのパフォーマンス、ユーザーエンゲージメント、セキュリティログを定期的に監視し、必要に応じて調整と最適化を行います。Salesforceの組み込みツール(例: Analytics for Communities)や外部監視ツールを活用します。
  7. ユーザー採用とエンゲージメントに焦点を当てる: 優れた技術的基盤だけでなく、魅力的で使いやすいインターフェースを提供し、ユーザーが積極的にサイトを利用するように促すコンテンツと機能を提供します。

Salesforce Architectは、これらの原則に基づき、ビジネス価値を最大化し、長期的な成功を保証するExperience Cloudソリューションを設計する上で不可欠な役割を担っています。適切な計画、設計、および実装を通じて、企業は外部ユーザーとの関係を強化し、デジタル変革を推進することができます。

コメント