スポンサーリンク
Rust

WebAssembly(WASM)とは何か?~Rust と一緒に未来を見据える実践入門ガイド~

Rust
この記事は約7分で読めます。

WebAssembly(WASM)は、近年 Web 開発や高速処理の文脈で急速に存在感を増している技術です。 「ブラウザで高速に動く」「Rust と相性が良い」といった話を耳にしたことがある人も多いでしょう。

この記事では、WASM の基本から将来性、Rust を使った実践方法、そして私自身が感じた「Python の WASM が遅かった理由」まで、まとめて紹介します。

WASM の読み方

「ワズム」または 「ウェブアセンブリ」と読みます。 海外では “Wasm(ワズム)” が一般的です。

WASM って何?

WebAssembly(WASM)は、ブラウザで高速に動作するバイナリ形式の実行環境です。

JavaScript の限界を補うために作られ、次の特徴があります。

  • 高速(ネイティブアプリに近い性能)
  • 安全(サンドボックスで実行)
  • ポータブル(OS・CPU に依存しない)
  • 多言語対応(Rust、C/C++、Go、C#、Python など)

特に「重い処理をブラウザで動かしたい」場合に強力です。

WASM の将来性

WASM は単なる「Web の高速化技術」ではなく、汎用ランタイムとして進化しています。

1. Web の外でも使われ始めている

  • Cloudflare Workers(エッジコンピューティング)
  • Fastly Compute@Edge
  • サーバーレス実行環境
  • IoT / 組み込み

軽量で安全な「次世代コンテナ」として注目されています。

2. 言語を選ばない

Rust、C/C++、Go、C#、Python など、多くの言語が WASM に対応。 将来的には 「WASM にコンパイルすればどこでも動く」世界が現実になります。

3. AI と相性が良い

ブラウザでの AI 推論(画像分類、音声認識、背景ぼかしなど)が増加。 WASM + SIMD + マルチスレッドで高速化が進んでいます。

4. 大手企業が採用

  • Figma
  • Adobe(Photoshop Web 版)
  • Google / Microsoft
  • Shopify
  • Cloudflare

すでに実戦投入されており、今後も採用が広がると予想されます。

WASM におすすめの言語は? → Rust が最有力

WASM と相性が良い言語はいくつかありますが、Rust が頭ひとつ抜けています

Rust が選ばれる理由

  • メモリ安全(WASM の設計思想と一致)
  • 高速(C/C++ に匹敵)
  • WASM との統合が成熟(wasm-bindgen / wasm-pack)
  • バイナリが小さい
  • 最適化が効きやすい

特に「高速処理 × 安全性 × Web」という組み合わせでは、Rust が最適解になりつつあります。

WASM の環境構築は難しい?費用はかかる?

結論としては 簡単で、無料です。

■ よくある疑問

Q. WASM の環境構築って難しいのでは?

A. Rust が入っていれば、3コマンドで終わります。

Q. 有料ツールが必要?

A. すべて無料です。Rust も wasm-pack もオープンソースです。

Q. 特別な IDE やクラウド環境が必要?

A. 不要です。Windows / macOS / Linux どれでも動きます。

■ 実際に必要なもの

  • Rust(無料)
  • wasm-pack(無料)
  • Node.js(簡易サーバ用、無料)

これだけで、WASM の開発環境は完成します。

WASM で Rust を使う方法(最小構成)

Rust で WASM を使う環境は驚くほど簡単に作れます。

1. WASM ターゲットを追加

rustup target add wasm32-unknown-unknown

2. wasm-pack をインストール

cargo install wasm-pack

※結構時間かかります。(5分ぐらい)

3. プロジェクトを作成

cargo new wasm-sample --lib
cd wasm-sample

4. wasm-bindgen を追加

Cargo.tomlに追加します。

[package]
name = "wasm-sample"
version = "0.1.0"
edition = "2024"

[lib]
crate-type = ["cdylib", "rlib"]

[dependencies]
wasm-bindgen = "0.2"
5. Rust コードを書く

src/lib.rs

pub fn add(a: i32, b: i32) -> i32 {
    a + b
}

fn main() {
    println!("{}", add(2, 3));
}

6. ビルド

wasm-pack build --target web

7. HTML から呼び出す

プロジェクト直下に index.html を作成:

<!DOCTYPE html>
<html lang="ja">
<body>
  <h1>Rust + WebAssembly Sample</h1>
  <div id="result"></div>

<script type="module">
  import init, { add } from "./pkg/wasm_sample.js";

  async function run() {
    await init();  // ← これが超重要
    const result = add(10, 32);
    document.getElementById("result").textContent = result;
  }
  run();
</script>

</body>
</html>

8. 簡易サーバで開く

Node.jsが入っていれば、ターミナルで以下を実行すればURLが表示されます。
※Node.jsがインストールされていない場合は以下のサイトでインストールしてください。

https://nodejs.org/ja/download
※Windows インストーラ(.msi)でインストール

npx serve .

URLをクリックするとPGが実行されます。

WASM のパフォーマンスは本当に速いのか

結論として、Rust + WASM は本当に速いです。 ただし、WASM を使う言語や仕組みによって体感速度は大きく変わります。

私の体験:Python(PyScript / Pyodide)は正直かなり遅かった

以前、WASM に興味を持ったときに Python を WASM で動かしてみたことがあります。 PyScript(Pyodide)を使ったのですが、正直なところ かなり遅いという印象でした。

  • 起動が重い
  • 実行も遅い
  • メモリ使用量も多い

この記事にも書きました。

この経験から「WASM って遅いのでは?」と思ってしまいがちです。

しかし、これは Python 側の構造的な理由であって、WASM 自体の性能とは別問題です。

なぜ Python WASM は遅いのか

Python を WASM で動かす場合、仕組みはこうなっています。

  • CPython(インタプリタ)を丸ごと WASM に移植
  • NumPy などのライブラリも WASM 化
  • 起動時に数十 MB を読み込む
  • 実行はインタプリタ方式のまま

つまり、WASM の上で Python インタプリタを動かしているだけです。

そのため:

  • 起動が重い
  • 実行速度も Python のインタプリタ性能に依存
  • ネイティブに近い速度は出ない

結果として「WASM が遅い」という誤解が生まれます。

Rust + WASM が速い理由

Rust は Python と違い、WASM に直接コンパイルされる言語です。

  • インタプリタなし
  • バイナリが軽い
  • 最適化が効く
  • メモリ管理が安全
  • JS との橋渡しが高速

WASM の性能を 最大限に引き出せるのが Rust の強みです。

Python WASM と Rust WASM の違い(体感イメージ)

技術実行速度起動特徴
Rust + WASM速い(ネイティブ級)速い最適化・軽量・高速
C/C++ + WASM速い速い高速処理向け
PyScript(Pyodide)遅い重いインタプリタ方式
JavaScript中速速いUI 向け

「PyScript が遅い」と感じた、 Python を WASM で動かす方式の限界であって、 WASM 自体の性能とは関係ありません。

まとめ

  • WASM の読み方は「ワズム」
  • WASM はブラウザで高速に動くバイナリ形式
  • 将来性は高く、Web を超えて広がっている
  • Rust は WASM と最も相性が良い言語
  • WASM の環境構築は簡単で無料
  • Python WASM が遅いのは Python の構造上の問題で、WASM 自体は高速

コメント

タイトルとURLをコピーしました