rustup vs asdf: Rust ツールチェーンの管理
rustup は component、target、channel を備えた Rust 公式のツールチェーンマネージャ。asdf はプラグイン経由で Rust を多数の言語の1つとして管理します。
rustup は Rust をインストールする正統な方法で、stable/beta/nightly の channel、クロスコンパイルの target、clippy や rustfmt などの component を、すべて rust-toolchain.toml で駆動して扱います。asdf はプラグイン経由で Rust をインストールし、他の言語と一緒に .tool-versions で固定できますが、rustup の豊富な component と target の管理を置き換えるものではありません。Rust の深さには rustup が不可欠で、asdf はポリグロットなリポジトリでバージョンを統一するためのものです。
| rustup | asdf | |
|---|---|---|
| スコープ | Rust ツールチェーン | ポリグロット |
| channel | stable/beta/nightly | 固定バージョン |
| target / component | 第一級 | 限定的 |
| 設定 | rust-toolchain.toml | .tool-versions |
| 最適な用途 | 本格的な Rust 作業 | 統一された多言語の固定 |
CI では
本格的な Rust の CI はいずれも channel、target、component のために rustup を使います。asdf だけではクロスコンパイルや clippy の追加をきれいに行えません。チームはパリティのために Rust バージョンを .tool-versions に固定することが多いですが、内部では依然 rustup に依存します。実用的な答えは、Rust には rustup、そして asdf は必要に応じて言語横断でバージョンを調整する、というものです。
高速化
Cargo.lock をキーに、cargo の registry、git、target ディレクトリを cache しましょう。どちらも CI runner 上で動作し、より高速なマネージド runner は Rust のインストールとコンパイルの手順を短縮します。
結論
channel、target、component を使う本格的な Rust 開発をするなら rustup で、asdf では完全に置き換えられません。ポリグロットなリポジトリで多数の言語の中の1つの Rust バージョンを調整するなら asdf で固定できますが、重い作業は依然 rustup が担います。Rust には rustup を使い、言語横断の一貫性のためだけに asdf を追加しましょう。