「WebAssembly」は次世代のJava、Node.jsになる?――「Wasmコンテナ」をKubernetesで動かすCloud Nativeチートシート(23)

Kubernetesやクラウドネイティブをより便利に利用する技術やツールの概要、使い方を凝縮して紹介する連載。今回は、最近注目されている「WebAssembly」について復習しながら、WebAssemblyのアプリケーションをKubernetesで試す方法を紹介する。

» 2022年12月22日 05時00分 公開
[岡本隆史株式会社NTTデータ]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

 Kubernetesやクラウドネイティブをより便利に利用する技術やツールの概要、使い方を凝縮して紹介する本連載「Cloud Nativeチートシート」。今回は、最近注目されている「WebAssembly」について復習しながら、WebAssemblyのアプリケーションをKubernetesで試す方法を紹介します。

Webブラウザからサーバサイドへ〜注目されるWebAssembly〜

 ブラウザ上で高速にアプリを実行する仕組みとして、WebAssembly(「Wasm」と省略されることもある)が注目されています。W3C(World Wide Web Consortium)で標準化されていることもあり、2017年ごろには既に主要なブラウザはWebAssemblyをサポートしています。さらに「Zoom」「Google Meet」「Google Earth」「Unity」などでWebAssemblyが利用されています。

 WebAssemblyはブラウザ上でコードを高速に動かす仕組みとして登場しましたが、ホスト上でも動作するようになってきており、GoogleやMicrosoft、Amazon.com、VMware、Intel、Dockerなどが非営利組織「Bytecode Alliance」において、WebAssemblyをホスト上で実行するWebAssemblyランタイムを開発しています。2022年9月には、Bytecode Allianceで開発されているWebAssemblyランタイム「Wasmtime」のバージョン1.0がリリースされ、話題になりました。

 JavaやJavaScriptがブラウザでの利用から始まって、JavaアプリケーションサーバやNode.jsのようにサーバサイドに広がったのと同じように、WebAssemblyもサーバサイドでの動作が徐々にターゲットになってきています。WebAssemblyの調査報告書「The State of WebAssembly 2022」のWebAssemblyの用途別利用者数を見ると(下図)、Webの開発に次いで、サーバレス、コンテナに利用している開発者が多いことが分かります。

WebAssemblyの用途別利用者数

 Kubernetesでも、WebAssemblyをサポートしたKubelet「Krustlet」や、WebAssemblyの実行をサポートしたコンテナランタイム「crun」などによって、WebAssemblyのアプリケーションを実行できるようになってきています。本稿では、WebAssemblyについて復習しながらKubernetesの対応状況と、「kind」(「Kubernetes in Docker」の略。Docker上にKubernetesクラスタを構築するツール)とcrunを用いて、WebAssemblyのアプリケーションをKubernetesで実行する方法を紹介します。

 なお、Kubernetesに関するWebAssemblyの状況は日々変化しており、本稿現時点で安定利用できる状況ではありません。本稿は2022年12月時点の内容です。今後の動作を保証するものではないので、あらかじめご了承ください。

WebAssemblyとは?

 JavaScriptはWebブラウザの標準言語として長らく使われてきましたが、AIやデータ分析などのトレンドによって、Webブラウザ上でより高速な処理が求められるようになりました。このような背景の下、JavaScriptをより高速に実行できるようにする手段として「asm.js」が提案されていましたが、asm.jsをさらに進化させた仕組みとして、WebAssemblyが提案され、W3Cで標準化されています。

 WebAssemblyは、仮想命令セットアーキテクチャあるいは低水準プログラミング言語の一種です。WebAssemblyでは、バイナリ形式のWasmバイナリとバイナリを人が読みやすくしたテキスト形式の「WAT」(WebAssembly Text format)の2種類のフォーマットが定義されています。

 WasmバイナリはアーキテクチャやOSに依存せず仮想マシンによって実行可能なコードで、Javaのバイトコードや、.NETにおけるCIL(共通中間言語)に似ています。具体的なWasmバイナリと対応するWATは、「wat2wasm demo」で提供されている、Wasm仮想マシンのシミュレーターで表記と動作を確認できるので、興味がある方は利用してみてください。

 WATはテキストですが、アセンブラに近い低水準言語で、プログラムで利用するには使いにくいです。プログラミング言語としては、C/C++やGo言語、Rust、C#などが利用され、これらの言語で記述したコードをコンパイラでWasmバイナリにコンパイルして利用します。

WebAssemblyの6つの特徴

 WebAssemblyの特徴をもう少し見てみましょう。

1.高速

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。