📦

Rust 1.84からRustの最小バージョンを考慮した依存関係の解決ができるようになった

2025/01/23に公開

Rust 1.84でRustの最小バージョン(MSRV)を考慮するリゾルバが安定化されました。
これによって、cargo addで間接的に追加されるクレートのMSRVが考慮されるようになったり、cargo updaterust-versionフィールドで指定されているRustのバージョンと互換性のあるバージョンのクレートが自動的に選択されるようになります。

cargo add clap

MSRVを考慮した依存関係の解決
MSRVを考慮した依存関係の解決

MSRVを考慮しない依存関係の解決
MSRVを考慮しない依存関係の解決

cargo update

MSRVを考慮した依存関係の解決
MSRVを考慮した依存関係の解決

MSRVを考慮しない依存関係の解決
MSRVを考慮しない依存関係の解決

MSRVは(間接的に)依存するクレートでrust-versionフィールドが定義されている場合に考慮されます。
このフィールドが定義されていない依存するクレートではMSRVを考慮した依存関係の解決は行われません。

設定方法

MSRVを考慮した依存関係の解決は.cargo/config.tomlで次のように設定することで有効になります。

.cargo/config.toml
[resolver]
incompatible-rust-versions = "fallback"

また、Cargo.tomlで次のように設定することでも有効になります。

Cargo.toml
[package]
# ...
resolver = "3"

なお、Rust 1.85で安定化予定のRust 2024からはpackage.resolver = "3"がデフォルトで有効になるので、上記の設定をしなくてもMSRVを考慮した依存関係の解決が行われます。

終わりに

今まではcargo updateを実行するとMSRVの互換性のないクレートが選択されて困っていましたが、MSRVを考慮するリゾルバが安定化されたことでこの問題が解決するので個人的に非常に助かります。

GitHubで編集を提案

Discussion