Rust+WebAssemblyでHello Worldを行ったメモ

## 概要
[RustとWebAssemblyによるゲーム開発](https://www.oreilly.co.jp/books/9784814400393/)を進めるにあたって、環境構築で少し詰まったのでメモ

[ソースコード](https://github.com/hibohiboo/rust-game/tree/dfa1124a13e5d665e4058e5cf269572a5989783a)

Rustのつづきは[Zenn](https://zenn.dev/hibo/articles/54376a0246e7bc)に。

## 環境
- Windows 11 Home 23H2 22631.3810

## 実行環境構築
### Rustのインストール

```
choco install rustup.install -y 
```

インストール後、cargoが利用できるようにする。

```
rustup update
```

### cmakeのインストール
[rust入門](https://zenn.dev/mebiusbox/books/22d4c1ed9b0003/viewer/9c00b6)
Rustのコンパイルに使うのでC++のビルド環境を設定する。

```
choco visualstudio2022buildtools visualstudio2022-workload-vctools -y
```


cmakeのパスが通ったか確認。

```
cmake --version
```

パスが通っていない場合、環境変数(スタートメニューから`システム環境変数`を検索)のPATHに下記を追加する。

```
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin
```

パスが通ったか確認する。
```
cmake --version
```

### wasmのインストール

```
cargo install wasm-pack
```

## スケルトンの準備

本の手順では`npm init rust-webpack`コマンドで行っていたが、動かなかった。

[githubのスケルトン](https://github.com/rustwasm/rust-webpack-template/blob/master/template/Cargo.toml)をcloneして使うことに。

その後、パッケージが古かったので更新を行った。

**参考**
[WASM の Webpack を v4 から v5 に Update した](https://qiita.com/syuuu/items/69485076f11a06530200#webpackconfigjs)

著者なら https://crates.io/search で最新にするそうだ。私もそうした。

> 読者は私よりも賢いだろうから、サンプルコードが確実に動くように、ここで示したバージョンを使うだろう

## 動作

webpack-dev-serverの更新にともない、startコマンドも`-d`オプションを外している。

```
  "start": "rimraf dist pkg && webpack-dev-server --open",
```

`npm run start`で、開発者ツールのコンソールに`Hello World`が表示されることを確認した。

## 試行錯誤
本に書いてあることそのままで動かないことがいくつか。

### cmakeが入っていない
下記のようなエラーが発生

```
error: linker `link.exe` not found
  |
  = note: program not found

note: the msvc targets depend on the msvc linker but `link.exe` was not found

note: please ensure that Visual Studio 2017 or later, or Build Tools for Visual Studio were installed with the Visual C++ option.

note: VS Code is a different product, and is not sufficient.

error: could not compile `windows_x86_64_msvc` (build script) due to 1 previous error
```

### エラーが発生したが欲しかったcmakeは入った件
`visualstudio2022-workload-vctools`をインストールしているときに下記のようなエラーが発生した。

```
[2e3c:0028][2024-07-04T01:10:41] WebClient error 'RequestCanceled' with 'https://aka.ms/vs/17/release/channel' - ExecuteWithRetryAsync failed along with a cancellation request
Warning: [2e3c:0028][2024-07-04T01:10:41] Failed to get the HttpWebResponse while invoking a HEAD request against https://aka.ms/vs/17/release/channel:System.OperationCanceledException: 操作は取り消されました。
   場所 System.Threading.CancellationToken.ThrowOperationCanceledException()
   場所 System.Threading.CancellationToken.ThrowIfCancellationRequested()
   場所 Microsoft.VisualStudio.Setup.Download.WebRequestService.<>c__DisplayClass9_0.<ExecuteWithRetryAsync>b__0(Object _)
   場所 System.Threading.Tasks.Task`1.InnerInvoke()
   場所 System.Threading.Tasks.Task.Execute()
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---


[2e3c:000f][2024-07-04T01:10:41] Package Microsoft.Windows.UniversalCRT.Msu.7 is not applicable: 現在の OS のバージョン '10.0.22631.0' は、サポートされるバージョンの範囲 '[6.1,6.2)' に含まれていません。

```

エラーは発生したがcmakeはパスを通したら動いたので放置。

## 参考

[The Rust Programming Language 日本語版](https://doc.rust-jp.rs/book-ja/)