「WebAssembly」は次世代のJava、Node.jsになる?――「Wasmコンテナ」をKubernetesで動かす:Cloud Nativeチートシート(23)
Kubernetesやクラウドネイティブをより便利に利用する技術やツールの概要、使い方を凝縮して紹介する連載。今回は、最近注目されている「WebAssembly」について復習しながら、WebAssemblyのアプリケーションをKubernetesで試す方法を紹介する。
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の開発に次いで、サーバレス、コンテナに利用している開発者が多いことが分かります。
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.
関連記事
- 利用者が増え続ける「WebAssembly」、ブラウザ実行できる4つ目の言語の魅力とは
ソフトウェアコンサルティング会社のScott Logicは、「WebAssembly」の使用状況に関する2回目の年次調査を実施、結果を発表した。WebAssemblyは「HTML」「CSS」「JavaScript」に続き、Webブラウザで実行可能なコードを作成できる4つ目の言語と位置付けられている。 - WebAssemblyランタイム「Wasmer 3.0」公開、WAPMパッケージを直接実行できる「run」コマンド実装
Wasmerは、WebAssemblyをサーバなどで実行するためのオープンソースランタイムの最新版「Wasmer 3.0」をリリースした。 - Webアプリの脆弱性から影響を受けないソフト基盤の確立に向けて、「Bytecode Alliance」が発足
Webで利用されているコードの80%は再利用ベースのモジュールだ。ここに脆弱性があるとエンドユーザーのWebアクセスが危険にさらされてしまう。そこで、「WebAssembly」などの標準をベースにクロスプラットフォーム、クロスデバイスの新しいソフトウェア基盤の構築に取り組むオープンソースコミュニティー「Bytecode Alliance」が発足した。