Salesforce のデプロイ作業中に、「コンポーネント ID *** を持つ ***/config/mainAppPage.json のプロパティ isLockerServoceEnabled がないようです というエラーが表示された場合の対処方法です。
エラーの対象リソース
エラー画面では種別「Site.com」 と表示されますが、実際は ExperienceBundle のデプロイで発生します。
ExperienceBundle について
Salesforce のエクスペリエンスサイトをメタデータ デプロイする時の形式の一つです。
利用するには、「ExperienceBundle メタデータ API を有効化」設定をONにする必要があります。
従来の Site.com 形式のデプロイはバイナリ型だったため、リソースの内容が不明瞭でした。
一方、ExperienceBundle は json 形式でコンテンツが取得できるため、ソース管理しやすいです。
なお、Experienceサイトのテンプレート種別の一つである、LWRテンプレートは ExperienceBundle 形式のデプロイしか対応していません。
Package.xml では以下のように記載します。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<members>xxx</members>
<name>ExperienceBundle</name>
</types>
<version>56.0</version>
</Package>
ちなみに、サイトのデプロイ時には上記の ExperienceBundle 以外にも「Network」「Site」等のメタ情報が必要になります。
エラーの原因
mainAppPage.json という設定ファイルに、「isLockerService」要素がないためです。
Salesforceプロジェクトをソース管理している場合、mainAppPage.json ファイルのパスは以下になります。
force-app/main/default/experiences/{あなたのサイト名}/config/mainAppPage.json
私は Salesforce の Winter '23 のアップデート後(2022年11月)に直面しました。
公式開発者ガイドの情報によると、以下の記述があります。
Lightning Locker が有効化されるか (true)、無効化されるか (false) を示します。デフォルト値は true です。
Lightning Locker を無効にする前に、isRelaxedCSPLevel を true に設定する必要があります。API バージョン 55.0 以降で利用できます。
メタデータ API 開発者ガイド:ExperienceBundle
少し前のバージョンで開発したサイトに手を加え、デプロイする際はご注意ください。
例え何も追加設定/開発を行っていなくとも、デプロイ時にエラーになる可能性はあります。
解決策
開発した環境にて、再度 ExperienceBundle をリトリーブします。
変更差分が取得できればそれで解決です。
しかし、差分がない場合は、先述の mainAppPage.json ファイルに、手動で以下を追記します。
"isLockerServiceEnabled": true
LockerService は Lightning のセキュリティを高める仕組みのため、原則ONにしておく必要があります。
デフォルト値は true であるため、意図的に false にしたい場合以外は true でデプロイすることをお勧めします。
おわりに
Experience Cloud でエクスペリエンスサイトを実装する際は、デプロイに非常に苦労します。
Salesforce のデプロイ作業は、メジャーバージョンアップ毎に生じるのエラーとの戦いです。
エラーの日本語リソースが少ないため、このようなトラブルシューティングは積極的に発信していこうと思います。
本記事が少しでもお役に立ちますように。
コメント