PR

WebAssemblyを取り巻く最新情報をMeetupから紹介(後半)

2022年8月3日(水)
松下 康之 - Yasuyuki Matsushita
WebAssemblyの最新情報をオライリーの著書を執筆したエンジニアが解説した記事を紹介する。

WebAssemblyの最新情報を紹介する記事の後半をお届けする。これは技術書籍の出版社として著名なオライリーから発売された「WebAssembly: The Definitive Guide」という書籍を書いたBrian Sletten氏が、2022年2月22日にシカゴで開催されたオンラインセミナー、Wasm Chicago Meetupで公開した動画をベースにしている。Sletten氏はWebAssemblyの最新情報を紹介するために以下の14のユースケースをベースに解説を行っている。この記事では後半部分から7.Notebook Environment、9.Strategy for Development、11.Emulation Environment、13.Cloud/Edge Computing Environmentの項を紹介する。

前回の記事:WebAssemblyを取り巻く最新情報をMeetupから紹介(前半)

動画:Brian Sletten: The Whole WebAssembly Enchilada

Sletten氏が挙げたユースケースは以下の通りだ。

  1. Mechanism for Code Reuse:コード再利用のためのメカニズムとしてのWASM
  2. Extend the Universal Client:クライアント用モジュールとしてのWASM
    TensorFlowとRustで書かれたSudoku Solverを例に解説
  3. Extend the Server:サーバー自体を拡張するためのWASM
    DenoにおけるWASMの利用を例に説明。
  4. Sandboxed Environment:実行環境をセキュアなサンドボックス化するための仕組みとしてのWASM
    対象となるWASI、Wasmer、WAPMなどを紹介
  5. Optimizing Engine:高速化のためのWASM
    JavaScriptに比べて高速なことを説明
  6. Plugin Engine:プラグインとして拡張するためのWASM
    MS Flight Simulatorを例に挙げて説明
  7. Notebook Environment:科学演算のためのWASM
    IodideというJupyter NotebookのJavaScript版のWASMによる実装を紹介
  8. Embedded Systems:エッジやエンベデッド向けシステムのためのWASM
  9. Strategy for Development:開発ツールの充実を紹介
    eguiというRustで書かれたGUIモジュールを紹介
  10. Implementation Details:WASMが使われる実装例
    Unoを例に挙げてマルチプラットフォームでの実装を紹介
  11. Emulation Environment:WASMを使ったエミュレーションの実装
    WebAssembly.shとWebVMの紹介
  12. Decentralized Systems:分散システムのプラットフォームとしてのWASM
    IPFSを例に挙げて分散型システムを解説
  13. Cloud/Edge Computing Environment:エッジのためのWASM
    WasmEdge、wasmCloudを例に挙げてエッジでの実装を説明
  14. Mediating Hardware Differences:ハードウェアの違いを吸収するためのWASM
    AppleシリコンやRISC-Vでの実装を解説。

Notebook Environment

Notebook Environmentという項では機械学習で利用されるJupyter NotebookのWebAssembly版であるIodideを紹介している。しかしIodideはMozillaの事情で開発への投資は終了したためすでに更新が止まっており、今後開発は行われないと告知されている。実際にはIodideのプラグインだったPyodide(Python on WebAssembly)が後継ということらしい。Pyodideについては以下の公式サイトを参照されたい。ベースとなっているのはWebAssemblyとEmscriptenというコンパイラーで、Pythonをクライアントにインストールしなくてもブラウザーだけで実行できるという点がJupyter Notebookとは異なっている。

Pyodide:What is Pyodide?

Pyodideの概要

Pyodideの概要

Strategy for Developmentという項ではRustで書かれたGUIのライブラリーであるeguiを紹介している。

eguiのGitHubページに書かれている概要

eguiのGitHubページに書かれている概要

eguiはWeb用のグラフィカルなパーツだけではなくネイティブアプリケーション用のパーツとしても利用でき、将来的にはゲームエンジンからも利用できることを目指しているという。メモリーセーフなRustでCやC++のコードを書き直す場合、GUIについてはeguiを使えばWebブラウザーでもネイティブアプリケーションとしてビルドする時も同じコードで実行できるというのは大きな利点だろう。

eguiのデモ画面

eguiのデモ画面

eguiのゴールとして「最も簡単なRust用のGUIライブラリーとなること」「ポータブルであること」などが挙げられている。フォトリアリスティックなCGを作ることを目指さずに2Dベースで簡単に使えてバグが起こりにくいコードを目指すというのは、Rustのメモリーセーフな特徴と同じ方向を向いていると言える。

eguiのゴール

eguiのゴール

eguiのGitHubページ:https://github.com/emilk/egui

またGUIのライブラリーとしても有名なQtもターゲットプラットフォームとしてWebAssemblyをサポートしている。ここではeguiと同様にWeb、ネイティブアプリケーションのどちらでも実行できるベースとして紹介されている。

QtのWebAssemblyに関するぺージ:Qt on the Web

Emulation Environment

Emulation Environmentという項ではWebAssemblyのランタイムであるWasmerとWAPMを使ってシェルをエミュレーションしたwebassembly.shと、ブラウザー上にLinuxの仮想マシンを実装したWebVMを紹介している。

webassembly.shのスクリーンショット

webassembly.shのスクリーンショット

WebVMのスクリーンショット

WebVMのスクリーンショット

どちらもWebAssemblyを使ってブラウザー上でエミュレーションを行っている点が似ている。あるシステムに必要なライブラリーやモジュールをコンテナでひとつのパッケージに閉じ込める発想をよりシンプルに実現したとも考えることができるという点で、元DockerのSolomon Hykes氏がサーバー側のWebAssemblyの重要性についてツイートしたこととも関連するだろう。

Cloud/Edge Computing Environment

最後のユースケースであるCloud/Edge Computing Environmentについては、Fastlyのラボで開発されているWebAssembly関連のプロジェクト、エッジでWebAssemblyを実装するWasmEdge.orgを紹介した後に、WebAssemblyに特化したベンチャー企業であるFermyon、Suborbital、Cosmonicが開発するWasmCloudを紹介した。

Fastly Lab:https://www.fastlylabs.com/

Fastlyのラボラトリーのページから引用

Fastlyのラボラトリーのページから引用

WasmEdge:https://wasmedge.org/

WasmEdgeのページより引用

WasmEdgeのページより引用

この中でも注目すべきはFermyonだろう。FermyonのThe Teamというページを見れば、HelmやKrustletなどのオープンソースプロジェクトをリードしたMatt Butcher氏や、KubeConのキーノートでもお馴染みのMichelle Noorali氏(現姓はDhanani氏)などが創業者として名を連ねていることがわかる。

Fermyon:https://www.fermyon.com/about

Kubernetesの隆盛を支えたエンジニアがWebAssemblyのエコシステムをリードしていることを考えれば、モメンタムが明らかにWebAssemblyに来ていることがわかるだろう。ちなみにFermyonのホームページはRustで書かれたWebAssemblyとWAGIベースのCMSであるBartholomewで実装されており、実際に自分たちで開発したソフトウェアを使っている点にも注目したい。

Matt Butcher氏が創業者のFermyon

Matt Butcher氏が創業者のFermyon

Rustで書かれたCMSであるBartholomewのGitHubページより引用

Rustで書かれたCMSであるBartholomewのGitHubページより引用

Hykes氏のツイートに呼応するように、Kubernetesのプロジェクトの中でノードのコントローラーであるKubeletをRustで書き換えたKrustletによって、WebAssemblyもコードをKubernetesの上で実行できるようにしたのはDeisLabsのエンジニアが中心となって行ったと言われている。この関係性もFermyonの創業に繋がる線と思われる。オーケストレーターとしてのKubernetesはすでに退屈なプロジェクトであるが、その上でWebAssemblyが動くことでさらにその可能性が拡がると言えるだろう。

wasmCloudについてはKubeCon NA 2021のプレカンファレンスとして行われたWASM Dayの記事を参照されたい。

参考:KubeCon NA 2021開催。プレカンファレンスのWASM Dayの前半を紹介

SuborbitalはサーバーレスのワークロードとしてWebAssemblyを使うということを訴求している。

Suborbital公式サイト:https://suborbital.dev/

全体を通して駆け足でありつつ、2022年2月時点での注目すべきソフトウェアやベンチャー企業、組織などを紹介したセッションとなった。スライドには最低限のリンクだけが記述されているのが残念だが、そのエッセンスをこの記事で読み取ってもらえたら幸いだ。

著者
松下 康之 - Yasuyuki Matsushita
フリーランスライター&マーケティングスペシャリスト。DEC、マイクロソフト、アドビ、レノボなどでのマーケティング、ビジネス誌の編集委員などを経てICT関連のトピックを追うライターに。オープンソースとセキュリティが最近の興味の中心。

連載バックナンバー

仮想化/コンテナ技術解説

Kubernetesを操作するターミナル用ツール、K9sとKDashを紹介

2022/8/16
Kubernetesの操作をコマンドラインではなくターミナルのCUIで行うツール、K9sとK9sに影響を受けてRustで書かれたKDashを紹介。
開発ツールインタビュー

テスト自動化をSaaSで展開するmablが日本での活動を本格化。創業者にインタビューを実施

2022/8/9
テスト自動化のソリューションをSaaSで提供するmablの創業者が来日。説明会の内容と個別に行ったインタビューの内容を紹介する。
開発言語技術解説

WebAssemblyを取り巻く最新情報をMeetupから紹介(後半)

2022/8/3
WebAssemblyの最新情報をオライリーの著書を執筆したエンジニアが解説した記事を紹介する。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています