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
という関数を外部に露出している。内部ではJavaScriptのalert
を呼び出している。
3. ビルドして、JavaScriptから読み込む
コマンドwasm-pack build --scope your.name
を実行すると、pkg
というフォルダが生成され、JavaScriptのライブラリが出力される。
JavaScriptからは、普通にimportなどして利用することができる。が、WebAssemblyをいい感じにビルドしてくれるやつが必要。
そこで、webpackを使う。最小限の設定さえしておけば、いい感じにやってくれるので、気にしなくてもよい。Parcel2はなぜかうまくいかなかった。まだ、対応してないのかも。parcel-bundlerは対応してるっぽいが試してない。
フレームワークを使って、Rustで全部書く
cargo-web
コマンドとフレームワークyew
を使う。
- 以下のドキュメントを読めば良いでしょう。
また、色々勉強したら更新します。