__aki_nikki__

分子分光学の研究をしている大学院生の日記です

RustでWebAssemblyに入門する(1)

RustでWebAssemblyに入門するチュートリアルRust 🦀 and WebAssemblyをやってみました。

WebAssemblyには以前から興味があったのですが、JavaScriptの知識が必要でそこがハードルになってしまっていましたが、とある事情でJavaScriptを勉強することがあったため、"今だ"と思ってやってみることにしました。

Setup

ここでは必要なツールのインストールを行う。

  • 現在の自分の環境
    • OS: Arch Linux x86_64
    • rustc: 1.70.0
    • cargo: 1.70.0
    • Node: 20.8.0
    • npm: 10.2.0

基本的なRustの環境とNode.jsの環境はすでに入っていたので、wasm-pack,cargo-generateを導入した。導入はcargo installより行います。ソースコードをダウンロードしてビルドするので、ちょっと時間がかかりました。

Hello,World!

ここでは、とりあえずプロジェクトを作成して、かんたんなWebAssemblyのプログラムを動かします。今回用いるのはwasm-packで、これは、RustからWebAssemblyにコンパイルするとともにJavaScriptもしくはTypeScriptのグルーコードも生成してくれます。

ここまでは、基本的には問題なく進めることができましたが、最後のnpm run startでサーバーを建てようとしたときにOpenSSLのエラーが出てサーバーを建てられませんでした。

これを調べると、とりあえずでよければOpenSSLのレガシーモードで実行すれば良いらしいのでpackage.jsonの"script"の"start"のところにNODE_OPTIONS='--openssl-legacy-provider'を追加しました。

"scripts": {
    "build": "webpack --config webpack.config.js",
    "start": "NODE_OPTIONS='--openssl-legacy-provider' webpack-dev-server"
  },

これでnpm run start でサーバーが建つようになって無事表示ができました。

Rules of Conway's Game of Life

ここではライフゲームのルールが述べられていました。

ここまで全体の感想

慣れないJavaScriptが大変でした。特にNode.js周りがしんどかったです。