Lightning Web コンポーネントと Visualforce の新機能の学習

学習の目的

この単元を完了すると、次のことができるようになります。

  • Lightning Web コンポーネントのリアクティブな項目について学習する。
  • Lightning Message Service を使用して、DOM 全体で通信する。
  • Lightning Web コンポーネントのユーザの権限を確認する。
  • Visualforce URL からインスタンス名を削除する準備をする。

Lightning Web コンポーネントで不要になった @track デコレータ

新機能

これまで、Lightning Web コンポーネントのどの項目を @track でデコレートするかを開発者が識別することが困難でした。項目の値が変更されたときに、コンポーネントがいつ再表示されて新しい値を表示するかを開発者が容易に予測できませんでした。

Spring ’20 以降、項目をリアクティブにするために @track を使用するかどうかについて推測する必要がなくなりました。Lightning Web コンポーネントクラスのすべての項目がリアクティブです。項目の値が変更され、その項目がテンプレートで使用されているか、テンプレートで使用されているプロパティの getter で使用されている場合は、コンポーネントが再表示されて新しい値を表示します。

そのしくみ

Lightning Web コンポーネントクラスのすべての項目がリアクティブのため、このフレームワークが項目の値の変更を監視し、コンポーネントを再表示して、新しい値を表示します。コンポーネント内のすべての式も再評価されます。 

Spring '20 より前は、項目をリアクティブにするために、項目を @track でデコレートする必要がありました。古いコードサンプルでこの方法が使用されているような場合は、引き続きサポートされます。

さらに、@track の使用事例がもう 1 つあります。項目にオブジェクトまたは配列がある場合、追跡される変更の深度に制限があります。オブジェクトのプロパティまたは配列の要素の変更を監視するようフレームワークに指示する場合に、項目を @track でデコレートします。

@track を使用しない場合は、フレームワークが項目に新しい値を割り当てる変更を監視します。新しい値と以前の値が === ではない場合に、コンポーネントが再表示されます。

詳細とサンプルコードについては、『Salesforce Spring '20 リリースノート』の「Lightning Web コンポーネントで不要になった @track デコレータ」を参照してください。

Lightning Message Service を使用した Salesforce UI テクノロジ間の通信

新機能

Lightning Message Service を使用して、DOM 全体の Visualforce ページ、Aura コンポーネント、Lightning Web コンポーネント (ユーティリティバーのコンポーネントを含む) の間で通信を行います。このサービスを使用すると、1 つの Lightning ページ内または複数のページにまたがるコンポーネント間の通信が可能になります。Salesforce Classic から Lightning Experience に切り替える場合に、既存の Visualforce ページや Aura コンポーネントと通信できる Lightning Web コンポーネントを作成できるようになりました。Lightning Message Service を使用して、Open CTI 経由でソフトフォンと通信することもできます。

そのしくみ

コンポーネントやページは、Lightning メッセージチャネルを介して通信します。たとえば、Visualforce ページは Lightning Web コンポーネントを公開するものと同じメッセージチャネルに登録できます。

Lightning Message Service のベータ版を使用していた場合、GA リリースで scope パラメータが変更されています。scope パラメータは、登録しているコンポーネントがアプリケーション内でメッセージを受信する場所を定義します。

ベータリリースでは、subscribe() メソッドに、アプリケーション全体の 1 つのデフォルト値を指定した scope パラメータが含まれていました。Summer ‘20 の GA で、Lightning Message Service の範囲を [有効な領域に限定する] (デフォルト) か、[アプリケーション全体にする] かを選択できるようになりました。

有効な登録範囲領域とアプリケーションの登録範囲領域を示す図

有効な範囲を指定する場合は、デフォルトの動作のため、scope パラメータを含める必要はありません。アプリケーション全体の範囲を指定する場合は、引き続き lightning/messageService からインポートされた APPLICATION_SCOPE の値を指定した scope パラメータ (省略可能) を使用します。

有効な範囲を使用する場合、メッセージチャネルは、有効なナビゲーションタブ、有効なナビゲーション項目、またはユーティリティ項目のコンポーネント間の通信に制限されます。ユーティリティ項目は常に有効です。ナビゲーションタブまたはナビゲーション項目は、選択されると有効になります。ナビゲーションタブとナビゲーション項目には次のものが該当します。

  • 標準ナビゲーションタブ
  • コンソールナビゲーションワークスペースタブ
  • コンソールナビゲーションサブタブ
  • コンソールナビゲーション項目

詳細とサンプルコードは、「コンポーネントの参照」の「lightning/messageService」を参照してください。

Lightning Web コンポーネントのユーザ権限の確認

新機能

権限は、Salesforce 組織のアクセスや動作を管理する標準的な手段です。Lightning Web コンポーネントを開発するときに、現在のユーザが特定の権限を有しているかどうかに基づいて、コンポーネントの動作をカスタマイズできます。 

そのしくみ

ユーザに権限があるかどうかを確認するには、範囲設定されたモジュールである @salesforce/userPermission@salesforce/customPermission から Salesforce 権限をインポートして、true と undefined のどちらであるかを確認します。ユーザにこの権限がある場合は、コンポーネントが特定のアクションを実行できます。

カスタム権限に名前空間が含まれていることがあります。組織では、独自のカスタマイズとパッケージの一意の識別子として名前空間を使用します。管理パッケージからカスタム権限がインストールされている場合は、権限名の前に名前空間名と __ を追加します。

標準権限の例:

import hasPermission from '@salesforce/userPermission/StandardPermissionName';

カスタム権限の例: 

import hasPermission from '@salesforce/customPermission/CustomPermissionName';
import hasPermission from '@salesforce/customPermission/namespace__CustomPermissionName';

静的参照の名前は自由に決めることができます。上記の例では、hasPermission という形式を使用して、参照にブール値があることを示しています。

Visualforce URL の短縮

新機能

Salesforce ではリリース更新に伴って、Visualforce や他の URL からインスタンス名を削除しています。インスタンス名は、Salesforce 組織がホストされている場所 (na44 など) を示します。URL からインスタンス名が削除されればドメインが短くなり、ユーザが覚えやすくなります。

 そのしくみ

この更新は、[私のドメイン] がリリースされている組織に適用されます。たとえば、mydomain--c.na44.visual.force.commydomain--c.visualforce.com になり、URL にインスタンスの na44 が表示されなくなります。URL からインスタンス名が削除されると、ホスト名も変化します。この更新を有効にすると、インスタンス名を含む URL (ブックマークなど) が自動的に新しいホスト名にリダイレクトされます。

ホスト名の変更例として、次のようなものがあります。

  • MyDomainName--PackageName.InstanceName.visual.force.comMyDomainName--PackageName.visualforce.com になる。
  • MyDomainName--c.InstanceName.content.force.comMyDomainName--c.documentforce.com になる。
  • MyDomainName--sitestudio.InstanceName.force.comMyDomainName.builder.salesforce-communities.com になる。

 この更新の今後の予定

この更新は Spring '18 で最初に使用可能になり、Sandbox 組織ではその作成時または更新時に自動的に有効になります。Salesforce ではこの更新を Summer '21 ですべての組織に適用する予定でしたが、Summer '22 に延期されました。インスタンスのメジャーリリースのアップグレード日を確認するには、Trust 状況に移動してインスタンスを検索し、[メンテナンス] タブをクリックします。

ホスト名の変更と、この更新の予定を立ててテストする方法についての詳細は、「Visualforce、エクスペリエンスビルダー、Site.com Studio、コンテンツファイルの URL の一貫性の確保 (以前にリリース済みの更新)」を参照してください。

リソース