Salesforce Code Analyzerのインストールエラー


以下のようなエラーメッセージで質問が投稿されています。

+ [Warning: Plugin @salesforce/sfdx-scanner (4.2.0) differs from the version specified by sf (3.25.0) & this Error (1): spawn ENOTDIR](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007epabcSAA)

```
sf plugins install @salesforce/sfdx-scanner@latest-beta
```

+ [Warning: Plugin @salesforce/sfdx-scanner (3.22.0) differs from the version specified by sf (3.21.0)](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ahBYNSA2)

ところで、このsfdx-scannerってなんだろう？

ソースコードの静的解析を、複数の言語（Apexを含む）で、一貫したコマンドラインインターフェースとレポート出力で実現する統一ツールです。

+ [Salesforceのコード解析ツール使ってみた](https://crm.adxc.co.jp/column/plugin_scanner/)


この拡張機能を使用すると、VS Code が Code Analyzer を使用してコードを操作できます。PMD および RetireJS エンジンに Salesforce Graph Engine を使用してスキャンを実行し、違反のリストを生成してコードを改善します。


Salesforce Code Analyzer VS Code 拡張機能 (ベータ) をインストールするには、まず Salesforce CLI をインストールします。続いて、ターミナルで sfdx plugins:install @salesforce/sfdx-scanner を実行します。

+ [Salesforce Code Analyzer Visual Studio Code 拡張機能を使用してソリューションを簡単にスキャン (ベータ)](https://help.salesforce.com/s/articleView?id=release-notes.rn_appexchange_partners_code_analyzer.htm&release=246&type=5)


# The engin "node" is incompactible with this module

+ [Salesforce Code Analyzerのインストール時のエラー](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000J7rCL0AZ)

:::note alert
fsdx-scanner eslint@8.57: This version is no longer supportd

error found incompactible module
@oclift/core@3.27.0: The engin "node" is incompactible with this module
:::


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/0c37db40-64c5-de31-1b0e-3a519414818e.png)

:::note
◆原因

　「Salesforce CLIとして」インストールされているnodeのバージョンが古い状態だった。
 ◆対応

　Salesforce CLIをアンインストール→再インストールし、

　コードアナライザーのインストールを試行。
:::

+ [Running Code Analyzer without the --category option causes an error (error messages are also garbled).](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000J8AFx)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/d93777fb-f9b1-b2d0-58ef-18c411235321.png)

:::note
なお、retire-js エンジンのこの特定のノードの問題は、今週末にリリースされる Code Analyzer v4 と Code Analyzer v5 の両方で修正される予定です。

ただし、まもなく (数か月以内に) Code Analyzer v4 のサポートが終了する可能性があることにも留意してください。そのため、代わりに新しい code-analyzer cli プラグインである Code Analyzer v5 の使用を開始することをお勧めします。 

https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/guide/code-analyzer.html

Code Analyzer v5 では、--rule-selector 引数を使用してルールの選択がはるかに簡単になります。code-analyzer.yml 構成ファイル内で独自のタグを割り当てて、ルールを必要に応じて分類することもできます。

To install v5:

```
sf plugins install code-analyzer
```


and then do

```
sf code-analyzer rulessf code-analyzer runsf code-analyzer config
```
:::

 

# コードアナライザーをインストールする 

[Salesforce コードアナライザー設定](https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/guide/setup.html)

Salesforce Code Analyzer v3.x をインストールするには、このコマンドを実行します。

```
$ sf plugins install @salesforce/sfdx-scanner
```

コード アナライザーの最新の GA バージョンを具体的にインストールすることもできます。

```
$ sf plugins install @salesforce/sfdx-scanner@latest
```

Code Analyzer v4.x (ベータ版) をインストールするには、このコマンドを実行します。

```
$ sf plugins install @salesforce/sfdx-scanner@latest-beta
```

# 検討

このプラグイン本体の問題ではない？しかし解決策は分かりません。

+ [SF Package Install Warn - @salesforce/plugin-packaging different from the version specific by sf - Type Error - this.config.plugins.filter is not a fn](https://salesforce.stackexchange.com/questions/414288/sf-package-install-warn-salesforce-plugin-packaging-different-from-the-versio)
+ [Warning: Plugin @salesforce/plugin-packaging (2.1.10) differs from the version specified by sf (2.1.12)](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ajeQoSAI)

# CPDPについて

https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/guide/cpd-engine.html

PMD に同梱されている CPD は、ファイル間で重複するブロックを識別するのに役立ちます。

+ [CPD の場合、パラメータを渡すためのコマンド ライン構文はありますか? PMD リンクで説明されている「--minimum-tokens」パラメータに興味があります。これを SF コマンド ラインに追加しましたが、解析されませんでした。](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ahymM)

:::note
最小トークンは環境変数「SFDX_SCANNER_CPD_MINIMUM_TOKENS」で設定できます。Macの場合は「export SFDX_SCANNER_CPD_MINIMUM_TOKENS=120」のように実行します。Windowsの場合はPowerShellで「$env:SFDX_SCANNER_CPD_MINIMUM_TOKENS = 120」のように実行します。
:::

:::note
なお、今週末 (木曜日の午後) に Code Analyzer v5 (ベータ版) をリリースする予定です。これにより、cpd エンジンの最小トークン引数 (言語ごと) をより細かく制御できるようになります。

code-analyzer.yml ファイル (sfdx プロジェクトのルート フォルダーに配置することをお勧めします) を作成し、エンジンを設定できます。設定オプションの 1 つは次のとおりです。

```
engines:

  cpd:
    # Specifies the minimum tokens threshold for each rule language.
    # The minimum tokens threshold is the number of tokens required to be in a duplicate block of code in order to be
    # reported as a violation. The concept of a token may be defined differently per language, but in general it is a
    # distinct basic element of source code. For example, this could be language specific keywords, identifiers,
    # operators, literals, and more. See https://docs.pmd-code.org/latest/pmd_userdocs_cpd.html to learn more.
    # If a value for a language is unspecified, then the default value of 100 will be used for that language.

    minimum_tokens:
      apex: 100
      html: 100
      javascript: 100
      typescript: 100
      visualforce: 100
      xml: 100
```
:::