WebAssembly とは?

WebAssembly (Wasm) は、ネイティブに近い速度で実行可能な仮想命令セットアーキテクチャ (ISA) です。Wasm の大きなメリットのひとつに、独自のビルトイン隔離技術を使用してシステムの安全性を維持できることが挙げられます。

これは実際に何を意味するのでしょうか。具体的には、WebAssembly にコンパイル可能な任意のソース言語 (または JavaScript のようにインタプリタが WebAssembly にコンパイル可能なインタプリタ型言語) で開発者がプログラムを作成できます。そして多様なシステムでこれらのコンパイルされたバイナリを安全性に優れた方法で実行することができます。

開発者にとっての Wasm のメリット

WebAssembly は特定のプログラミング言語に縛られないため、以下を含むさまざまなメリットを Web 開発にもたらし、開発者エクスペリエンスの向上に貢献します。

  • 構築するアプリケーションに最適な言語を選べる柔軟性が得られます。 

  • 開発者の専門性に合わせて言語を選べます。複数の開発チームを抱え、チーム間で特定の言語のスキルに差がある組織にとって、これは大きなポイントです。

  • 異なるプログラミング言語で記述された既存のコードベースを再利用し、WebAssembly にコンパイルできます。

  • 幅広いツールやライブラリ、フレームワークのエコシステムにアクセスできます。さらに、コミュニティ主導のイニシアチブやオープンソースプロジェクトが存在し、エコシステムの継続的な成長に貢献しながら開発者に豊富なリソースとオプションを提供しています。

ブラウザ外で WebAssembly を使用する

当初 WebAssembly は、画像編集プログラムやビデオゲームなどパフォーマンス上重要なコードや負荷の大きいワークロードをブラウザで実行できるようにすることを目的に、Web ブラウザアプリケーション向けに開発されました。しかし開発者たちはブラウザ外でも WebAssembly が非常に便利なことにすぐに気づきました。例えば WebAssembly がサーバーサイド開発で利用されるケースが増えています。 

上記の利点に加え、ブラウザ外で WebAssembly を使用することで、以下のメリットも得られます。

  • パフォーマンスの向上 : WebAssembly は直接マシンコードにコンパイルできます。従って、高速な実行を要するエッジアプリケーションを開発したり、ワークロードを運用している開発者にとって、便利な選択肢です。

  • セキュリティの強化 : 多くの場合、WebAssembly のランタイムは WebAssembly モジュールを隔離するサンドボックスを強制し、他のプログラムへの干渉や機密性の高いシステムリソースへのアクセスを防ぎます。  また、WebAssembly モジュールによるメモリへの影響は限られているため、データの破損やメモリリークが発生する可能性が低いというメリットもあります。

WebAssembly ランタイム

ランタイムは WebAssembly を動かすエンジンとして考えることができ、コンピューターやサーバーが理解できる言語にコードを変換します。現在、多数のランタイムが利用可能ですが、それぞれに強みがあり、異なるユースケースをサポートしています。以下は特に人気の高いランタイムの例です。

  • Wasmtime : Bytecode Alliance によって作成された Wasmtime は、パフォーマンスと安全性に優れたオープンソースのランタイムです。Wasmtime は、ブラウザの外で Wasm モジュールを実行するための規格である WASI (WebAssembly System Interface) に準拠しています。Wasmtime は複数のプログラミング言語をサポートし、幅広いユースケースに適しています。

  • ブラウザランタイム : 名前が示すとおり、このランタイムは Web ブラウザ内で機能するために設計されています。ブラウザ内で機能するランタイムの例として、V8SpiderMonkey が挙げられます。前者は Google Chrome で、後者は Mozilla Firefox で使用されている JavaScript と WebAssembly のエンジンです。 

WebAssembly エコシステムにおける Fastly の役割

私たちは WebAssembly と Bytecode Alliance との初期の共同作業を通じて Fastly の分散型エッジプラットフォームの土台を築きました。Fastly のサーバーレス・コンピューティング・プラットフォーム Compute は Rust や JavaScript、Go など別の言語からコンパイルされた WebAssembly プログラムを実行しています。WebAssembly (Wasm) 上での構築は、コラボレーションを促進するオープンソース標準に対する Fastly のコミットメントに沿うものです。このようなコラボレーションの例のひとつが、WebAssembly 向けの高速かつ安全なランタイム Wasmtime です。他の Bytecode Alliance メンバーと共に共通の標準を使用する、より安全でパフォーマンスが高いコンピューティングエコシステムを構築するなか、WebAsssembly を基盤に持つことは、Fastly のエッジ・コンピューティング・ソリューションに今後大きなメリットをもたらすと私たちは確信しています。

ぜひ Fastly の分散型エッジプラットフォーム Computeお試しください。また、役立つ情報が満載の Developer Hub もご活用ください。Fastly の Senior Principal Engineer を務め、Bytecode Alliance の共同設立者でもある Lin Clark が Fastly における WebAssembly の未来について語るこちらの動画もご覧ください。