Lightning Flow Scannerで何が確認できるのか
こんにちは、co-meetingにてエンジニアしているハナミズキです。
今回のネタはLightning Flow Scannerです。
Lightning Flow Scannerは、Salesforceのフローを解析し、問題のある箇所をお知らせするツールです。
このツールについてはSalesforce Developerのyoutubeチャンネル codeLive 「codeLive: How to Optimize Flows Using Lightning Flow Scanner」で紹介されています。また、去年のQiitaのアドベントカレンダーでは「未使用変数を見逃すな!lightning-flow-scannerでフローのレビューを効率化」という記事で紹介されており、こちらも参考になりました。
私自身は今まで使ったことがなかったため、今回改めて何が確認できるのか調べ、その結果を紹介します。
1.Lightning Flow Scannerの概要
Lightning Flow Scannerは、Salesforceのフローを解析して問題のある箇所をお知らせしてくれるツールです。
Lightning Flow Scannerの開発には、Salesforce内部のスタッフと外部の専門家が共同で開発しているようです。
Lightning Flow Scannerは、フローにおける以下のような一般的な問題を特定して対処するのに活用できるツールです。
パフォーマンスに問題のある箇所は存在しないか
脆弱性が存在していないか
正常な動きだけではなく異常が発生した時も考慮して作られているか
未使用変数が残ったままになっていないか
現在のLightning Flow Scannerは、Salesforce CLI プラグインもしくは、VSCode 拡張プラグインの形式で一般提供されています。
2.検知してくれる問題一覧
現時点では以下15種類の問題を検出してくれます。
※()内は私なりに解釈しました。
Auto Layout(自動レイアウトではない)
Copy API Name(コピーされたAPI参照名が存在する)
DML Statement In A Loop(ループの中でDML操作している)
Duplicate DML Operation(画面フロー間でDML操作が重複してしまう)
Flow Naming Convention(フローの名前が命名規則から外れている)
Hardcoded Id(ハードコートされたIDが存在する)
Inactive Flow(フローが有効化されていない)
Missing Flow Description(フローに説明が書いてない)
Missing Fault Path(失敗時のパスが存在しない)
Missing Null Handler(Nullチェックが必要ケースでチェックしていない)
Outdated API Version(指定APIバージョンより古いバージョンである)
Process Builder(フローに移行していないプロセスビルダーが存在する)
※現在プロセスビルダーを作成できないようになったため再現させることができませんでした。SOQL Query In A Loop(ループの中でレコード取得してる)
Unconnected Element(接続されていない要素が存在する)
Unused Variable(未使用の変数が存在する)
これら15種類の問題については、以下のページに詳細な説明が記載されているため気になる方は参考にしてみてください。
■lightning-flow-scanner-core | A rule engine capable of conducting static analysis on the metadata associated with Salesforce Lightning Flows, Process Builders, and Workflows.
https://lightning-flow-scanner.github.io/lightning-flow-scanner-core/
また、デモ用として、サンプルのフローも用意されているので、気になる方は参考にしてみてください。
■Lightning Flow Scanner Demo Repository - https://github.com/Lightning-Flow-Scanner/lightning-flow-scanner-example-flows
3.インストール方法
事前準備
Salesforce CLIのインストール: Salesforce CLIをインストールし、最新バージョンに更新します。
VSCodeのインストール: VSCodeをインストールし、Salesforce Extension Packを追加します。(関連: VS Code 向け Salesforce 拡張機能のインストール)
Salesforce CLI プラグインの場合
sfdxコマンドを使ってインストールする場合
sfdx plugins:install lightning-flow-scanner
npmコマンドを使ってインストールする場合
npm install -g lightning-flow-scanner
VSCode 拡張プラグインの場合
VSCodeの拡張機能: マーケットプレースにて、「Lightning Flow Scanner」を検索すると対象の「Install」をクリックしてインストールしてください。
インストール成功すると左側のアクティビティバーにロボットアイコンが表示されます。
4.スキャンの流れ
解析したいフローを用意
Salesforce組織で事前にフローを作成し、解析したいフローを手元にダウンロードする必要があります。
方法は色々とありますが、以下のようなやり方があります。
Org Browserを使って「Flows」を選択し、「組織からソースを取得」アイコンをクリックしてダウンロードする。
sfdxコマンド「sf project retrieve start --metadata Flow:<フローのAPI参照名> -o <組織のエイリアス名>」を実行してダウンロードする。
コマンド例:
sf project retrieve start --metadata Flow:FlowTrigger_Account_Update -o playground_scratch
5.スキャンのやり方と実行結果
SFDXコマンド(CLI)を使ったLightning Flow Scannerの実行方法
事前に検知するルールを記載した設定ファイルを作成します。
設定ファイルには、実行するルールのリストを指定することができます。また、カスタムルールの追加や、特定のルールに違反した場合の重大度の定義、一部のルールに関連する属性の設定も可能です。
今回は以下のようなファイルを生成します。
// flow-scanner.json
{
"rules": {
"AutoLayout": {
"severity": "warning"
},
"APIVersion": {
"severity": "warning",
"expression": ">50"
},
"CopyAPIName": {
"severity": "warning"
},
"DMLStatementInLoop": {
"severity": "warning"
},
"DuplicateDMLOperation": {
"severity": "warning"
},
"FlowName": {
"severity": "warning",
"expression": "[A-Za-z0-9]+_[A-Za-z0-9]+"
},
"HardcodedId": {
"severity": "warning"
},
"InactiveFlow": {
"severity": "warning"
},
"FlowDescription": {
"severity": "note"
},
"MissingFaultPath": {
"severity": "warning"
},
"MissingNullHandler": {
"severity": "warning"
},
"ProcessBuilder": {
"severity": "warning"
},
"SOQLQueryInLoop": {
"severity": "warning"
},
"UnconnectedElement": {
"severity": "warning"
},
"UnusedVariable": {
"severity": "error"
}
}
}
ルールファイルの書き方は以下を参考にしてください。
https://lightning-flow-scanner.github.io/lightning-flow-scanner-core/
Custom Rule Creation Guideなどカスタムルールを作成・追加する方法も公開されているため、柔軟なルール設定ができそうです。
コマンドを実行してスキャンします。
特定のフローのみをチェックしたい場合は、以下のような引数でコマンドを実行してください。
sfdx flow:scan -u <組織のエイリアス名> -p <フローのパス> -c <設定ファイルのパス>
特定のフォルダ内に含まれる全てのフローをチェックしたい場合は、以下のような引数でコマンドを実行してください。
sfdx flow:scan -u <組織のエイリアス名> -d <フローのフォルダパス> -c <設定ファイルのパス>
今回は以下コマンドを実行します。
コマンド例:
sfdx flow:scan -u playground_scratch -d force-app/main/default/flows/ -c ./config/flow-scanner.json
スキャン結果は以下のとおりです。
Retrieving Metadata...... Retrieve Completed ✔.
Identified 3 flows to scan... Scan complete
=== Flow: 取 (4 results)
Type: AutoLaunchedFlow
RULE TYPE NAME SEVERITY
──────────────────────── ───────────── ────────────── ────────
Outdated API Version apiVersion 49 warning
Missing Flow Description description undefined note
Missing Fault Path recordLookups get_Account warning
Missing Fault Path recordUpdates update_Account warning
=== Flow: 従 (1 results)
Type: AutoLaunchedFlow
RULE TYPE NAME SEVERITY
───────────── ────── ──── ────────
Inactive Flow status warning
=== Flow: 不 (17 results)
Type: Flow
RULE TYPE NAME SEVERITY
──────────────────────── ───────────── ──────────────────── ────────
Auto-Layout Mode CanvasMode FREE_FORM_CANVAS warning
Duplicate DML Operation screens X2 warning
Flow Naming Convention name IncompleteScreenFlow warning
Hardcoded Id recordLookups getAccountTest warning
Inactive Flow status warning
Missing Flow Description description undefined note
Missing Fault Path recordLookups get_Account warning
Missing Fault Path recordCreates create_CusObj warning
Missing Fault Path recordLookups get_CusObj warning
Missing Fault Path recordCreates X1 warning
Missing Fault Path recordLookups getAccountTest warning
Missing Null Handler recordLookups get_Account warning
Missing Null Handler recordLookups get_CusObj warning
Missing Null Handler recordLookups getAccountTest warning
Unconnected Element screens screen_notConnect warning
Unused Variable variables var_cusObjIds error
Unused Variable variables var_tmpCusObjId error
=== Total: 22 Results in 3 Flows.
- error: 2
- warning: 18
- note: 2
Be a part of our mission to champion Best Practices by starring us on GitHub:
https://github.com/Lightning-Flow-Scanner
フォルダを指定して実行したスキャンした結果ですが、日本語名で「取引先を取得して保存」「従業員数が100人を超えた場合はメモを追加するフロー」「不完全な画面フロー」という3件のフローに対してスキャンされました。それぞれ実行したフロー名が「取」「従」「不」と省略され、どのフローに問題が発生しているのか少し分かりづらいですが、問題があることが確認できます。
VSCodeを使ったLightning Flow Scannerの実行方法
左側のアクティビティバーから「Lightning Flow Scanner」を選択します。
■Configure Rules(ルール設定)
Lightning Flow Scannerのボタンメニューから「Configure Rules」を選択すると 、どのルールを適用するか選べるようになりますので事前に選びます。
■Scan Flows(スキャン)
Lightning Flow Scannerのボタンメニューから「Scan Flows」を選択すると 、スキャンする対象のフローが格納されているフォルダを選択するダイアログが出てきます。個別でスキャンはできません。任意のフォルダを選んでください。
スキャンが完了すると解析結果が表示され、それぞれのフローにおいていくつ問題が検出されたか確認できます。
Detailsボタンをクリックすると以下のようにどこに問題が発生しているのか明確になります。
結果は、全て英語で返ってきます。しかし、ドキュメントと比較しながら確認すれば、何が問題かを判別することができます。例えば、この結果からは、未使用変数が存在すること/失敗時のパスを指定し忘れていたこと/IDをハードコーディングしてしまっていたことなどの問題が確認できます。
フローの見直しに役立てることができそうですね。
■Cale Coverrage %(テスト網羅率の追記)
この機能は 事前にApexテストクラスの用意とScan Flows実行が必要です。Lightning Flow Scannerのボタンメニューから「Cale Coverrage %」を選択すると 、Apexテストを実行して検証結果(テスト網羅率)をスキャンリストへ追記してくれます。
■Fix Flows(問題の修正)
Lightning Flow Scannerのボタンメニューから「Fix Flows」を選択すると、フローを解析し、見つけた問題を自動で修正してくれます。
ただし、現時点では、UnconnectedElement(接続されていない要素)やUnusedVariable(未使用変数)のような簡単な問題のみが対象となります。
また、画面フローに埋め込んでいる「表示テキスト」の一部「<p>」が「&lt;p&gt;」のように変換されるなど、一部破壊的な変更が入ることも確認できました。
今後のアップデートで影響範囲が変わる可能性も高く、利用する場合は実行前に必ずバックアップ(例えばgit addでステージング状態にしておくなど)を取り、Salesforce組織に自動修正されたフローをデプロイしなおして、動作に影響ない事をしっかり確認する必要がありそうです。
■Documentation
Lightning Flow Scannerのボタンメニューから「Documentation」を選択すると、各ルールに対する説明が表示されたパネルが追加されます。
内容は全て英語ですが、それぞれ解説ページへのリンクも埋め込まれているため、ちょっと気になるルールについては、リンクをクリックしてWebページを翻訳して読むなど活用できそうです。
6.活用シーン
改めてLightning Flow Scannerは以下のようなシーンで活用できると思いました。
自分で作成したフローに問題ないか見直す時
他の人に作成してもらったフローに問題ないかレビューする時
GitHub Actionsに組み込みプルリクにPushされた時に自動レビューさせたい時(Salesforce CLI プラグインを活用)
7.CLIとVSCodeの違いについて
Salesforce CLI プラグインとVSCode拡張プラグインにはそれぞれ特徴があり、現時点では以下のような違いがあります。
Salesforce CLI プラグインの場合
コマンドで動く(CI/CDに組み込みやすい)
機能: スキャン/ルール設定/カスタムルールの追加
VSCode 拡張プラグインの場合
GUIで操作できる(視覚的に使いやすい)
機能: スキャン/ルール設定/テスト網羅率の確認/自動修復
おわりに
Lightning Flow Scannerは、Salesforceフローの品質向上に非常に有用なツールでした!本当にめっちゃ便利!
特にVSCodeの拡張プラグインで手軽に確認できるので、フロー作成後の自己レビューにすごく役立ちます。
また、コマンドで動く機能を提供しているため、CI/CDを組み込むことができ、問題を発見しやすくできます。
実際にGitHub Actionsを活用するやり方として以下のような記事を書いてくれた方もいて、大変ありがたいです!
SFDXコマンドまたはVSCodeでしかスキャンできない事は残念ですが、GitHubを確認すると Salesforceで動作するアプリも開発中のようです!!!これがリリースされたら、VSCodeを使用できない管理者にとっても非常に有力なサポートツールとなりそうです。
以上です。ここまで見てくださり有難うございます。
この記事が誰かの役に立てれば幸いです。
ではでは!
■関連記事
※この記事は「ゆるっとSalesforceトーク#37」で紹介した内容を記事にしています。