エッジでコードを動かしたいならWebAssemblyを選びなさい

「JavaScriptはブラウザで動くもの」——長い間そう思われていました。しかしWebAssembly(Wasm)の登場により、その常識は崩れつつあります。特にサーバーサイドやエッジでのWasm活用が2024〜2025年にかけて急速に広がっています。Wasmをブラウザの外で動かすための仕様「WASI(WebAssembly System Interface)」が整備され、コンテナの代替となりうる実行環境として注目されています。

Wasmをたとえで説明すると「万能翻訳機を持つ旅行者」のようなものです。どの国(OS・CPU)に行っても、その場で最適な言語(機械語)に翻訳して話せる——つまり「Write Once, Run Anywhere」をコンテナよりも軽量に実現する技術です。起動時間はミリ秒以下、メモリフットプリントは数MBというケースも珍しくありません。

新人エンジニアI:「エッジでコードを動かしたいんですが、Dockerコンテナだと重すぎて…」
シニアエンジニアJ:「それ、Wasmが向いてるケースだよ。Wasmモジュールなら起動がコンテナの100倍速いこともある」
I:「どんな言語で書けばいいんですか?」
J:「RustかC/C++が一番相性いいけど、最近はGoやPythonもWasmにコンパイルできるよ」

まずRustでシンプルなWasmモジュールを作ってみましょう。

# Rustのインストール(未インストールの場合)
curl --proto =https --tlsv1.2 -sSf https://sh.rustup.rs | sh

# WASIターゲットを追加
rustup target add wasm32-wasi

# プロジェクト作成
cargo new --bin hello-wasm
cd hello-wasm

src/main.rs に以下を書きます。

fn main() {
    println!("Hello from WebAssembly!");
}

次にWasmにコンパイルして実行します。

# WASIターゲットにコンパイル
cargo build --target wasm32-wasi --release

# wasmtimeランタイムでそのまま実行
wasmtime target/wasm32-wasi/release/hello-wasm.wasm

このwasmバイナリはLinuxでも macOSでもWindowsでも、wasmtimeさえあれば同じように動きます。さらにKubernetesでWasmを動かすための「Spin」(Fermyon製)や、Cloudflare Workersのようなエッジプラットフォームでも同じコードが動きます。コンテナよりも起動が速く、セキュリティサンドボックスが強固なWasm——次世代のサーバーサイド実行環境として、今から触っておく価値は十分あります。

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です