TL;DR

プロジェクトの依存グラフをリントする Cargo のプラグイン。既知の脆弱性を持つバージョン、受け入れられないライセンス、複数のバージョンが混在するクレートなどを検出する。

なぜ必要か

Effective Rust 項目25 によると、依存クレートはコードを書く時間を節約するが、コストもある。脆弱性のように、自分のクレートの外で起きた問題には気づきにくい。cargo-deny を CI に組み込めば、こうした問題に気づける。

仕組み

公式ドキュメントによると、チェックは次の 4 種類に分かれている。

  • licenses: 依存クレートのライセンス
  • bans: 禁止したクレートや、重複したバージョン
  • advisories: セキュリティ勧告
  • sources: クレートの取得元

Effective Rust 項目25 によると、チェックは個別に設定でき、例外も指定できる。項目31 によると、cargo-deny は cargo metadata で取得したメタデータを使っている。

例

cargo deny init でプロジェクトの既定の設定ファイルを作り、cargo deny check でチェックを実行する。

cargo deny init
cargo deny check

関連

出典