Salesforce Lightning Experience移行への道のり ~第一章 LEX Configuration Converter使ってみた~

お初にお目にかかります。エス・エム・エスキャリアでエンジニアやってる星野です。
人材紹介を生業としている弊社では、10年前からキャリアパートナー(転職のサポートをする人)の営業支援・管理システムとしてSalesforceを利用しています。
弊社と同じくSalesforceを5年以上ご利用の方はよ~~~くご存じかと思いますが、Salesforceは約4年前にUIの大幅な変更「Lightning Experience(LEX)」をリリースしました。しかし、現時点では旧UI(classicと呼ばれてます)も引き続き使用可能で、おそらく古株ユーザーの多くはclassicのまま利用していることと思います。例にもれず弊社もそうでして・・・。とはいえそろそろLightningに移行したいなぁと考えており、世のエンジニアの皆様にもし弊社の移行過程が役に立つならと思ってブログに書いている次第です。
移行完了まで続けるつもりですが結構な長編になってしまう予感・・・。

ただ、Salesforceも「移行アシスタント」というツールを準備しており、どうすれば移行できるか、どのようなところに注意すべきか、というものを教えてくれるのでそれに従っていけば基本OKと思います。今回はその中で利用した「LEX Configuration Converter」について書きます。

LEX Configuration Converterとは

classicで実装した機能がLightningでは動かなくなってしまった・・・。これが移行計画において一番怖いことですよね。
特に、LEXでは「OnClick Javascript」を使用しているカスタムボタン・カスタムリンクが動作しなくなることが広く知られています。
ご安心ください。こちらのLEX Configuration Converterを使用すれば、作成したカスタムボタンのうち、どれを改修する必要があるのか教えてくれます。
しかも改修方法の指南までしてくれるという優しさ。ありがたい。
そのほかにもいろいろ変換してくれる機能があるので簡単にご紹介します。

LEX Configuration Converter 使ってみた

まずは下記にアクセス
https://lightning-configuration.salesforce.com/
ここで解析したいSalesforce組織にログインします。
本番とsandboxどちらでも解析可能です。
え、どっちでやればいいの?という方へのアドバイスですが、
LEX Configuration Converterのコンバート機能を使ってカスタムボタンを変換したい方はいったんsandboxでいろいろ試したほうが良いと思います。
が、本番環境でないと解析しても意味がない機能もあるのでそれは後ほどご紹介します。

なお、もっと詳しい使用方法が読みたい方は下記をご覧ください。
https://help.salesforce.com/articleView?id=lex_welcome_to_lex.htm&type=5

ログイン後ホーム画面の様子

赤く囲っているところがタブになっていて、選択すると各解析結果が表示できます。ホームタブを除くと5個あります。
・Javascript Buttons
組織内にあるJavascriptを使用したカスタムボタン・カスタムリンクとその変換手法等が一覧で表示されます。

・Actions and Buttons
組織内にあるオブジェクトのうち、カスタムボタン・カスタムリンクを設置しているページレイアウトが存在するオブジェクトが一覧で表示されます。「Move」機能を使うと、LEX用のページレイアウトでもそのボタンが使用できるように「Salesforce モバイルおよび Lightning Experience のアクション」部分に既存ボタンを配置してくれます。(ラクチン!)

・Visualforce Pages
直近で利用のあるVisualforceページをその閲覧数とともに一覧で表示してくれます。つまりこれは本番組織でないと正しく機能しません。実はこのページ使ってないじゃん!というのがわかってテスト時に無駄工数が発生しないという利点が。もちろん重点的にテストするべき場所もわかる。

・HardCord URLs
classicのドメインがハードコーディングされている部分が一覧で表示されます。
classicからLEXに切り替えると、ドメイン部分が「〇〇.lightning.force.com」に変更されます。
カスタムボタン等のURLにclassicのドメイン部分も記載してしまっているものは場合によって動作しないことが考えられます。それがチェックできます。

・AppExchange Packages
組織内にインストールされているパッケージ一覧が表示されます。
LEXに対応するバージョンを公開しているパッケージ等はupdateの必要があります。

と、盛りだくさんの内容ではありますが、
おそらく全員が利用するであろう「Javascript Buttons」タブに関して細かく書いておきます。

Javascript Buttonsタブ画面

コンプライアンス的に隠している部分は、Javascriptが記載されているボタン・リンクの表示名、API参照名、対象オブジェクト、使用しているページレイアウト名が記載されています。

重要なのは赤枠の「ConversionType」、ここの内容によって変換手法が異なります。そして、ものによっては変換自体を自動で行うことができます。

・Custom Button or Link 
これはそもそもJavascriptである必要がなかったものです。カスタムボタンまたはカスタムリンクを新規作成し、「内容のソース」を「URL」にして適切なリンク先に書き換えるという対応をします。変換機能付き。

・QuickAction
新規レコード作成ページへ遷移していたボタンです。classicの場合、新規作成画面に対してid値指定でパラメータセットしている方も多いと思いますが、Lightningの場合それができませんでした。代わりに新規アクションを作成して初期値をセットします。変換機能付きで、初期値セットの部分まできれいに作ってくれます。(すごい)
※spring20から、新規画面で初期値のセットが可能になりました!!やった!!
https://releasenotes.docs.salesforce.com/ja-jp/spring20/release-notes/rn_general_lex_navigate_to_record_dfv.htm

・Lightning Component (Full)
これはJavascriptのconfirm出して、OKなら画面遷移、というような処理が該当します。変換機能付きで、なんとLightning Componentに全変換してくれます。(超すごい)

・Lightning Component (Partial)
Fullと似ていますが、こちらはconfirm出す前にレコード検索とか別処理をしていたり、条件分岐などのロジックを含んでいる処理が該当します。
これは変換機能付きではあるものの、partialと銘打っているだけあり、肝心のロジック部分は自分で書いてねというスタイルです。

・Manual
これはもう自分で考えて頑張ってねというスタイルです。
弊社でいうとSalesforceのメール送信機能に初期値をセットする処理などがここに該当しました。Lightningだとメールに対して初期値セットできる機能がかなり限定的なのでここをどうしようか悩み中・・・。

弊社の場合、置き換えるボタン・リンク約500個(!)のうち約半数がManualという結果でした。うーん・・・頑張りましょう笑

変換方法

自動変換を利用するのは簡単です。一覧部分の一番右「▽」のボタンを押すと「Convert」「Convert&Deploy」というリンクが出ますので、それを押して数分待つだけです。

「Convert&Deploy」は変換後、元ボタンを使用していたページレイアウトに変換後のボタンを追加するところまでやってくれます。驚くほど手厚い。ちなみに自動生成したもののAPI参照名は「LCC_元のAPI参照名」となります。

ただ、現状以下の問題があるようです。
・「Custom Button or Link」「Lightning Component(Full)」のConvertを行うと、表示ラベル、説明の日本語が文字化けする(QuickActionは大丈夫でした)

文字化けは致命的なので、弊社では「Preview」リンクを押して変換後の構成を確認しつつ、作るのは手動でやるという対応をしました。

まとめ

弊社の場合ボタン数自体が相当多いので、対象を抽出してくれるだけでも大変ありがたい機能でした。そして移行までの道のりの険しさを再確認・・・。
Manualの部分に対応するにはいろいろと工夫しないといけません。現在弊社でも試行錯誤中なのでそのあたりのお話を次回はしたいと思います。

長い文章となってしまいましたが、お読みいただきありがとうございました!
ではまたの機会に。