以下の内容は Zenn からの転載です。
以前にTauri, Rust, TypeScriptで書いたソースコードを流用してWebアプリにしてみた。
前はPureScript + Halogenで書かれたソースを TypeScript + Rustに書き換えたんだけど、今回もう一度書き換えてReact + TypeScript + Wasm + Rustの構成にする。
作った成果物
https://ak1211.github.io/vite-react-rust-wasm-project/
https://github.com/ak1211/vite-react-rust-wasm-project
開発環境
Windows 11のWSL2環境で実行しています。
|
|
Viteのセットアップ
フロントエンドの開発にはViteを使ったほうが便利でしょ。
プロジェクト名をvite-react-rust-wasm-projectとしてReact + TypeScriptを選択する。
|
|
書かれている通りに進める。
|
|
http://localhost:5173 をCtrl+クリックすることでページを開く。
確認が出来たらCtrl + Cを押してコンソールに戻る。
Rustのセットアップ
https://developer.mozilla.org/ja/docs/WebAssembly/Rust_to_Wasm
Rustはすでにインストール済みなので Install Rust は省略する。
wasm-pack
|
|
WebAssembly パッケージのビルド
|
|
Rust を書いてみよう
wasm/src/lib.rsを書き換える。
|
|
コードを WebAssembly にコンパイルする
とりあえずこれでいいか。
|
|
パッケージのビルド
|
|
パッケージのウェブでの利用
さて、コンパイルされた Wasm モジュールが入手できたので、ブラウザーで動かしてみましょう。 まず index.html というファイルをプロジェクトのルートに作成するところから始めましょう。最終的には以下のようなプロジェクト構造になります。
Vite + TypeScriptの環境なのでこの通りにはいかないので、こうする。
|
|
src/App.tsxを書き換える
wasmをApp.tsxにインポートする。
|
|
初期化関数を呼ぶようにする
|
|
ボタンのonClickを書き換える。
|
|
書き換えるとsrc/App.tsxはこうなる。
|
|
ブラウザーで確認する
|
|
http://localhost:5173 をCtrl+クリックすることでページを開く。
greetボタンを押すと
TypeScriptからWebAssembly経由でRustの関数を呼び出せた。
環境構築はこれでおしまい。
Vite + React + TypeScript + WebAssembly + Rustアプリを作る
アプリのひな形ができたので、あとはTauriアプリの方からソースコードを流用してきて書くだけ。
お互いの界面にちょっとした手間が掛かるくらいで、普通のReact + TypeScript と 普通のRust。
Rustファイルを書き換えたらwasm-pack build --target web
を忘れないように。
TypeScriptファイルを書き換えた場合は何もしなくてもいい。
あとはViteがよしなに更新してくれる。
TypeScriptの型付け
上で出てきているけど、このファイルがTypeScriptとRustとの界面。
|
|
これを元にwasm/pkg/wasm.d.tsファイルが自動的に作られるんだけど、any型ではTypeScriptを使う意味が無くなるので
#[wasm_bindgen(typescript_custom_section)]
を使って手作業で型付けする。
本番環境用のビルド
https://rustwasm.github.io/docs/wasm-pack/commands/build.html
|
|
https://ja.vitejs.dev/guide/build.html
|
|
静的サイトのデプロイ
https://ja.vitejs.dev/guide/static-deploy.html
package.jsonのscriptsの部分をこうして。
|
|
アプリのビルド
アプリをビルドするために、npm run build コマンドを実行します。
1
$ npm run build
デフォルトでは、ビルド結果は dist に置かれます。この dist フォルダを、お好みのプラットフォームにデプロイします。
GitHub Pages
リンクの通りなので省略
完成
(書いていないが)WebアプリケーションにするためにReactRouterとRecoilを追加した。
これでVite + React + TypeScript + WebAssembly + Rust + Recoil + React Router + WebSerialAPIで書いたアプリが完成した。
https://ak1211.github.io/vite-react-rust-wasm-project/
コピペしてください。
例えば東芝テレビリモコンの電源ボタンのコードを入れると
|
|
他にSONYテレビリモコンの電源ボタンのコードを入れると
|
|
これはダイキンエアコンのコード。
|
|
これはパナソニックエアコンのコード。
|
|
これは三菱電機エアコンのコード。
|
|
これは日立エアコンのコード。
|
|
ここからは余談。
赤外線リモコン信号
赤外線リモコン信号の構造はこのページが詳しい。 http://elm-chan.org/docs/ir_format.html
https://ak1211.com/7727/ https://ak1211.com/7586/ https://ak1211.com/7141/
赤外線リモコン信号に興味があるならどうぞ活用してください。