RustでWebAssembly――「Rust and WebAssembly」を体験する:いろんな言語で試す、WebAssembly入門(5)
第5回は、WebAssemblyにおいて最も人気があるとされるRustにおける開発例を紹介します。RustとJavaScriptの関数を相互に呼び出す事例を紹介します。
本連載のサンプルコードをGitHubで公開しています。こちらからダウンロードしてみてください。
RustとWebAssembly
今回は、前回紹介したC/C++と並んでWebAssembly開発の本命の一翼とされる、プログラミング言語Rustによる開発を紹介します。これには、Rust and WebAssemblyワーキンググループが開発するツールやライブラリを利用します。Rust and WebAssemblyによる開発では、標準ライブラリを含めたRustの言語仕様を十分に生かしたWebAssemblyプログラムが作成可能です。
Rustは、C/C++と同様にネイティブコードをターゲットにしたプログラミング言語であるので、その高い効率と高速性を生かした使い方が、真価を発揮しやすいと言えます。また、Rustはメモリ安全が考慮されているので、ダングリングポインタやメモリリークの危険性を極力排除した開発も可能です。連載第1回でも紹介したように、まずは速度が重視される部分をRustが受け持つというのが自然な使われ方でしょう。
本稿では、それを前提にJavaScriptコードとの連携まで含めたRust and WebAssemblyの使い方を紹介していきます。
【補足】ダングリングポインタとメモリリーク
ダングリングポインタとメモリリークは、動的なメモリ利用の際に発生しがちなプログラミング上の問題です。前者は有効な領域を指さないポインタ、後者は確保したメモリの解放漏れをいいます。いずれも、プログラムの動作に重篤な問題を与えますので、安全なプログラムの開発にはこれらを完全に排除する必要があります。
Rust and WebAssemblyとは
Rust and WebAssemblyとは、文字通りRustとWebAssemblyの連携のためのオープンソースプロダクトをリリースするワーキンググループです。主なプロダクトは以下の通りです。本稿では、これらを使ってRustとWebAssemblyの連携を紹介していきます。
- wasm-pack……Rustのコードから.wasmファイルなどを生成するツール
- wasm-bindgen……RustのコードとJavaScriptとの連携のためのライブラリとツール
- wasm-pack-template……wasm-packを使うRustプロジェクトのテンプレート
- create-wasm-app……npm initで使うWebページのテンプレート
Rust and WebAssemblyのプロダクトは、多くのプラットフォームで利用可能です。macOS、Linux、Windowsとプラットフォームを選ばずに利用できます。
Rust and WebAssemblyのための環境を準備する
Rust and WebAssemblyのプロダクトを使うために、以下に挙げるソフトウェアを準備しておきます。
- コードエディタとしてのVisual Studio Code(以降、VSCode)
- Rust(1.30以降)
- Node.js
Rustの概要とインストールについては、@ITの連載「基本からしっかり学ぶRust入門」を参考にしてください(主要な言語仕様も同様です)。Node.jsのバージョンは、公式ドキュメントでも特に言及はありませんが、最新版をインストールしておくのがよいでしょう。Node.jsのインストールは、macOS/Windowsともに公式サイトからインストーラを入手して実施してください。本稿では、Node 18.12.1を使用しました。
wasm-packをインストールする
Copyright © ITmedia, Inc. All Rights Reserved.