Rust コーディング環境構築@VSCode
VSCode で Rust のコーディング環境を整えていく話です。
環境
- OS
$ uname -a
Linux X260-arch 5.16.8-arch1-1 #1 SMP PREEMPT Tue, 08 Feb 2022 21:21:08 +0000 x86_64 GNU/Linux
$ cat /etc/os-release
NAME="Arch Linux"
PRETTY_NAME="Arch Linux"
ID=arch
BUILD_ID=rolling
ANSI_COLOR="38;2;23;147;209"
HOME_URL="https://archlinux.org/"
DOCUMENTATION_URL="https://wiki.archlinux.org/"
SUPPORT_URL="https://bbs.archlinux.org/"
BUG_REPORT_URL="https://bugs.archlinux.org/"
LOGO=archlinux-logo
- Rust
$ rustup --version
rustup 1.24.3 (ce5817a94 2021-05-31)
$ cargo --version
cargo 1.58.0 (f01b232bc 2022-01-19)
$ rustc --version
rustc 1.58.1 (db9d1b20b 2022-01-20)
- VSCode
$ code -v
1.64.2
Rust をインストールする
Rustup を使うのがデファクトスタンダードです。
↓このコマンドを打てば終わり。
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Windows だとちょっと面倒くさいです。WSL なら上記コマンドで OK。
VSCode をインストールする
これは各環境に応じて。
Arch Linux であれば、AUR のものが使えます。
$ yay -S visual-studio-code-bin
VSCode に rust-analyzer を入れる
rust-analyzer は今一番イケてる Rust の Language Server っぽいです。
インストール方法は公式ドキュメントが詳しいです。
VSCode 以外の方法も結構丁寧に書いてあります。
VSCode の場合、拡張機能を普通にインストールするだけで OK です。
注意
Note that the plugin may cause conflicts with the official Rust plugin. It is recommended to disable the Rust plugin when using the rust-analyzer extension.
本家もあるのですが、競合するかもしれないからそちらは無効化しておけ、とのこと。
どうせ使わないので最初からインストールしない、インストール済みの場合はアンインストールして良いかと思います。
その他入れておくと便利なツール
cargo edit
Cargo.toml を CLI で操作するツールです。最新版とかをよしなに取ってきてくれるので便利です。
$ cargo install cargo-edit
cargo watch
プロジェクトの変更を検知して、起動コマンド等を自動的に実行しなおしてくれるやつです。
インストール:
$ cargo install cargo-watch
Web アプリなんかを開発しているとホットリロードしたくなりますよね。
例えば cargo run
で実行しているアプリは、下記コマンドで起動しておくと、ホットリロードが効くようになります。
$ cargo watch -x run
Actix もこの方法を推奨しています。
Rustfmt
公式が提供しているフォーマッタです。
インストール:
$ rustup component add rustfmt
設定項目一覧:
リンク先にもある通り、rustfmt.toml
か .rustfmt.toml
を Cargo プロジェクトのルートに置いて、そこに好みの設定を書くのが良いです。
Clippy
Rust の静的解析ツールです。
インストール:
$ rustup component add clippy
検査内容は↓こちらに一覧化されています。
検査内容はコマンドライン引数で指定するのが良さそうです。
例えば、私は return
を省略したくない人間なので needless_return
を許容させています。
こんな感じで:
$ cargo clippy -- -A clippy::needless_return
注意
一応設定ファイルも使えるのですが、サポートされているものが少ないようです。
先の needless_return = true
を clippy.toml
で指定すると、↓このようにエラーになりました。
$ cargo clippy
(中略)
error: error reading Clippy's configuration file `/path/to/clippy.toml`: unknown field `needless_return`, expected one of `avoid-breaking-exported-api`, `msrv`, `blacklisted-names`, `cognitive-complexity-threshold`, `cyclomatic-complexity-threshold`, `doc-valid-idents`, `too-many-arguments-threshold`, `type-complexity-threshold`, `single-char-binding-names-threshold`, `too-large-for-stack`, `enum-variant-name-threshold`, `enum-variant-size-threshold`, `verbose-bit-mask-threshold`, `literal-representation-threshold`, `trivial-copy-size-limit`, `pass-by-value-size-limit`, `too-many-lines-threshold`, `array-size-threshold`, `vec-box-size-threshold`, `max-trait-bounds`, `max-struct-bools`,`max-fn-params-bools`, `warn-on-all-wildcard-imports`, `disallowed-methods`, `disallowed-types`, `unreadable-literal-lint-fractions`, `upper-case-acronyms-aggressive`, `cargo-ignore-publish`, `standard-macro-braces`, `enforced-import-renames`, `allowed-scripts`, `enable-raw-pointer-heuristic-for-send`, `third-party` at line 1 column 1
VSCode の設定を書く
設定項目一覧:
保存時に、Rustfmt によるフォーマットと Clippy による静的解析が走るようにしています。
{
"[rust]": {
"editor.formatOnSave": true
},
"rust-analyzer.checkOnSave": true,
"rust-analyzer.check.command": "clippy",
"rust-analyzer.check.extraArgs": ["--", "-A", "clippy::needless_return"]
}
デフォルトだとヒント表示がかなりうるさい(下図)ので、嫌な方は適宜消すと良いかもしれません。
ヒント系をオフにする設定はこんな感じです。
{
"rust-analyzer.inlayHints.chainingHints": false,
"rust-analyzer.inlayHints.parameterHints": false,
"rust-analyzer.inlayHints.typeHints": false,
"rust-analyzer.inlayHints.hideNamedConstructorHints": false
}
hideNamedConstructorHints
だけはデフォルトで false
になってるので書かなくても良いです。
感想
Rust 関連、だいたい公式のドキュメントを見れば必要なことが分かるので、大変ありがたい。
書き忘れたこと
- REPL の話
Discussion