Open8
Rust Webassembly入門

から入門してみる

今回の目的は 「アプリケーションの一部を構築する — 既存の JavaScript フロントエンドの内部で Rust を使用します」 となるので、そのままセットアップになる。
自分のマシンのwsl環境にすでにrust1.69が入っているので、wasm-pack を入れる。
wasm-packはweb-assemblyを対象とするrustのcrateを使って、パッケージ化するためのツールのこと。
cargo install wasm-pack
かなり時間かかる。てかめっちゃかかる。なにこれ。
(15分後)
error: failed to compile `wasm-pack v0.12.1`, intermediate artifacts can be found at `/tmp/cargo-install7zzCEy`
Caused by:
package `anstyle v1.0.4` cannot be built because it requires rustc 1.70.0 or newer, while the currently active rustc version is 1.69.0
Try re-running cargo install with `--locked`
がーん

rustを現時点のstableにして再挑戦
$ rustup install 1.72.1
$ rustup default 1.72.1
$ cargo install wasm-pack
いけた。

wasm-bindgen
- wasm-pack はwasm-bindgen を利用して、JavaScript と Rust の型を繋いでいます。
- wasm-bindgen によって JavaScript が文字列に関する Rust API を呼び出すことや Rust の関数が JavaScript の例外をキャッチすることができるようになります。
パッケージのビルド
$ wasm-pack build --target web
上記は以下のようなことをする
- Rust コードを WebAssembly にコンパイルする。
- wasm-bindgen をその WebAssembly に対して実行し、WebAssembly ファイルを npm が理解できるモジュールにラップする JavaScript ファイルを生成する。
- pkg ディレクトリーを作成し、その JavaScript ファイルと WebAssembly コードをそこに移動する。
- Cargo.toml を読み、等価な package.json を生成する。
- (もし存在するなら) README.md をパッケージにコピーする。

あとは公式にしたがってindex.htmlを作成し、vscodeのLive Serverを起動して、index.htmlを閲覧すればOK.

npm 版はめんどいので省略

npm link
初めて知った。以下見させていただきました。

とりあえず適当に動かして、いろいろ確かめる