Lightning の活用および JavaScript ボタンからの移行
学習の目的
この単元を完了すると、次のことができるようになります。
- JavaScript の使用におけるセキュリティ上の課題について説明する。
- JavaScript カスタムボタンの一般的な用途を挙げる。
JavaScript ボタンに見切りをつけるとき
当社では皆様が JavaScript ボタンを長年愛用し、Salesforce Classic でも使用してきたことを理解しています。実際、JavaScript ボタンがサポートされていない Lightning Experience には移行したくないと思っているかもしれません。しかし、Lightning Experience は、Salesforce Classic をはるかに凌ぐ機能を備えた未来形のインターフェースです。
当社では、既存の機能を最新の機能や UI に移行することを常に皆様から期待され、当てにされていることを認識していますが、JavaScript ボタンに関しては、むしろ JavaScript ボタンをサポートしない方が Lightning Experience の未来は明るいと考えています。このモジュールでは、その理由をご説明します。
JavaScript ボタンとリンクは、Salesforce Classic の UI のアクションの種類で、レコードやリストページに埋め込まれたボタンやリンクを使って起動可能なインライン JavaScript コードを作成できます。たとえば、別のロジックに基づいて項目の値を作成および更新するときに、新しいレコードにデータを入力することがあります。あるいは、Salesforce パートナーであれば、カスタムボタンを使用してプラットフォームと統合しているかもしれません。
JavaScript ボタンがこれほど実用的ならば、当社が Lightning Experience でサポートしないのはなぜでしょうか? その理由は、さまざまなソースや著者から提供される信頼されていない JavaScript をアプリケーションのソースコードと組み合わせ、信頼性も維持することに、セキュリティ上の重大な課題が存在するためです。
ここでは、セキュリティ上および機能上の課題について説明し、JavaScript ボタンの代替法で、モバイルや Lightning にも対応するソリューションをご紹介します。また、カスタムボタンを使用して構築した機能の移行に使用できる Salesforce の機能も見ていきます。
当社では、クライアント側のカスタマイズおよびインテグレーションの問題の解決に全力を尽くしています。Lightning Experience での JavaScript ボタンの機能に対する新しい考え方についてご説明します。
JavaScript ボタンのセキュリティ上の問題および用途
Lightning Experience の特に優れた利点の 1 つが、カスタム Lightning Web コンポーネントをレコードページや [ホーム] ページなど各種のページに追加できることです。たとえば、地図コンポーネントを取引先レコードページに追加することが考えられます。または、AppExchange アプリケーションを対象に、[ホーム] ページや商談レコードに追加できるコンポーネントを提供することもできます。
ただし、一定の安全策がなければ、コンポーネントが相互のデータにアクセスすること、ウィンドウ構造やイベント構造に共有アクセスすること、クライアント側 API にアクセスすることが可能になってしまいます。たとえば、HIPAA コンプライアンスや財務情報に関するパートナー製コンポーネントが、別のソースから提供されたコンポーネントと同じページにある場合、前者のコンポーネントに後者がアクセスするおそれがあります。こうしたコンポーネント間のアクセスによってセキュリティ上および規制上の問題が生じるであろうことは容易に想像できます。
インライン JavaScript の問題
Lightning Web コンポーネントのセキュリティ対策として Salesforce が実施している方法について説明する前に、インライン JavaScript に関するいくつかの問題に言及しておきましょう。JavaScript は、あまり強く型付けされていないプログラミング言語で、プラグインなしですべての最新 Web ブラウザーでサポートされています。Cookie やストレージ API を介してデータや状態を維持でき、ブラウザー経由でイベント、URL、Cookie にアクセスできます。JavaScript に有用性と危険性の両方をもたらしているのが、ドキュメントオブジェクトモデル (DOM) およびブラウザーオブジェクトモデル (BOM) にフルアクセスできることです。
プログラマーは、DOM にアクセスできるため、HTML や XML ドキュメントのコンテンツをほぼすべて追加、変更、削除することができます。JavaScript にはテキスト、日付、正規表現を処理する API があり、基本ユーザーインターフェースを拡張する JavaScript スニペットを使用してクライアント側の機能を簡単に追加できるため、上記のような作業を行う人々には便利です。ただし、これが重大な脆弱性にもなります。クロスサイトスクリプティング (XSS) により、悪意のある行為者が JavaScript 経由で DOM や BOM にアクセスし、大混乱を引き起こすおそれがあるためです。
Web サイトで動的コンテンツを使用できる場合、ハッカーが XSS を利用して、通常のユーザーが閲覧する Web ページに悪意のあるクライアント側コードを挿入する可能性があります。そしてハッカーがユーザーのセッションや Cookie を悪用して、データの抽出、キーストロークのログ、フォームへのエントリの操作、さらには API へのアクセスを行うスクリプトを実行することがあります。
Lightning Web セキュリティ: Lightning Web コンポーネントのセキュリティ強化
幸いにも Salesforce ではすでに、Lightning Web コンポーネントのセキュリティを強化し、JavaScript の奔放なアクセスを制限するソリューションを開発しています。このソリューションを Lightning Web セキュリティ (LWS) といい、さまざまなテクノロジーや技法を駆使して次の問題を予防します。
- XSS や同種のセキュリティ上の問題
- 無制限の DOM アクセス
- セキュリティ保護されていない API に対するコール
同時に、Lightning Web セキュリティ機能により次のことが可能になります。
- 他の名前空間からのコンポーネントのインポートと使用
- グローバルオブジェクトとのセキュアなインタラクション
- パフォーマンスの向上
- サードパーティ JavaScript ライブラリのサポートの向上
- 進化する標準 JavaScript との互換性
これで、Lightning Web コンポーネントがより安全に構築されていることが理解できたのではないかと思います。では、どのようにすれば Lightning コンポーネントの使用による恩恵が得られるのでしょうか? そして、JavaScript ボタンの機能を Lightning Experience 内で作成し直すにはどうすればよいのでしょうか? これらの点については、この後説明していきます。その前に、Salesforce Classic で JavaScript ボタンをどのように使用している可能性があるか見ていきましょう。
JavaScript ボタンの使い道
当社では、お客様の組織に JavaScript ボタンが設定されており、中にはその数が何百個にも及ぶ場合があることを認識しています。また、パートナーとも JavaScript ボタンの用途について話し合ってきました。当社では、聞き知った用途を詳しくまとめています。以下は、JavaScript ボタンのごく一般的な用途です。
- 保存前のレコードの値を使用または操作する。
- 項目の検証 (値が入力されていることや基準を満たしていることの確認)。
- 他の項目の入力に基づく値の事前入力
- 入力値に基づく Visualforce ページへのリダイレクト
- 確認ポップアップ画面の表示
- 値を事前入力したレコードを作成する。
- Flow Builder に組み込まれたフローをトリガーする。
- Salesforce または外部 API をコールアウトする。
- サードパーティと統合する。
- リストのレコードに対する一括アクションを実行する。
- ユーザーへのフィードバックポップアップ画面による方法や手順を指示する。
用途は他にもあり、中には組織に極めて固有な方法のため分類できないものもあります。この後、上記のすべての用途を対象に、JavaScript ボタンの機能を Salesforce モバイルアプリケーションや Lightning Experience に移行するために使用可能な機能について説明していきます。