Skip to content
Latchkey

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 はポリグロットなリポジトリでバージョンを統一するためのものです。

rustupasdf
スコープRust ツールチェーンポリグロット
channelstable/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 を追加しましょう。

関連ガイド