コンテンツにスキップ

WebAssembly (Wasm)

WebAssembly ↗(略称:Wasm)は、Rust、Go、Cなどの言語を、ウェブブラウザ ↗、Cloudflare Workers、その他のWebAssemblyランタイムを含むさまざまな環境で実行できるバイナリ形式にコンパイルすることを可能にします。

WorkersおよびCloudflare Pages Functions ↗では、WebAssemblyを使用して以下のことができます:

  • WebAssembly.instantiate()を介して、JavaScript以外の言語で書かれたコードを実行します。
  • RustでCloudflare Worker全体を書き、WorkersのJavaScript APIをRustコードから直接利用できるバインディングを使用します。

ほとんどのプログラミング言語はWasmにコンパイル可能ですが、言語やコンパイラによってサポートは異なります。以下の言語に関するガイドが利用可能です:

サポートされている提案

WebAssemblyは急速に進化している標準のセットであり、多くの提案されたAPI ↗がさまざまな開発段階にあります。一般的に、WorkersはGoogle Chromeで利用可能な機能の同じセットをサポートしています。

SIMD

WorkersではSIMDがサポートされています。WebAssemblyでのSIMDの使用に関する詳細は、Fast, parallel applications with WebAssembly SIMD ↗を参照してください。

スレッド

Workersではスレッドは使用できません。各Workerは単一のスレッドで実行され、Web Worker ↗ APIはサポートされていません。

バイナリサイズ

WebAssemblyにコンパイルするには、追加のランタイム依存関係を含める必要があることがよくあります。その結果、WebAssemblyを使用するWorkersは、JavaScriptで書かれた同等のWorkerよりも通常大きくなります。Workerが大きくなるほど、Workerの起動にかかる時間が長くなる可能性があります。詳細については、Worker startup time ↗を参照してください。Wasmバイナリのサイズを最適化するために、wasm-opt ↗のようなツールの使用をお勧めします。

WebAssemblyシステムインターフェース(WASI)

WebAssembly System Interface ↗(略称:WASI)は、ネットワーキング、ファイルシステムアクセスなどのための一連の基盤となるシステムコールを標準化するWebAssemblyのモジュラーシステムインターフェースです。アプリケーションは、ホスト環境やオペレーティングシステムに関係なく同一の動作をするWebAssemblyシステムインターフェースに依存できます。

WASIはWasmよりも早く、急速に進化している標準のセットです。WASIのサポートはCloudflare Workersで実験的であり、いくつかのシステムコールのみが実装されています。WASIのオープンソース実装 ↗や、WorkersでのWASIの使用を示すブログ記事 ↗を参照してください。

WebAssemblyに関するリソース