2月11日、Creston Blogが「WASMはコンテナを置き換えるだろう(WASM will replace containers)」と題した記事を公開した。この記事では、WebAssembly(WASM)がコンテナ技術を置き換える可能性について詳しく紹介されている。以下に、その内容を紹介する。
移植性の高さ
コンテナはソフトウェア開発における重要な問題を多く解決してきた。コンテナ登場以前にもVM(仮想マシン)は存在していたが、使い勝手の面でコンテナほど洗練されていなかったため、コンテナは高速なビルドやほぼ瞬時の起動などの利点をもたらした。
しかし現在では、 複雑なツールやプログラムを扱う必要があるだけでなく、コンテナとLinuxが強く結合していることからも、コンテナは扱いにくくなってきている。 多くの開発者はDockerを学ぶよりも、新機能を迅速に実装したいと考えるのが一般的だ。
そこで注目されるのがWebAssembly(WASM)である。WASMはすでに一部の場面でコンテナを置き換えており、V8エンジンが動作する多数の環境で動かすことができる。さらに多くのプログラミング言語がWASMにコンパイル可能であり、コンパイルできない言語はインタープリタをWASMにコンパイルすればよい。唯一の課題はファイルアクセスやネットワークといったシステムインターフェースの不足だが、これも時間の問題だ。 WebAssemblyは真の「書いて一度コンパイルすればどこでも動く」エクスペリエンスを提供できる。
一方Java仮想マシン(JVM)も「一度書けばどこでも動く」という概念を長らく掲げてきたが、ブラウザ上で動作しない(Javaアプレットももはやほとんど使われていない)ことが大きな制約になっている。WebAssemblyはブラウザという巨大なプラットフォームに対応しているため、多くの開発者が共通コードを活用できる。
マイクロサービスでも有用
マイクロサービスはHTTPやRPCなどの通信手段を用いてサービス間を分離し、厳密な境界を設ける利点がある一方で、通信によるオーバーヘッドやシステムの信頼性確保が課題になりやすい。
サーバレス(AWS Lambdaなど)の登場により、マイクロサービスは極限まで小さく分割できるようになった。その中でもCloudflare Workersでは、V8ランタイム内でワーカー同士が呼び出せるため、 物理的なネットワーク通信が不要 である。コンテナでは同じプロセス内でほかのコンテナを直接呼べないが、V8なら呼び出しが可能だ。これにより、マイクロサービスとモノリス両方の利点を享受できる仕組みだとしている。Cloudflare以外にもWasmerなどが類似のソリューションを模索している。
急速に発展中
WebAssemblyはまだ若い技術だが、急速に発展しており、サポートも拡大傾向にある。現時点で必ずしもすべての場面に適合しないかもしれないが、特にCloudflare Workers上での開発を試してみると未来が垣間見える。PythonやRuby、PHPのような言語を主に使う開発者にとっては時期尚早かもしれないが、GoやRustなどのコンパイル言語を導入しておくとWASM時代の到来に備えることができるだろう。
詳細はWASM will replace containersを参照していただきたい。