Rust

RustでWebAssemblyをビルドする手順【2025年最新】

ⓘ本ページはプロモーションが含まれています

お得なお知らせ

スポンサードリンク
AI時代のキャリア構築

プログラミング学習、今日から動き出す

「何から始めるか」で止まっている人こそ、無料説明会や本で自分に合うルートを30分で確定できます。

Enjoy Tech!|月額制でWeb系に強い▶ (Kindle本)ITエンジニアの転職学|後悔しないキャリア戦略▶

▶ AIコーディング環境なら  実践Claude Code入門(Amazon)が実務で即使える入門書です。Amazonベストセラーにも選ばれていますよ。


スポンサードリンク

1. 必要ツールのインストール

ツール 用途 推奨インストールコマンド
rustup Rust コンパイラ・標準ライブラリのバージョン管理 curl https://sh.rustup.rs -sSf \| sh(macOS / Linux)
winget install --id=Rustlang.Rustup(Windows)
wasm‑target (wasm32-unknown-unknown) Rust から直接 Wasm バイナリを生成 rustup target add wasm32-unknown-unknown
Node.js (npm / pnpm) ローカルサーバや npm パッケージの管理 https://nodejs.org/ からインストーラ取得
(pnpm は npm i -g pnpm
Python 簡易 HTTP サーバ(標準ライブラリのみで可) python --version が出れば OK
wasm‑pack Rust → Wasm + JS ラッパーの自動生成ツール bash\ncargo install wasm-pack\n
Trunk Cargo と連携した開発サーバ・HTML ビルド cargo install trunk
binaryen (wasm‑opt) リリースビルド時のサイズ最適化 macOS: brew install binaryen
Ubuntu: sudo apt-get install binaryen
Windows: scoop install binaryen または choco install binaryen

1‑1. wasm‑pack のインストール手順(抜粋)

ポイント
cargo install はグローバルにバイナリを配置します。環境変数 $HOME/.cargo/bin がパスに入っていない場合は手動で追加してください(Windows の場合は「システム環境変数」から)。

1‑2. binaryen / wasm‑opt の Windows インストール例

インストール後は wasm-opt --version でバージョンが表示されれば完了です。


2. プロジェクトの作成と Cargo 設定

2‑1. ライブラリテンプレートの生成

src/lib.rs がエクスポート対象になるので、ここに wasm-bindgen のコードを書きます。

2‑2. Cargo.toml の基本設定

注意
Trunk でバイナリを直接ビルドさせる場合は [[bin]] セクションは不要です。lib.rs が生成物 (hello_wasm.wasm) の入口になるため、[lib] にだけ crate-type = ["cdylib"] を記述します。

2‑3. Trunk 用メタデータ(任意)

この設定があれば、trunk serve 実行時に自動的に index.html がバンドルされます。


3. ビルド手順と選択肢

3‑1. cargo build(低レベルビルド)

生成物は target/wasm32-unknown-unknown/debug/hello_wasm.wasm のみです。
JS ラッパーが必要な場合は別途 wasm-bindgen-cli を呼び出します。

3‑2. wasm-pack build(推奨フロー)

pkg/ ディレクトリに以下が生成されます。

  • hello_wasm_bg.wasm(実体バイナリ)
  • hello_wasm.jshello_wasm_bg.js(JS ラッパー)
  • .d.ts ファイル(TypeScript 用型情報)

3‑3. Trunk を使ったワンコマンド開発サーバ

Trunk は内部的に wasm-pack build --release(デフォルトは debug)を呼び出し、生成された Wasm と HTML を同時に配信します。
開発中の推奨パターンは次のとおりです。

コマンド 用途
cargo build --target wasm32-unknown-unknown ビルドだけ確認したいとき
wasm-pack build npm パッケージとして出力したいとき
trunk serve フロントエンド全体をホットリロードで検証したいとき

4. HTML 側から Wasm を呼び出す例

4‑1. 基本的なインポート(ES モジュール)

init() が Promise を返すため、await(または .then)でロード完了を待つことが重要です。これにより 未初期化エラー を防げます。

4‑2. エラーハンドリングのベストプラクティス

ブラウザコンソールとネットワークタブで 404MIME type エラーが出ていないか確認しましょう。


5. デバッグ・最適化テクニック

5‑1. ソースマップ付きデバッグビルド

Chrome DevTools の Sources タブで *.rs ファイルが直接表示され、ステップ実行や変数監視が可能です。

5‑2. panic 時のスタックトレースを有効化

lib.rs の先頭に以下を追加すると、panic が発生した際に JavaScript コンソールへ Rust のスタックトレースが出力されます。

wasm-pack build --release --features console_error_panic_hook で有効化できます。

5‑3. wasm-opt(binaryen)によるサイズ圧縮

-Oz はコードサイズ最適化モードです。実際の差はプロジェクト規模にもよりますが、30 % 前後の削減 が期待できます。

5‑4. CDN 配信を想定したファイル構成

ファイル 配布先例
hello_wasm_bg.wasm /static/hello_wasm_bg.wasm
hello_wasm.js / *_bg.js 同上(同一ディレクトリ)
*.wasm.map デバッグ用にオプションで配布

本番環境では キャッシュヘッダーContent‑Encoding: gzip/br を有効にすると、さらに転送サイズが削減できます。


6. トラブルシューティングまとめ

症状 主な原因 対策
Failed to load wasm(ステータス 404) ローカルサーバが .wasm の MIME を正しく設定していない Node の serve、Python の http.server、または Trunk が自動で正しいヘッダーを付与
Uncaught (in promise) TypeError: instantiateStreaming failed CORS ポリシー違反やサーバが application/wasm を返さない サーバ側で Content-Type: application/wasm を明示、または npm i -g http-server && http-server -c-1 でテスト
Rust の panic がコンソールに表示されない console_error_panic_hook 未設定 上記 5‑2 を参照しビルドフラグを付与
ビルドが遅い/メモリ不足 デバッグビルドで最適化が無効 --release(または Cargo の [profile.release])を使用

7. 参考情報(公式ドキュメント)

上記は常に最新版が配布されている公式リポジトリです。バージョンアップ情報は GitHub の Release ページや cargo install --list で随時確認してください。


8. まとめ

  1. rustup + wasm32‑unknown‑unknown を導入すれば、Rust 本体の管理が一元化できる。
  2. wasm‑packTrunk はそれぞれ「npm パッケージ化」「開発サーバ」向けに最適化されており、組み合わせるだけでほぼ完結したフローになる。
  3. Windows でも scoop / chocolatey を使えば binaryen が手軽に入手でき、ビルドサイズの圧縮が可能。
  4. デバッグ時は --debugconsole_error_panic_hook、リリース時は wasm-opt -Oz を忘れずに適用すれば、開発効率と本番パフォーマンスを両立できる。

この手順通りに環境構築・ビルド・テスト・最適化まで行えば、Rust の安全性と WebAssembly の高速性を活かしたモダンなフロントエンド開発がすぐに始められます。ぜひ実践してみてください。

スポンサードリンク

お得なお知らせ

スポンサードリンク
AI時代のキャリア構築

プログラミング学習、今日から動き出す

「何から始めるか」で止まっている人こそ、無料説明会や本で自分に合うルートを30分で確定できます。

Enjoy Tech!|月額制でWeb系に強い▶ (Kindle本)ITエンジニアの転職学|後悔しないキャリア戦略▶

▶ AIコーディング環境なら  実践Claude Code入門(Amazon)が実務で即使える入門書です。Amazonベストセラーにも選ばれていますよ。


-Rust