テックニュース STACK
GAFAM ロボット・自動化

Dockerが消える? — WebAssemblyがサーバーサイドを完全に飲み込む未来が見えてきた

はじめに — WebAssemblyはブラウザだけのものではなくなった

WebAssembly(Wasm)は、2017年に主要ブラウザでサポートされて以来、ウェブアプリケーションの高速化技術として認知されてきた。Figma、Google Earth、Photoshop Webなど、ブラウザ上でネイティブに近いパフォーマンスを実現するアプリケーションの裏側で、Wasmは静かに実力を証明してきた。

しかし2026年、Wasmの活躍の場はブラウザを大きく超えている。サーバーサイド、エッジコンピューティング、IoTデバイス、さらにはブロックチェーンのスマートコントラクト実行環境まで、あらゆる場所でWasmランタイムが採用されつつある。Docker共同創業者のSolomon Hykes氏が2019年に述べた「もしWasmが2008年に存在していたら、Dockerを作る必要はなかっただろう」という言葉が、ようやく現実味を帯びてきたのだ。

本記事では、サーバーサイドWasmの最新動向を技術的に深掘りし、コンテナ技術との比較、実際の導入事例、そして今後の展望を考察する。

WASIの進化 — Preview 2からPreview 3へ

サーバーサイドWasmの普及における最大のボトルネックは、標準化だった。ブラウザ上のWasmはJavaScript APIを通じてシステムリソースにアクセスするが、ブラウザ外の環境ではファイルシステム、ネットワーク、乱数生成などのシステムインターフェースが必要になる。これを標準化するのがWASI(WebAssembly System Interface)だ。

2025年に正式リリースされたWASI Preview 2は、「Component Model」という概念を導入し、Wasmモジュール間のインターフェースを型安全に定義できるようになった。WIT(Wasm Interface Type)というインターフェース定義言語により、異なるプログラミング言語で書かれたWasmコンポーネントが相互運用可能になったのだ。

例えば、Rustで書かれたHTTPサーバーコンポーネントと、Pythonで書かれたビジネスロジックコンポーネントを、WITインターフェースを通じて組み合わせることができる。各コンポーネントは独立してコンパイル・テスト・デプロイ可能で、マイクロサービスアーキテクチャの新しい形として注目されている。

2026年に入り、WASI Preview 3の策定が進んでいる。Preview 3では非同期I/Oのネイティブサポートが追加される予定で、これが実現すれば、高スループットなWebサーバーの構築がWasm上で完全に可能になる。現状のPreview 2では同期I/Oが前提であり、大量の同時接続を処理するサーバーアプリケーションにはまだ制約がある。

主要Wasmランタイムの比較

サーバーサイドWasmを実行するランタイムは、2026年時点で複数の選択肢がある。主要なものを比較しよう。

Wasmtime

Bytecode Alliance(Mozilla、Fastly、Intel、Red Hatなどが参加)が開発するリファレンス実装的なランタイム。WASI Preview 2を最も忠実に実装しており、仕様準拠度はトップだ。Craneliftコンパイラバックエンドにより、JITコンパイルとAOT(Ahead-of-Time)コンパイルの両方をサポートする。起動時間は約1ミリ秒と非常に高速で、サーバーレス環境でのコールドスタート問題を事実上解消する。

Wasmer

エッジコンピューティングとパッケージ管理に注力するランタイム。独自のパッケージレジストリ「WAPM」を運営し、Wasmモジュールをnpmパッケージのように配布・再利用できる。SINGLEPASSコンパイラにより、コンパイル速度を最優先した最適化が可能で、エッジでの短寿命なリクエスト処理に適している。また、WasmerはPHP、Python、Ruby、JavaScriptなど多数の言語をWasm上で実行するプロジェクトを推進しており、既存のスクリプト言語をWasmサンドボックス内で安全に実行するユースケースを切り開いている。

WasmEdge

CNCF(Cloud Native Computing Foundation)のSandboxプロジェクトとして開発されるランタイム。Kubernetes、Docker、Podmanとの統合に注力しており、既存のクラウドネイティブエコシステムとの親和性が最も高い。LLM推論のWasm上での実行にも対応しており、エッジでの小型LLM推論という野心的なユースケースを実現している。

Spin(Fermyon)

厳密にはランタイムではなくフレームワークだが、サーバーサイドWasmの開発体験として最も洗練されている。Wasmtimeをベースに、HTTPリクエストハンドラーの定義、Key-Valueストア、SQLiteデータベースへのアクセスなどを宣言的に設定できる。Spin CLIを使えば、ローカル開発からFermyon Cloudへのデプロイまで、一貫したワークフローで開発を進められる。Next.jsのサーバーレスファンクションに近い開発体験で、Wasm特有の複雑さを大幅に抽象化している。

コンテナ vs Wasm — 起動時間とリソース効率

サーバーサイドWasmの最大の利点は、コンテナと比較した際の起動時間とリソース効率だ。具体的なベンチマークデータを見てみよう。

Dockerコンテナの起動時間は、最小構成のAlpine Linuxベースでも100〜300ミリ秒程度かかる。アプリケーションの初期化処理を含めると、実際のリクエスト処理開始まで1〜数秒を要することが一般的だ。一方、Wasmモジュールの起動時間は1〜10ミリ秒程度で、コンテナの数十倍から数百倍高速だ。

メモリ使用量にも大きな差がある。最小構成のDockerコンテナでも50MB程度のメモリを消費するが、Wasmモジュールは数MB程度で動作する。同一サーバー上で同時に実行できるインスタンス数が桁違いに多くなるため、サーバーリソースの効率的な活用が可能だ。

セキュリティ面でもWasmは優位性がある。Wasmは設計上サンドボックス化されており、モジュールがアクセスできるシステムリソースをホスト側で厳密に制御できる。Capability-basedセキュリティモデルにより、明示的に許可されたリソースにのみアクセスが可能だ。コンテナのセキュリティがLinuxカーネルのnamespace・cgroupに依存しているのに対し、Wasmのサンドボックスは言語レベルで保証されている。

実際の導入事例

サーバーサイドWasmは、すでに多くの企業で本番運用されている。代表的な事例を紹介しよう。

Fastly Compute

CDN大手のFastlyは、エッジコンピューティングプラットフォーム「Compute」でWasmを全面的に採用している。世界中のPOP(Point of Presence)で、ユーザーに最も近いサーバーがWasmモジュールを実行し、超低レイテンシーのレスポンスを実現する。Wasmの高速起動特性により、コールドスタートの遅延を人間には知覚できない1ミリ秒以下に抑えている。

Shopify Functions

Eコマース大手のShopifyは、カスタマイズロジックの実行環境としてWasmを採用している。マーチャントが独自の割引ルールや配送ロジックを定義する「Shopify Functions」は、Wasmサンドボックス内で実行される。これにより、第三者が提供するコードを安全に実行しつつ、高速なレスポンスを維持できている。

Cloudflare Workers

Cloudflare Workersは、V8 Isolates(JavaScriptエンジン)をベースとしているが、Wasmもサポートしており、RustやC++で書かれたパフォーマンスクリティカルなロジックをWasmとしてデプロイできる。画像処理、暗号化処理、JSONパースなどの計算集約的なタスクでは、JavaScriptと比較して2〜10倍のパフォーマンス向上が報告されている。

開発言語とWasm — 誰がWasmを書くべきか

サーバーサイドWasmの開発言語として最もサポートが充実しているのはRustだ。Rustのコンパイラはwasm32-wasiターゲットをネイティブサポートしており、標準ライブラリの大部分がWASI上で動作する。型安全性とメモリ安全性を保証するRustの特性は、サンドボックス実行されるWasmモジュールとの相性が抜群だ。

Go言語もWASIサポートを公式に追加しており、Go 1.22以降ではwasip2ターゲットが利用可能だ。ただし、Goランタイム自体のサイズが大きいため、生成されるWasmバイナリも数MBと比較的大きくなる。サーバーレス環境ではバイナリサイズがコールドスタート時間に影響するため、この点はデメリットだ。

C/C++は当然ながらWasmへのコンパイルが可能だが、メモリ安全性の保証がないため、セキュリティ面ではRustに劣る。既存のC/C++ライブラリをWasm化して再利用するユースケースでは依然として重要な選択肢だ。

PythonやJavaScriptなどのスクリプト言語は、インタプリタ自体をWasm化する形で対応している。CPython for WasmやQuickJS(JavaScript Engine)for Wasmがその例だ。パフォーマンスはネイティブと比較すると劣るが、既存のコード資産を活用できるメリットは大きい。

課題と限界 — Wasmは万能薬ではない

サーバーサイドWasmの可能性は大きいが、現時点では明確な課題も存在する。

第一に、エコシステムの成熟度だ。コンテナエコシステム(Docker、Kubernetes、Helm、Prometheus等)は10年以上の歴史があり、ツールチェーン、ベストプラクティス、人材の厚みがある。Wasmエコシステムはまだ発展途上であり、デバッグツール、モニタリング、CI/CDパイプラインの整備が不十分だ。

第二に、ステートフルなアプリケーションへの対応だ。Wasmモジュールは基本的にステートレスに設計されており、データベース接続プールやインメモリキャッシュのような長期的な状態を保持するには工夫が必要だ。WASI Preview 3で非同期I/Oが標準化されれば改善が見込まれるが、現状ではまだ制約がある。

第三に、学習コストだ。特にRust+Wasm+WASIの組み合わせは、それぞれ単独でも学習曲線が急峻であり、3つを同時に習得するのはハードルが高い。開発者の採用・教育面でのコストは無視できない。

まとめ — Wasmはコンテナの「置き換え」ではなく「補完」

サーバーサイドWasmは、コンテナ技術を完全に置き換えるものではない。ステートフルなアプリケーション、複雑なミドルウェア構成、既存のコンテナエコシステムとの統合が必要なケースでは、引き続きDockerとKubernetesが最適解だ。

一方で、エッジコンピューティング、サーバーレスファンクション、プラグインシステム、マルチテナント環境でのサンドボックス実行など、起動速度とセキュリティが重要なユースケースでは、Wasmが最適な選択肢になりつつある。

開発者としてのアクションは明確だ。まずはFermyon Spinで小さなHTTPサービスを構築し、Wasmの開発体験を自分の手で確かめること。そして、既存のプロジェクトでWasmが適合するポイントがないか評価すること。サーバーサイドWasmの波は確実に来ている。その波に乗る準備を、今から始めよう。