ブログ | CTO オフィス

WebAssembly を気にするべき理由

オスカー・スペンサー サムネイル
オスカー・スペンサー
2024年10月2日公開

私たちの周りではテクノロジーが急速に変化しています。開発者や技術愛好家の間で WebAssembly (略して Wasm) が話題になっていると聞いたことがあるかもしれません。 しかし、WebAssembly とは一体何なのでしょうか。また、WebAssembly がなぜ注目に値するほど重要なのでしょうか。 さあ始めましょう。

WebAssembly とは何ですか?

WebAssembly は基本的にバイナリ命令セットです。 これは、x86 や ARM など、聞いたことがあるアセンブリ言語に似ていますが、いくつかの新しい特性とセキュリティ保証が備わっています。 C や Rust などのプログラミング言語でコードを記述し、そのコードを WebAssembly アーティファクトにコンパイルできます。 Wasm は当初 Web 向けに作成されたため、ネイティブに近い速度で Web 上で高性能アプリケーションを実行できることが大きな魅力でしたが、現在では WebAssembly はブラウザー以外でも広く採用されています。

Wasm が他のコンパイラ ターゲットと異なる点の 1 つは、その移植性です。 WebAssembly コードは、基盤となるアーキテクチャに関係なく、ランタイムがあればどのプラットフォームでも実行できます。 つまり、開発者はコードを一度記述すれば、Windows、macOS、Linux、モバイル オペレーティング システム、ブラウザー、さらには電球など、あらゆる場所で実行できるようになります。

WebAssembly は安全ですか?

特に私たちが現在生きているデジタル世界では、セキュリティは絶対に最も重要です。 そのため、WebAssembly はセキュリティを中核的な設計目標として作成されました。 少し時間を取って、Web ブラウザが何をするのか考えてみましょう。 Web ページにアクセスすると、ブラウザは未知の信頼できないコードをダウンロードして実行します。よく考えてみると、これは非常に恐ろしいことです。 悪意のあるコードからユーザーとデバイスを保護するのはブラウザの役割であり、まさにその考え方が WebAssembly に組み込まれています。

  1. サンドボックス: これにより、WebAssembly コードがホスト環境から分離され、不正なデータにアクセスしたり、コードが実行されている場所に関する情報を特定したりすることが防止されます。
  2. デフォルトでアクセスを拒否: WebAssembly には非常に厳格なデフォルトで拒否のセキュリティ ポリシーがあり、明示的な許可なしにシステム リソースにアクセスすることはできません。 これは、システム時間などの単純なリソースにまで及びます。Wasm コードと明示的に共有されない限り、まったく利用できません。
  3. メモリ境界: 実行中の各 WebAssembly インスタンスは、他の WebAssembly インスタンスやホスト メモリから完全に分離された、それ自身では参照できないメモリ チャンクを取得します。

WebAssembly は高速ですか?

WebAssembly は高速になるように設計されています。 JavaScript と比較すると、Wasm コードは JavaScript コードが解析される前にデコードされ、実行を開始できます。 ブラウザでの新しいエクスペリエンスを実現するだけでなく、移植性とセキュリティの保証により、ブラウザ外でもネイティブに近いパフォーマンスを提供します。

なぜ気にする必要があるのでしょうか?

JavaScript を置き換えることが目的ではありません。 これら 2 つの技術は補完的なものであり、競合するのではなく互いに適合するように設計されています。 JavaScript は Web アプリの動的かつインタラクティブな部分には依然として必要ですが、Wasm は計算コストの高いタスクに多く使用されています。

WebAssembly コードはランタイム内で実行されるため、Web アプリケーションでも、エッジやサーバー上で実行されるアプリケーションでも、既存のアプリケーションに簡単に組み込むことができます。 これにより、ほぼすべての言語で記述されたコードや、サードパーティの信頼できないコードを使用してアプリケーションを拡張できるようになります。 これにより、WebAssembly は、コミュニティ メンバーや顧客によって提供されたコードをアプリケーション内で安全に実行できるため、プラグイン システムに最適です。 WebAssembly の優れたセキュリティ モデルにより、これらすべてが可能になります。

WebAssembly は効率的です

WebAssembly はサーバーレス コンピューティングに大きな衝撃を与えました。 コンテナと比較すると、Wasm モジュールは非常に小さく、生成されるモジュールのほとんどは数キロバイトまたは 1 桁のメガバイト程度ですが、コンテナは数百メガバイトまたは数ギガバイトになることもあります。 Wasm は、ストレージ サイズだけでなく、有名な「コールド スタート」問題も解決します。Wasm コードはマイクロ秒単位で実行を開始できるため、リクエストにすばやく応答するためにコードを実行したままにしておく必要がありません。 リクエストを受信したときに、レイテンシにほとんど影響を与えずに Wasm インスタンスを起動できます。 つまり、WebAssembly ベースのシステムは、トラフィックがない場合にはゼロまでスケールダウンできます。これは、自然と銀行口座の両方にとって恵みです。

WebAssembly は構成可能です

私の意見では、本当のゲームチェンジャーは WebAssembly コンポーネント モデルです。 以下の機能により、開発者がソフトウェアを構築および構成する方法が根本的に変わります。

  1. エコシステム間のアクセス: Go の暗号化ライブラリ、Rust の JSON シリアライザー、Python の数値計算ユーティリティが必要ですか? 問題ない。 コンポーネント モデルを使用すると、ほぼすべての言語エコシステムからソフトウェアを選択し、すべて同じ言語で記述されたネイティブ ライブラリであるかのようにそれらを組み合わせることができます。
  2. 開発の柔軟性: 組織内のさまざまなチームが、仕事に最適なツールを選択できます。 チームの成果物が完全なアプリケーションにシームレスにリンクされることを確信しながら、専門知識とプロジェクト要件を満たすプログラミング言語とソフトウェア スタックを選択できます。

簡単に言えば、開発者は WebAssembly コードを生成できる任意の言語でソフトウェア コンポーネントを構築し、それらを 1 つのアプリケーションに簡単に構成できます。

WebAssembly は注目に値するテクノロジーです。 アプリケーションに新しい機能を追加したい開発者でも、スケーラブルでコスト効率の高いソリューションの構築に注力している企業でも、Wasm は最適です。 WebAssembly は成熟を続け、サポートを獲得するにつれて、ソフトウェア開発に対する考え方や関わり方を再定義する準備が整っています。 WebAssembly に注目してください。これは単なる未来ではありません。すでに存在し、私たちが知っているソフトウェアの形を変えています。

WebAssembly についてさらに詳しく知りたいですか? F5 の WebAssembly Unleashed ポッドキャストをYouTubeSpotify 、またはApple Podcastでチェックしてください。