進行状況の追跡を始めよう
Trailhead のホーム
Trailhead のホーム

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 コンポーネントをレコードページや [ホーム] ページなど各種のページに追加できることです。たとえば、地図コンポーネントを取引先レコードページに追加することが考えられます。あるいは、AppExchange アプリケーションを対象に、[ホーム] ページや商談レコードに追加できるコンポーネントを提供することもできます。

ただし、一定の安全策がなければ、コンポーネントが相互のデータにアクセスすること、ウィンドウ構造やイベント構造に共有アクセスすること、クライアント側 API にアクセスすることが可能になってしまいます。たとえば、HIPAA コンプライアンスや財務情報に関するパートナー製コンポーネントが、別のソースから提供されたコンポーネントと同じページにある場合、前者のコンポーネントに後者がアクセスするおそれがあります。こうしたコンポーネント間のアクセスによってセキュリティ上および規制上の問題が生じるであろうことは容易に想像できます。

インライン JavaScript の問題

Lightning コンポーネントのセキュリティ対策として 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 Locker: Lightning コンポーネントのセキュリティ強化

幸いにも Salesforce ではすでに、Lightning コンポーネントのセキュリティを強化し、JavaScript の奔放なアクセスを制限するソリューションを開発しています。このソリューションを Lightning Locker といい、さまざまなテクノロジや技法を駆使して次の問題を予防します。
  • XSS や同種のセキュリティ上の問題
  • 無制限の DOM アクセス
  • 不明な API/プライベート API へのコール
同時に、Lightning Locker の機能により次のことが可能になります。
  • クライアント側 API のバージョン管理
  • セキュリティレビューの迅速化 (AppExchange)
  • JavaScript の開発実務の向上
  • セキュリティ関連の機能およびポリシーの簡便な更新

これで、Lightning コンポーネントがより安全に構築されていることが理解できたのではないかと思います。では、どのようにすれば Lightning コンポーネントの使用による恩恵が得られるのでしょうか? そして、JavaScript ボタンの機能を Lightning Experience 内で作成し直すにはどうすればよいのでしょうか? これらの点については、この後説明していきます。その前に、Salesforce Classic で JavaScript ボタンをどのように使用している可能性があるか見ていきましょう。

JavaScript ボタンの使い道

当社では、お客様の組織に JavaScript ボタンが設定されており、中にはその数が何百個にも及ぶ場合があることを認識しています。また、パートナーとも JavaScript ボタンの用途について話し合ってきました。当社では、聞き知った用途を詳しくまとめています。以下は、JavaScript ボタンのごく一般的な用途です。
  • 保存のレコードの値の使用または操作
    • 項目の検証 (値が入力されていることや基準を満たしていることの確認)。
    • 他の項目の入力に基づく値の事前入力
    • 入力値に基づく Visualforce ページへのリダイレクト
    • 確認ポップアップ画面の表示
  • 値を事前入力したレコードの作成
  • Flow Builder に組み込まれたフローのトリガ
  • Salesforce または外部 API へのコールアウト
  • サードパーティとの統合
  • リストのレコードに対する一括アクションの実行
  • ユーザへのフィードバックポップアップ画面による方法や手順の指示

用途は他にもあり、中には組織に極めて固有な方法のため分類できないものもあります。この後、上記のすべての用途を対象に、JavaScript ボタンの機能を Salesforce モバイルアプリケーションや Lightning Experience に移行するために使用可能な機能について説明していきます。