Snyk（スニーク）って、Salesforceでも使えるの？（中編）

[Snyk（スニーク）って、Salesforceでも使えるの？（前編）](https://qiita.com/Keiji_otsubo/items/def64ad9e061897c6cc2)　で難しいなぁって書いてしまったら、以下のようにお返事いただきました。

>Apex/AuraのコードはGitHubのようなSCMに保存されていらっしゃいますか？もし保存されているようでしたら、Snykで簡単にコードをスキャンすることが可能でございます。


ここ数年はSalesforceでしか遊んでないので、どうも他の仕組みを使うための耐性が低いです。まぁ、私の能力が低いのは嘆いても今に始まったことではないので、とりあえず手当たり次第に関係しそうな資料を探してみます。

しかし、このツールは私の能力を大きく超えている技術ではないかと感じます。理解できないまま下手に使うを返って問題になるような気もしてきたなぁ。

# @salesforce/sfdx-scanner v3.18.0

https://snyk.io/advisor/npm-package/@salesforce/sfdx-scanner#package-footer

### Salesforceコードアナライザー

Salesforce Code Analyzer は、ソースコードの静的分析のための統合ツールです。コード アナライザーは複数の言語を分析します。これは一貫したコマンドライン インターフェイスに依存し、ルール違反の結果ファイルを生成します。結果を使用してコードを確認し、改善します。

AppExchange に管理パッケージをリストする場合は、セキュリティ レビューに合格する必要があります。Salesforce Code Analyzer のスキャン レポートをアップロードする必要もあります。コード アナライザー レポートを AppExchange セキュリティ レビュー ウィザードの提出物に添付します。詳細については、「[Salesforce Code Analyzer を使用してコードをスキャンする](https://github.com/forcedotcom/sfdx-scanner/blob/master/package.json)」および「[AppExchange Security Review](https://github.com/forcedotcom/sfdx-scanner/blob/master/package.json)」を参照してください。

コード アナライザーは現在、PMD ルール エンジン、PMD コピー ペースト ディテクター、ESLint、RetireJS、および Salesforce グラフ エンジンをサポートしています。

コード アナライザーを継続的インテグレーション/継続的開発 (CI/CD) プロセスに統合して、定義したルールを適用し、高品質のコードを生成します。

[Salesforce コードアナライザー](https://github.com/forcedotcom/sfdx-scanner/blob/master/package.json)のドキュメント
Salesforce コードアナライザのドキュメントを読んで、次のことを学習してください。

+ コードアナライザーのインストール方法
+ コード アナライザー コマンド リファレンスに含まれるもの
+ コード アナライザー アーキテクチャの構造
+ カスタムルールを作成および管理する方法

# Security for Salesforce Developers

https://developer.salesforce.com/blogs/2021/07/security-for-salesforce-developers

使い方じゃないなぁ。サードパーティーのライブラリを使う時はSnykなどでしっかりスキャンしろってことか。

+ Properly evaluate third-party libraries, as they may contain XSS vulnerabilities too! You can do it manually or by using automatic tools, such as CheckMarx or **Snyk**.

-------------------------------------------------

Salesforceで使う時の具体的な設定は見つからないですね。やはりSnyk のドキュメントに戻っては初めから読むしかなさそうです。

# Snyk の使用を開始する: 無料プランとチーム プラン 

https://docs.snyk.io/getting-started/getting-started-with-snyk-free-team-plan

いくつかのスキャンを試して結果を確認する方法について説明します。

初めてスキャンを実行する場合。または作業中に１つのアプリケーションの結果に興味がある場合はローカル環境でのスキャンを始めるのが最適です。このガイドで説明します。

## プロジェクトを試してみる

このガイドでは、ローカル環境またはSnyk CLIを使用してサンプルまたは単一プロジェクトをテストする方法について説明します。

>Snykの無料プランでは、毎月限定された無料テストを実行できます。無制限にテストをしたい場合は有料プランを検討してください。

### アカウントの作成とログイン

ローカル環境内であってもSnykの機能を使用するにはSnykアカウントが必要です。[無料のアカウントを作成](https://docs.snyk.io/getting-started/quickstart/create-or-log-in-to-a-snyk-account)してプロジェクトを試してください。

### ローカル環境内でプロジェクトをテストする


ローカル開発環境で単一のプロジェクトをスキャンするには、IDE で Snyk プラグインまたは拡張機能を使用する必要があります。

>IDE を認証するときに、信頼するフォルダーのスキャンに関する警告が表示される場合があります。 Snyk が invok などのコードを実行しているため


ローカル プロジェクトの Snyk IDE プラグインまたは拡張機能を使用してスキャンすると、オープンソースパッケージに関する問題の情報が提供されます。


ローカル プロジェクトの Snyk IDE プラグインまたは拡張機能を使用したスキャンも可能です

:::note
やはりクラウド側にApexのコードが保存されているAura コンポーネントの場合は、このままではテストできないってことかもしれません
:::

### Snyk CLI を使用してプロジェクトをテストする

一部のパッケージマネージャーはローカル環境のコンテキストに依存するため、ローカル環境でテストするか、CI/CDパイプラインの一部としてテストすると、もっとも正確な結果が得られます。

まず、[Snyk CLIをインストールします](https://docs.snyk.io/snyk-cli/install-or-update-the-snyk-cli)。インストール後Snykアカウントに対して認証する必要があります。

**Snykテスト**によるスキャンでは、修正アドバイスを含むオープンソースパッケージの問題に関する情報が提供されます。

**Snykコードテスト**によるスキャンでは、そのプロジェクト内のコードに対して性的コード分析テストが実施され、検出された脆弱性の問題リスト、テストに関する一般情報、およびテスト結果のが概要が返されます。

**Snykコンテナテスト**を使用したスキャンでは、コンテナイメージ内に脆弱性のリストと、ベースイメージをより安全なイメージにアップグレードするための推奨事項が返されます。

**Snyk iacテスト**でスキャンすると、インフラストラクチャで発見された問題を解決する方法に関するアドバイスがコードファイルとして返されます。

# 2023/12/08 現在

>Salesforceと統合してのコードをスキャンするときことができないということでございました。もし今後SCMに保存されるような運用に変更されることがございましたら...

ああ、やっぱり開発者コンソールでSalesforce側にソースを保存していたらできないんですね。

CLIを使えばローカルでもできるなら、Tooling APIを使ってApex Classをローカルにダウンロードすれば可能かもしれませんね。まぁ、開発者コンソールからソースコードをコピーしてテキストファイルに貼り付けてもお試しはできるかもしれない。

# 実際に作業してみます。

1. アカウントの作成

https://snyk.io/?utm_medium=Referral&utm_source=Qiita

2\. CLIをインストールする


次の直接リンクを使用して実行可能ファイルをダウンロードすることもできます。<-- 今回はこれを使う 

**Windows**: https://static.snyk.io/cli/latest/snyk-win.exe

3\. とりあえず使えるかどうかを確かめます。

```
./snyk --version
```

動くようですね。

```
1.1264.0
```

認証してないから？

```
./snyk test


`snyk` requires an authenticated account. Please run `snyk auth` and try again.
```



英語の資料を見ながらやっていると... だんだん拒絶反応(英語に対するもの、知らないシステムを初めて使う時のものの両方)が出てきます。限界だな。
諸先輩方のアドベンカレンダーを参考にします。

You can authenticate by using the CLI snyk auth command to launch the authentication dialog in your browser. 

https://docs.snyk.io/snyk-cli/authenticate-the-cli-with-your-account


snyk auth　を行ったら使えるようになったかも

```
Your account has been authenticated. Snyk is now ready to be used.
```

何か設定ファイルを作らないといけないとは思うけど...
やっぱりエラーですな。

```
./snyk test

Could not detect supported target files in C:\Users\user\Desktop\snyk.
Please see our documentation for supported languages and target files: https://snyk.co/udVgQ and make sure you are in the right directory.
```

以下を読んでもよく分からん。ここにApexのクラスをダウンロードしたファイルを置いて置けばいいのかな？

+ [Could not detect supported target files](https://support.snyk.io/hc/en-us/articles/4417005590673-Could-not-detect-supported-target-files)

同じフォルダーにソースを保存したけど... エラーですね。使ったことないシステムは難しい。

```
./snyk test

Could not detect supported target files in C:\Users\user\Desktop\snyk.
Please see our documentation for supported languages and target files: https://snyk.co/udVgQ and make sure you are in the right directory.
```

ちょっと気分転換してから、再度挑戦したい。英語のマニュアルを自動翻訳でも読む気がしないなぁ。