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