scoopで作るRustのWindows開発環境

[Rust]:https://www.rust-lang.org
[Scoop]:https://scoop.sh
[Scoopで作るLinux on Windows開発環境]:https://qiita.com/dozo/items/a6f63aa1b03d1773b8ec



ヾ(・ω<)ﾉ"　三三三●　ⅱⅲ コロコロ♪

関連ページ

* [Scoopで作るLinux on Windows開発環境]
* [WSL2で作るRustのWindows開発環境: Rustのすゝめ(1)](https://zenn.dev/dozo/articles/56a3fa90dbfb50)



----
------------------- ↓ 余談はここから ↓-------------------

こんな記事を見た。

[Windows 10にRustをインストールする方法](https://news.mynavi.jp/article/rust-4/)
https://news.mynavi.jp/article/rust-4/

まずVisualStdioを用意します・・・

そんなわけない・・・かな？
パッケージを使うときにCコンパイラが登場するけど、
言語の学習段階ではいらないし。
VCじゃなくてMinGWでもいけるやろ。

丁度[Rust]を勉強しているとこだった。
WSLで作るかScoopで作るか並行してやっていたが、
いったんScoopで環境ができたのでそちらを記録しておく。
（WSLは別記事かな。）

例によってインストールから記述するので、
適当に読み飛ばしてほしい。

----
------------------- ↓ 本題はここから ↓-------------------

## [Scoop]のインストール

以下のページを参照のこと。
[Scoopで作るLinux on Windows開発環境]

※busybox入れてる方は削除をしておくこと。
（理由は後述を参照, gowで代替）

## gccのインストール

便宜上必要なので入れておく

```
PS C:\> scoop install pkg-config openssl gcc
PS C:\> which gcc
C:\Users\magic\scoop\apps\gcc\current\bin\gcc.EXE
PS C:\> which ar
C:\Users\magic\scoop\apps\gcc\current\bin\ar.EXE
```

インストール後は一度PowerShell閉じた方がいいやも。

## rustupのインストール

rustupを直接ダウンロードしてインストールすることもできるが、
今回は[Scoop]で統一しておく。
（そのためのパッケージマネージャだし）

[Scoop]パッケージには`rustup`と`rust`という[Rust]関連が二つある。
簡単に言うと`rust`は一般ユーザー向け(コマンドだけ入れる)、
`rustup`は開発者ユーザー向けってところか。(大雑把すぎか、まぁいいや。)
`rust`が先にインストールされていると`rustup`がインストールできない（内容が被っている）
なので`rust`は削除しておく。

```
PS C:\> scoop uninstall rust # エラーがでてもスルーで
PS C:\> scoop install rustup
```

[Scoop]でインストールすると、
デフォルトの環境変数は以下のようになる。

```
CARGO_HOME=C:\Users\magic\scoop\persist\rustup\.cargo
RUSTUP_HOME=C:\Users\magic\scoop\persist\rustup\.rustup
```

## ツールチェインを設定

rust開発に必要なrustc, cargoなどのツール群。
これらをstable, beta, nightlyから選ぶわけだが、
まぁstableでいいだろう。
stable-gnuとstable-msvcがあるのだが、
Windows上のVisualStudio(VSCodeを除く)で開発するときはmsvc、
その他の環境(WSLやVSCode, Clionなど)で開発するときはgnuを選ぶことになる。

```
PS C:\> rustup install stable
PS C:\> rustup default stable
```
(rustup入れた時点でこうなっている)

## 標準ライブラリをインストール

これがあればコード補完が行われる。

```
PS C:\> rustup component add rust-src
```


## はろーわーるど

VSCodeやCLionのようなIDEを使うのがいいと思うが、
それらは個々人にお任せするとして。
ここではHelloしてみよう。

```
PS C:\> cargo new hello
PS C:\> cd hello
PS C:\hello\> cargo build
PS C:\hello\> ./target/debug/hello.exe
Hello, world!
```


いろいろ、勉強になった。
なんとなくだけどWSLの方が環境作りやすいかも。
次はそっちで作ってみよう。

----
------------------- ↓ 後書はここから ↓-------------------

ガチでwindowsアプリを開発をするのならば、
VisualCのコンポーネントが必要になるだろう。
そのときは先述のページのように、
VisualC関連のものをインストールすることになる。
https://visualstudio.microsoft.com/ja/downloads/

ツールチェイン設定をmsvcがついているものにすればすぐ切り替えられる。

```
PS c:\> rustup install stable stable-msvc
PS c:\> rustup default stable-msvc
```

## cargo-addをインストール

cargoパッケージを利用するとき、
tomlファイルを直接いじる必要があるのだが、
ちょっと面倒くさい。
そこで、それらをコマンドだけで調整してくれるコマンドをあらかじめ入れておく。
cargo-editパッケージの一機能なのだが、
後述したようにインストールできなかったので、
addだけ入れておく。

```
$ cargo install cargo-add
$ cargo add csv --version 1.1.3
```

### ハマりポイント
#### cargo-editがインストールできない

たかが、テキスト調整ソフトのくせにインストールがやたら大変。
しかもエラーメッセージがやたら長いのも困ったもの。
でもこれのインストールが失敗するのではほかのパッケージでもこけるので、
調査を継続。

```
error: linking with `gcc` failed: exit code: 1
・・・
error: aborting due to previous error

error: could not compile `cargo-edit`.
warning: build failed, waiting for other jobs to finish...
error: linking with `gcc` failed: exit code: 1
・・・
  = note: ld: cannot find -lntdll

error: aborting due to previous error

error: failed to compile `cargo-edit v0.5.0`, intermediate artifacts can be found at `C:\Users\magic\AppData\Local\Temp\cargo-installNTRH
cq`

Caused by:
  could not compile `cargo-edit`.
```

(゜-゜) ？？？
わけわからん。
ldコマンドに lntdll って項目がないってことか？

あれこれ調べてみたけど、
これはmsvcコンポーネントが必要なのかもしれん。


#### backtraceのインストールに失敗する
```
error: failed to run custom build command for `backtrace-sys v0.1.34`

Caused by:
  process didn't exit successfully: `C:\Users\magic\AppData\Local\Temp\cargo-installdVH5NG\release\build\backtrace-sys-1782e6d01e01593c\b
uild-script-build` (exit code: 1)
--- stdout
cargo:rustc-cfg=rbt
TARGET = Some("x86_64-pc-windows-gnu")
OPT_LEVEL = Some("3")
HOST = Some("x86_64-pc-windows-gnu")
CC_x86_64-pc-windows-gnu = None
CC_x86_64_pc_windows_gnu = None
HOST_CC = None
CC = None
CFLAGS_x86_64-pc-windows-gnu = None
CFLAGS_x86_64_pc_windows_gnu = None
HOST_CFLAGS = None
CFLAGS = None
CRATE_CC_NO_DEFAULTS = None
CARGO_CFG_TARGET_FEATURE = Some("fxsr,sse,sse2")
running: "gcc.exe" "-O3" "-ffunction-sections" "-fdata
```

('ω') ？？？

わけわからん。
けどエラーメッセージをよく見てみると以下の記述があった。

```
06b64275ba4032\\out\\src/libbacktrace/pecoff.o"
cargo:warning=BusyBox v1.32.0-FRP-3329-gcf0fa4d13 (2020-01-09 09:35:27 GMT) multi-call binary
cargo:warning=
cargo:warning=Usage: ar [-o] [-v] [-p] [-t] [-x] ARCHIVE FILES
cargo:warning=
cargo:warning=Extract or list FILES from an ar archive
cargo:warning=
cargo:warning=  -o      Preserve original dates
cargo:warning=  -p      Extract to stdout
cargo:warning=  -t      List
cargo:warning=  -x      Extract
cargo:warning=  -v      Verbose
cargo:warning=C:\ProgramData\scoop\apps\busybox\current\busybox.exe: unknown option -- s
```

(。´・ω・)ん?なんでここでbusyboxがでてくんの？
どうやらarコマンドが名称被りのようだ。
busyboxをいったん削除

```
PS C:\> scoop uninstall busybox
```