🌟

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