Rust で未使用 crate を整理したいなら、cargo-machete
開発中って試行錯誤するんで、適当に crate 入れると思うんですけど。「結局、今どれを使ってるんだっけ?」ってなりません? 僕はなります。なりますんで、未使用 crate を削除する方法を必要としていました。いらんものを入れているとバイナリがデカくなるし、コンパイル速度も落ちますからね。
で、「Rust 未使用 crate」で検索すると、日本語圏だとcargo-udeps
が引っ掛かると思うんですね。英語圏知らんけど。cargo-udeps
はよい crate だと思うし、私も昔は使っていたんですけど。ちょっと難点があるんですよね。
まず、実行速度が遅い。実行してから数分かかるんですよね。下手すると、コンパイルする時間より長い。未使用 crate の検出なんて、そんなしょっちゅう実行するものじゃないからヨシと言いたいところだけど。こういう機能はできたら、GitHub Actions で自動化したい。コミット毎に長時間待たされるのは、あまり嬉しくない。
あと、公開から結構経っているんですが、未だに nightly でしか動かない。未使用 crate の検出のためだけにリリースのバージョンを設定するのは嫌ですよね。検出する時だけバージョン変えることもできなくはないけど、clippy のお怒りポイントが変わる可能性もあるので、しちめんどくさい。
まあ、色々書きましたが、cargo-udeps
はよい crate ではあるものの、難点もある。同じような機能を持つ、別の crate もあったら嬉しいよね、という話です。それがcargo-machete
です。正直、完璧に同じ機能が実装されているのか、わかってないのですが。cargo-machete
には上の二つの難点がありません。つまり、実行速度が爆速だし、通常のバージョンで動きます。
使い方は簡単。
cargo install cargo-machete
これでインストールして。
cargo machete
するだけ。しかも、開いて5秒で見える位置に GitHub Actions の用例も載せてくれています。
name: Cargo Machete
on:
pull_request: { branches: "*" }
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Machete
uses: bnjbvr/cargo-machete@main
github で Rust を使ってる場合、GitHub Actions で fmt、clippy、test、cargo-deny
は実行させてると思いますが。そこに加えて、cargo-machete
も入れておくと便利ですよ。という話でした。
Discussion