rust-dependency-audit について
Rust のメンテナー向けに、依存関係の安全性、更新状況、ライセンス、サプライチェーンを確認する監査ワークフローです。4 種類の監査ツールを組み合わせ、更新を勧める前に crates.io の情報を確認します。
主な機能
- 01依存関係の更新状況を確認
- 02既知の脆弱性をスキャン
- 03ライセンスとアドバイザリーを確認
- 04サプライチェーン監査を検証
- 05unsafe コードの使用量を測定
活用シーン
- 01リリース前の依存関係監査
- 02cargo update 後の変更確認
- 03CI での依存関係チェック設定
- 04ライセンスとサプライチェーン状況の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ terrylica/ cc-skills --skill rust-dependency-auditインストール後、Claude Code で/rust-dependency-auditを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/cargo-audit-guide.mdcargo-deny-guide.mdcargo-geiger-guide.mdcargo-outdated-guide.mdcargo-vet-guide.mdevolution-log.md詳細
Rust 依存関係の監査
鮮度チェック、脆弱性スキャン、ライセンス/勧告への準拠、サプライチェーン検証という、互いを補完する4つのツールを使用した包括的な依存関係監査のワークフローです。
自己進化型スキル:このスキルは使用を通じて改善されます。手順に誤りがある、パラメーターが変わっている、回避策が必要だった場合は、先延ばしにせず、ただちにこのファイルを修正してください。実際に再現可能な問題がある場合にのみ更新してください。
重要:アップグレードを決定する前にウェブで確認する
アップグレードを推奨する前に、必ず crates.io で最新バージョンを確認してください。 静的なドキュメントは古くなるため、crates.io API の情報を正としてください。
-
クレートをアップグレードする前に:現在のバージョンとその依存関係を確認します
WebFetch: https://crates.io/api/v1/crates/{crate_name} Prompt: "What is the latest version? List recent versions and their dependencies." -
脆弱性を無視する前に:修正済みのバージョンが存在するか確認します
WebSearch: "{advisory_id} {crate_name} fix patch" -
互換性チェーンを確認する:クレート A がクレート B に依存している場合、両方の最新バージョンに互換性があるか確認します
WebFetch: https://crates.io/api/v1/crates/{crate_name}/{version}/dependencies Prompt: "What version of {dependency} does this require?" -
代替手段:Firecrawl でスクレイピング(WebFetch が失敗する場合 — JavaScript が多いページ、レート制限、不完全なデータ):
curl -s -X POST https://api.firecrawl.dev/v2/scrape \ -H "Content-Type: application/json" \ -d '{"url": "https://crates.io/crates/{crate_name}", "formats": ["markdown"], "waitFor": 0}' \ | jq -r '.data.markdown'パブリック API のため、キーもテイルネットも不要です。API の詳細については、
/devops-tools:firecrawl-research-patternsを参照してください。
使用するタイミング
- リリース前(監査パイプライン全体を実行)
cargo updateの後(新たな脆弱性がないことを確認)- CI パイプラインのセットアップ(依存関係チェックの自動化)
- ライセンス準拠レビュー(オープンソースプロジェクト)
- サプライチェーンのセキュリティ評価
4つのツールを使った監査ワークフロー
次の順番で実行します。各ツールは異なる問題を検出します。
# 1. Freshness — what's outdated?
cargo outdated
# 2. Vulnerabilities — any known CVEs?
cargo audit
# 3. Licenses + Advisories — compliance check
cargo deny check
# 4. Supply Chain — who audited these crates?
cargo vet
簡易評価
# One-liner: run all four (stop on first failure)
cargo outdated && cargo audit && cargo deny check && cargo vet
鮮度:古くなった依存関係の検出
用途に応じて3つのツールがあります。
| ツール | インストール | 目的 | 最適な用途 |
|---|---|---|---|
cargo-outdated | cargo install cargo-outdated | 互換性のあるバージョンと最新バージョンを含む詳細な古い依存関係レポート | 包括的な監査 |
cargo-upgrades | cargo install cargo-upgrades | 軽量 — 互換性のない(破壊的な)更新のみを表示 | 簡易チェック |
cargo upgrade (cargo-edit) | cargo install cargo-edit | Cargo.toml のバージョンを実際に更新 | 更新の実施 |
# Show all outdated deps (compatible + incompatible)
cargo outdated --root-deps-only
# Show only breaking updates needed
cargo upgrades
# Actually update Cargo.toml (dry run first)
cargo upgrade --dry-run
cargo upgrade --incompatible
# Nightly: native cargo support (experimental)
cargo +nightly update --breaking
推奨:簡易チェックには cargo-upgrades、包括的な監査には cargo-outdated、実際に更新する準備ができたら cargo upgrade(cargo-edit)を使用してください。
cargo-outdated のリファレンスを参照してください。
セキュリティ:脆弱性スキャン
cargo-audit(RUSTSEC データベース)
# Scan for known vulnerabilities
cargo audit
# Auto-fix where possible (updates Cargo.lock)
cargo audit fix
# Binary scanning (audit compiled binaries)
cargo audit bin ./target/release/my-binary
# Custom config (ignore specific advisories)
# Create audit.toml:
# audit.toml
[advisories]
ignore = [
"RUSTSEC-YYYY-NNNN", # Reason for ignoring
]
cargo-audit のリファレンスを参照してください。
cargo-deny(勧告など)
cargo-deny の勧告チェックは、追加の情報源を使って cargo-audit を補完します。
# Check advisories only
cargo deny check advisories
# All checks (advisories + licenses + bans + sources)
cargo deny check
cargo-deny の設定全体については、以下のライセンスのセクションを参照してください。
ライセンス:準拠チェック
cargo-deny のライセンスチェック
# deny.toml
[licenses]
allow = [
"MIT",
"Apache-2.0",
"BSD-2-Clause",
"BSD-3-Clause",
"ISC",
"Unicode-3.0",
]
confidence-threshold = 0.8
[[licenses.clarify]]
name = "ring"
expression = "MIT AND ISC AND OpenSSL"
license-files = [{ path = "LICENSE", hash = 0xbd0eed23 }]
# Check licenses
cargo deny check licenses
# Generate deny.toml template
cargo deny init
cargo-deny のリファレンスを参照してください。
サプライチェーン:監査の検証
cargo-vet(Mozilla)
cargo-vet は、監査済みのクレートと監査者を記録します。
# Check supply chain status
cargo vet
# Audit a specific crate (certify you've reviewed it)
cargo vet certify <crate> <version>
# Import audits from trusted organizations
cargo vet trust --all mozilla
cargo vet trust --all google
# See what needs auditing
cargo vet suggest
主なファイル:
supply-chain/audits.toml— 自身の監査supply-chain/imports.lock— インポートした監査supply-chain/config.toml— 信頼するソース
cargo-vet のリファレンスを参照してください。
unsafe コード:依存関係の安全性監査
cargo-geiger
cargo-geiger は、依存関係ツリー全体における unsafe コードの使用量を定量化します。
# Quick check: which deps forbid unsafe? (fast, no compilation)
cargo geiger --forbid-only
# Full audit: count unsafe blocks per crate
cargo geiger
# Output as ratio (for CI/scripting)
cargo geiger --forbid-only --output-format ratio
# Markdown report
cargo geiger --output-format markdown > unsafe-report.md
主なフラグ:
--forbid-only:高速モード —#![forbid(unsafe_code)]のみをチェックします(コンパイルなし)--output-format:ratio、markdown、ascii、json--all-features:すべての機能を有効にしてチェックします
cargo-geiger のリファレンスを参照してください。
統合 CI ワークフロー(GitHub Actions)
name: Dependency Audit
on:
pull_request:
schedule:
- cron: "0 6 * * 1" # Weekly Monday 6am
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: cargo-audit
run: |
cargo install cargo-audit
cargo audit
- name: cargo-deny
uses: EmbarkStudios/cargo-deny-action@v2
- name: cargo-vet
run: |
cargo install cargo-vet
cargo vet
- name: cargo-geiger
run: |
cargo install cargo-geiger
cargo geiger --forbid-only
- name: cargo-outdated
run: |
cargo install cargo-outdated
cargo outdated --root-deps-only --exit-code 1
参照ドキュメント
- cargo-audit-guide.md — 脆弱性スキャン
- cargo-deny-guide.md — ライセンスおよびアドバイザリーのコンプライアンス
- cargo-outdated-guide.md — 最新性および代替手段
- cargo-vet-guide.md — サプライチェーン監査
- cargo-geiger-guide.md — unsafe コードの定量化
トラブルシューティング
| 問題 | 解決策 |
|---|---|
cargo audit のデータベースが古い | cargo audit fetch を実行して RUSTSEC DB を更新します |
cargo deny でライセンスの誤検知が発生 | deny.toml に [[licenses.clarify]] エントリを追加します |
cargo vet で未監査のものが多すぎる | 信頼できる組織の監査をインポートします:cargo vet trust --all mozilla |
cargo outdated に yanked が表示される | 最初に cargo update を実行して Cargo.lock を更新します |
| プライベートレジストリのクレート | deny.toml の [sources] を設定してプライベートレジストリを指定します |
| ワークスペースと単一クレート | ほとんどのツールは --workspace フラグに対応しています |
実行後の振り返り
このスキルの実行後、終了する前に次の点を確認します。
- コマンドは成功しましたか? — 成功しなかった場合は、失敗の原因となった手順またはエラーテーブルを修正します。
- パラメーターや出力に変更はありましたか? — 基盤となるツールのインターフェースに変更があった場合は、「使用例」と「パラメーター」テーブルを更新して合わせます。
- 回避策が必要でしたか? — 別のフラグや追加手順など、工夫が必要だった場合は、次回同じ回避策が不要になるよう、この SKILL.md を更新します。
問題が実際に発生し、再現可能な場合にのみ更新します。推測に基づく更新は行いません。