RustでWebAssemblyを使ってみた時の記録


この記事について

プログラミング独学3年目の文系大学生の開発メモ。

なぜWebAssemblyなのか

特に理由はありません(笑)
最近話題になっていると聞いて触ってみました。

なぜRustなのか

これも特に理由なしです。
システムプログラミング言語なのに低レベルだけではなく、色々なアプリケーションを開発するためのライブラリが揃っていると聞いて興味を持ちました。

開発環境 (2021/02/26現在)

Windows10 Education バージョン 20H2 (Windows10 Home バージョン 20H2上のVMware Workstation Player 16仮想マシン)
Visual Studio Code
gcc 8.1.0
node 11.13.0
npm 6.9.0
rustc 1.50.0
cargo 1.50.0

開発手順

MDNに掲載されているRust用のWebAssembly入門に沿ってやります。
WebAssembly自体をもっと知りたいという方はこちらから確認してください。

開発メモ

  • Rustをインストール際にC++のBuild Toolsのインストールを促された。 これを無視してやったらcargo install wasm-packするときにエラーが出た。 普段はVisual Studio Communityを使うことがほぼ無かったので、インストーラーを入れ、C++のデスクトップ開発用のツールを一通り入れたらエラーは治った。 (今回とは関係ないが、gccを入れておかないとエラーが出る場合もあるらしい。)
  • Rustのコード内の#[wasm_bindgen]という記述はアトリビュートと呼ばれ、直下の文のみを修飾してくれるらしい。 あくまで直下のみなので、何度も記述されてるからと言って2個目以降を省いてはダメ。
  • Rustにおいて「クレート」とは他言語でいうライブラリやパッケージのこと。Rustの特徴として、クレートを芋づる式で追って解析していくため、初回ビルド時のみ時間がかかる。
  • Rustにはクラスは存在しないけどstruct(構造体)にはimpl(インプリメンテーション)という特殊な構文が存在し、構造体にメソッドをつけることが可能。 だから、実質オブジェクト指向に開発できる。
  • npmでpublicに公開するとき、package.jsonのnameに@xxxを含む記述があった場合、組織を予め用意しておく必要がある。

参考