Rustを勉強する

Rustを勉強している。システムプログラミングに若干興味がありますので。

ここに、色々やってみたことをメモしていく。

Rustの環境構築

だいぶ前にやったので忘れたけど、rustup というコマンドをインストールすれば、いい感じにバージョン管理してくれる。大抵は、最新の nightly(開発中のやつ?) を入れておけばいいと思った。

エディタは、VSCodeがよい。Intellijをあまり使わないからだけど、エラーとかもきちんと表示してくれる感じがする。RLSというプラグインをインストールしておけば、いい感じにやってくれる。

cargoというコマンドがNode.jsでいうyarnのようなものなので、色々使っていこう。

フロントエンドをRustでやる

ライブラリとして、フロントエンドの一部を書く

wasm-pack を使う。順を追って説明する。

1. cargo install wasm-pack

wasm-pack というコマンドをインストールする。

このコマンドで、作ったRustのプログラムをWebAssemblyにコンパイルし、その上JavaScriptから呼び出せるよう、モジュール化もしてくれる。型定義も吐かれるので、TypeScriptからも安心して呼べる。

2. プログラムを書く

wasm-bindgen というライブラリを依存に追加し、さらに、crate-type = ["cdylib"] とする。

よくわからんけど、wasm-bindgenはWebAssemblyのためのライブラリで、cdylibはライブラリとして吐き出すってことらしい。

あとは、こんな感じでライブラリを書く。

extern crate wasm_bindgen;

use wasm_bindgen::prelude::*;

#[wasm_bindgen]
extern {
    pub fn alert(s: &str);
}

#[wasm_bindgen]
pub fn greet(name: &str) {
    alert(&format!("Hello, {}!", name));
}

greetという関数を外部に露出している。内部ではJavaScriptalertを呼び出している。

3. ビルドして、JavaScriptから読み込む

コマンドwasm-pack build --scope your.nameを実行すると、pkgというフォルダが生成され、JavaScriptのライブラリが出力される。

JavaScriptからは、普通にimportなどして利用することができる。が、WebAssemblyをいい感じにビルドしてくれるやつが必要。

そこで、webpackを使う。最小限の設定さえしておけば、いい感じにやってくれるので、気にしなくてもよい。Parcel2はなぜかうまくいかなかった。まだ、対応してないのかも。parcel-bundlerは対応してるっぽいが試してない。

フレームワークを使って、Rustで全部書く

cargo-webコマンドとフレームワークyewを使う。

また、色々勉強したら更新します。