rust-toolchain.toml
Rustのバージョンを揃えたい!
.tool-versions
rustup override set ...
→ rust-toolchain.tomlを書こう
rustの構成をディレクトリごとに指定できる
rustfmt
clippy
rust-analyzer
rustup
※ rustcのバージョンではなくrustupのバージョンです
rustc
rustup/CHANGELOG.md #1.24.0 - 2021-04-27 より一部抜粋
Support of rust-toolchain.toml as a filename for specifying toolchains.
遥か昔から使える → バージョン問題は気にしなくていい
(最新のrustupバージョンは1.26.0)
1.26.0
rust-toolchain
.toml拡張子無しのファイルでも同様のことができるが、どちらを使うべきか
.toml
同リリースより一部抜粋↓
Since Cargo is migrating to explicit .toml extensions on things like .cargo/config.toml it was considered sensible to also do this for rust-toolchain - at least the toml variant thereof.
.cargo/config.toml
toml
.tomlを明示しようという流れがあるらしい
rust-toolchain.tomlの記述例
[toolchain] channel = "1.70.0" components = ["rustc", "cargo"] profile = "minimal" targets = []
componentsにrustcとcargoを明示しているが、 minimalプロファイルで暗示されているため実際は不要
components
cargo
minimal
Raspberry Pi 4B - Ubuntu 22.04 での実行例
rustup showでrust-toolchain.tomlが効いていることを確認できる
rustup show
cargoなどを実行したタイミングでもバージョンが切り替わる
バージョン切り替え・インストールのコマンドを実行する必要がない
例: GitHub Actionsでは最初からrustupが入っている →バージョン変更のコマンド実行がいらない
他CI環境でも(調べた限りは)同様
※ MSRV: Minimum Supported Rust Version
channel指定が古すぎてGHAが落ちた例
rust-version
nix-community/fenixやoxalica/rust-overlayでrust-toolchain.tomlを読んで適切なtoolchainを入れられる →rustupなしで同様のことが実現可能
rust-toolachain.tomlで設定を一本化できる!!
rust-toolachain.toml
```bash ~$ rustup show ... (デフォルト) ~$ cd path/to/hoge ~/path/to/hoge$ cat rust-toolchain.toml ... ~/path/to/hoge$ rustup show ... (オーバーライド) ```
```bash ~/path/to/hoge$ cargo build ... (バージョンが切り替わる) ```