👌

プロジェクト内の様々な確認を行う:cargo-denyメモ [blessed.rsシリーズ11]

2024/05/23に公開

概要

https://blessed.rs/crates

こちらのリストにあるものを見て書いたメモになります。

今回はcargo-denyについてです。

cargo-denyとは

プロジェクト内の様々な確認を行うcargoの拡張ツール

わかりやすいサイト

install

https://github.com/EmbarkStudios/cargo-deny?tab=readme-ov-file#install-cargo-deny

$ cargo install --locked cargo-deny

使用前の準備

https://github.com/EmbarkStudios/cargo-deny?tab=readme-ov-file#initialize-your-project

まずはプロジェクト内で設定ファイルのinitを行う

$ cargo deny init

このようにするとdeny.tomlが作成される

設定ファイルがあるのであれば、それをコピーしてきてもよい

使い方

https://github.com/EmbarkStudios/cargo-deny?tab=readme-ov-file#usage

以下のコマンドでプロジェクトの確認を行う

$ cargo deny init

確認項目は以下の4つで、それぞれのみについて確認することもできる

※ 詳細な設定についてまでは調べていない。こちらを参照:https://embarkstudios.github.io/cargo-deny/index.html

licenses

$ cargo deny check licenses

依存関係のlicenseがdeny.tomlで設定した条件を満たしているかどうかを確認する

cargo-denyは、SPDX フォーマットを使用してクレートのライセンス要件を解釈します。
メタデータからSPDX フォーマットを直接取得できない場合は、指定した信頼閾値内で SPDX フォーマットを導出しようとします

SPDX license expressions

Bans

$ cargo deny check bans

特定のクレートを拒否、または許可したり、同じクレートの複数のバージョンについて検出することを行う

※ Rustでは、同じクレートに依存する別のクレートなどがあった場合に、それぞれが違うバージョンに依存していると、そのどちらもプロジェクトに含めるようなことがあるようである:https://embarkstudios.github.io/cargo-deny/checks/bans/index.html#use-case---duplicate-version-detection

Advisories

$ cargo deny check advisories

アドバイザリ・データベースを調べて、クレートの問題を検出する

  • セキュリティ脆弱性の検出
    • advisory databaseをもとに検出
    • 自分のデータベースをもとに検出するようにすることも可能
  • メンテナンスされていないクレートの検出
    • 同様にadvisory databaseから検出

sources

$ cargo deny check sources

クレートが信頼できるソースからのみきているか確認する

また、gitやレジストリのソースなどをすべて無効にすることで、外部に全く依存しないような設定にして、それが守られているかを確認することも可能。

GiuHub Actions

https://embarkstudios.github.io/cargo-deny/index.html#github-action

GitHub Actionsで使用したい場合は上記URLなどを参照

Discussion