WSL2で作るRustのWindows開発環境: Rustが征く(1)
VSCode, Jetbrains CLion, IDEA対応
関連記事:
WSL2で作るWindows開発環境: Rustが征く(1)
------------------- ↓ 前書はここから ↓-------------------
Qiita時代に
という記事を書いた。
このときはWindows上にscoopを入れてRustを実行できるようにしたが、
あれからWSLも進化したのでそちらの環境を作ることにする。
といってもLinux上で環境作るのは簡単。
問題は悪名高いcrates.io接続が遅すぎるってこと。
それも解決していこう。
IDE設定は後書きの一番最後に記載した。
インストール側の方が重要なので
ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪
------------------- ↓ 本題はここから ↓-------------------
WSLをインストール
WSL2がインストールされているのが前提。
(Dockerでもいいけどそれは別の機会に)
OSは何でも良いが、
ここではUbuntuを使っているものとする。
令和3年8月4日追記
コマンド一発でインストールできるパッチが配布されたそうだ。
KB5004296をインストールして、
以下のコマンドでインストール
wsl --install
build-essentialをインストール
sudo apt install build-essential
rustのインストール
aptやbrewを使うって手もあったが、
開発環境はユーザーベースにしておきたいので、
一般ユーザーでインストールする。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
echo 'export PATH=$HOME/.cargo/bin:$PATH' | tee -a .bashrc
source .bashrc
rustup --version
rustup 1.24.3 (ce5817a94 2021-05-31)
cargo --version
cargo 1.53.0 (4369396ce 2021-04-27)
(^_^; bashの構文もう忘れた・・・
各種コンポーネントをも併せてインストールしておく
rustup target add wasm32-unknown-unknown
rustup component add rustfmt rust-analysis rust-src
hello world
それではHelloしてみよう。
cargo new hello
Created binary (application) `hello` package
cd hello
cargo build
Compiling hello v0.1.0 (/home/dozo/rust/hello)
Finished dev [unoptimized + debuginfo] target(s) in 1.60s
実行
./target/debug/hello
Hello, world!
(・∀・) 簡単ですね!
------------------- ↓ 後書はここから ↓-------------------
cargo-editをインストール
Cargo.tomlファイルをいじるの面倒なので、
その辺をざっくり扱ってくれるcargo-editを入れておく。
cargo install cargo-edit
(インストールファイル数とインストール時間に度肝抜かれるなよ)
cargo.ioが遅い問題を根本解決する
上記でcrates.ioが遅いって言う話をしたが、
接続が遅いのもあるが、
リポジトリ更新も遅いというのがある。
それらを解決する方法はないことはない
パブリックDNSを使用する
wslのresolv.confは自動生成で、
適当なローカルIPが設定されるが、
これが接続の足かせになっている。
そこで、GoogleやCloudflareが用意しているパブリックDNSを使用する
name | ip |
---|---|
8.8.8.8 | |
Cloudflare | 1.1.1.1 |
OpenDNS | 208.67.222.222 and 208.67.220.220 |
resolv.confの手動設置
printf "[network]\ngenerateResolvConf = false" | sudo tee -a /etc/wsl.conf
wslを再起動
exit
wsl -t [ditro]
wsl -d [ditro]
resolv.confを再設置
printf "nameserver 1.1.1.1" | sudo tee /etc/resolv.conf
DISPLAY値再設定
resolv.confをpublic DNSにすると、
wslgやx11などの仕様に支障を来す。
その際、以下のコマンドで代用する
export DISPLAY=$(ip route | awk '/^default/{print $3; exit}'):0
参照: How to set up working X11 forwarding on WSL2
リポジトリ更新データを設定する
上記設定で十分実用的だが、
さらにローカルに設置する方法もある。
(ただし、動作が安定しないことも)
都度ダウンロードする更新情報をローカルにキャッシュする
更新情報リポジトリをbare cloneしてローカルに保存する
cd ~/.cargo/registry/index
git clone --bare https://github.com/rust-lang/crates.io-index.git
設定ファイルにローカルリポジトリを登録しておく。
cargoコマンド実行時にfetchが走るように設定を追加しておく
[http]
timeout = 10
[net]
git-fetch-with-cli = true
[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
replace-with = 'crates-local'
[source.crates-local]
registry = "file:///home/dozo/.cargo/registry/index/crates.io-index.git"
cargo install cargo-add
を計測してみると
状態 | 時間 |
---|---|
設定前 | 31秒 |
設定後 | 20秒 |
(´▽`) サラマンダーよりはやーい
バイナリリポジトリを近場に変更する
チャイナにあるいくつかの大学で、
crates.ioのミラーサーバを立てているところがある。
リポジトリとの物理的な距離を近づけることで回避するわけだ。
これについてはリンクだけ張っておく。
チャイナリスクが伴うので自己責任で
求むJPサーバー
設定状態を確認する
現状設定状態を確認する方法がないが、
nightlyのtoolchainであれば可能らしい。
rustup toolchain install nightly
cargo +nightly -Z unstable-options config get
net.git-fetch-with-cli = true
source.crates-io.registry = "https://github.com/rust-lang/crates.io-index"
source.crates-io.replace-with = "crates-local"
source.crates-local.registry = "file:///home/dozo/.cargo/registry/index/crates.io-index.git"
# The following environment variables may affect the loaded values.
# CARGO_HOME=/home/dozo/.cargo
(^_^;) nighly外してくれないかなぁ
VSCodeの設定
VSCodeは特別な設定は必要ない。
拡張モジュールに[Remote Development]、[Rust]と[rust-analyzer]をインストール。
[View]-[Command Pallette]より[Remote WSL]コマンドで、
Linux側のディレクトリを指定する。
例: \\wsl$\Ubuntu\home\dozo\repo
以下を参考のこと
Windows Subsystem for Linux で Visual Studio Code の使用を開始する
(VSCodeのRemoteWSLの仕組みは凄い)
Jetbrains Clion, IDEAの設定
CLionやWebStorm, IDEAでRustプラグインをインストールすれば、
Rust開発の各種サポートが可能だが、
WSLでのコンパイラ(?)実行は通常できない。
ただ、nightlyビルドのみだが、
WSLサポートが可能のようだ。
(そのうち正式対応すると思う)
NightlyビルドのRustプラグインをインストールする
以下のサイトにてNightlyビルドのプラグインをインストールする。
(リポジトリはRustだけでいい)
WSL対応を有効にする
[Help]-[Find Action]を押下し[Experimental Feature]で検索
以下の3つにチェックを入れる。
- org.rust.wsl
- org.rust.macros.proc
- org.rust.resolve.new.engine
[Language & Framework] - [Rust]の[Toolchain Location]で
Wsl上のcargoパスリストが表示されていれば成功
選択するとバージョン番号が表示されて、
プラグイン上で使用できる
Discussion