さまざまな言語と実行環境に対応する“ユニバーサル・バイナリフォーマット”への期待を抱かせるWebAssembly
WebブラウザでJavaScriptよりもさらに高速な実行速度を得るために開発された技術が「WebAssembly」だ。しかも高速性のみに止まらず、さまざまなプロセッサをはじめ、さまざまな言語と実行環境にも対応するユニバーサルなバイナリフォーマットへの期待を抱かせるものとなっている。
Webアプリケーションを高速実行するための最新技術
Webブラウザ上でさまざまな機能を提供してくれるWebアプリケーション。いまではメールのやりとりや地図の表示をはじめ、ワードプロセッサ、ゲーム、表計算、業務アプリケーションなど、より複雑で大規模化が進んでいます。
また「Electron」のようなフレームワークが登場したことで、Webブラウザだけでなく、テキストエディタやチャットクライアントなどのデスクトップアプリケーションまで、HTML/CSS/JavaScriptのWebテクノロジーによって開発されるようになっています。
こうしたWebテクノロジーによる高度なアプリケーション開発を背景に、JavaScriptの実行速度の向上は常に望まれてきました。そのため、WebブラウザやElectronに組み込まれているJavaScriptエンジンでは、インタプリタの改善だけでなく、実行時に並行してコンパイルを行うことで実行速度を向上させる“Just-in-Compiler”の技術なども採用されるようになっています。
さらに高速実行を目的にシンプルなプログラミング言語として作られた、JavaScriptのサブセット言語「asm.js」なども登場しました。
そして、Webアプリケーションを高速に実行するための最新の技術動向と言えるのが「WebAssembly」です。
ピンチアウトで拡大
ネイティブコードに近い速度で実行できるWebAssembly
WebAssemblyとは、Webブラウザ上でネイティブコードに近い実行速度で高速に実行できるバイナリフォーマットです。HTMLやCSSといったWeb技術の標準化団体であるW3Cが中心となって開発を進めています。
2015年にChrome、WebKit、Firefox、Microsoft Edgeなど主要なブラウザの開発チーム、さらにLLVMやUnityといった実行系の開発チームが、WebAssemblyの開発を表明しました。2017年にはChrome/Firefox/Edge/Safariなどの主要ブラウザで実行環境が整い、2019年12月にはW3Cの仕様が勧告となりました。
WebAssemblyは現在、実行環境としても仕様としても、すでに十分利用可能なものとなっています。
JavaScriptよりも10倍以上も高速な実行結果に
WebAssemblyの最大の特長は、当初の目的の通り、非常に高速な実行速度にあります。あらかじめコンパイル済みのバイナリフォーマットであるため、即座の実行が可能であり、またx86プロセッサなどのネイティブなアセンブリコードに近い実行速度が出るように設計されています。
2019年12月、機械学習ライブラリ「TensorFlow」の開発チームは、Webブラウザ上で実行可能な「TensorFlow.js」をWebAssemblyで実装した場合の実行結果を公開しました。その結果、WebAssemblyはJavaScriptと比較して10倍以上も高速であることが示されたのです。
今後、さまざまなWebアプリケーションがWebAssemblyで実装されることで、これまでよりもずっとサクサク動く快適なWebアプリケーションの利用が可能になるでしょう。
ピンチアウトで拡大
広がるWebAssembly対応ランゲージの世界
そしてWebAssemblyのもう1つの大きな特長が、Webアプリケーションの開発にJavaScript以外のさまざまな言語が利用できる可能性を開いた点にあります。
WebAssemblyはバイナリフォーマットであるため、コンパイルしてこのバイナリフォーマットを生成できるのであれば、どんな言語でもWebアプリケーションが開発できるのです。
実際、すでにC/C++言語はWebAssemblyを生成できますし、Go言語、Rust言語もWebAssemblyを生成できるようになっています。またTypeScriptを拡張して、WebAssemblyを生成できるようにしたAssemblyScriptもあります。
こうしたJavaScript以外のプログラミング言語によって、Webアプリケーションを開発することが今後広まるかもしれません。
特定のプロセッサに依存せず、Webブラウザ以外でも実行可能に
WebAssemblyは特定のプロセッサにも依存しないため、WebAssemblyのバイナリファイルであれば、x86プロセッサはもちろん、ARMやその他のプロセッサ上でも高速に実行可能です。
その意味で、WebAssemblyはさまざまな言語でサポートされるバイナリであると同時に、さまざまなプロセッサでも実行可能な“ユニバーサル・バイナリフォーマット”になる可能性が高いのです。
さらにCDNプロバイダーのFastlyとMozillaが中心となって、WebAssemblyをWebブラウザだけでなくデスクトップやサーバーなど、あらゆる環境で実行可能にしようとする動きがあります。FastlyはWebAssemblyをサーバーで実行可能にするランタイム「Lucet」をオープンソースで公開しており、さらに同社とMozillaが中心となって、WebAssemblyからファイルやネットワーク、メモリなどのシステムリソースへ安全にアクセス可能にするAPIの標準仕様「WASI」の策定が行われています。
これによってWebアプリケーションだけでなく、デスクトップアプリケーションやサーバーアプリケーションなども、WebAssemblyで実装可能になるのです。
これを後押しする動きとして、WebAssemblyのアプリケーション実行時にセキュアな分離機能を用いることで、WebAssemblyがサーバーやデスクトップでも安全に実行できるような仕組みを作るための団体「Bytecode Alliance」の発足を、インテル、Mozilla、Red Hat、Fastlyの4社が2019年11月に発表しています。
究極のユニバーサル・バイナリフォーマットへの期待
このようにWebAssemblyはWebアプリケーションだけでなく、デスクトップやサーバーなど、さまざまなアプリケーションの領域に進出しようとしています。
もしかしたら数年後には、WebAssemblyがどんな言語からでも生成され、サーバーにもデスクトップにもWebブラウザにも対応し、x86でもARMでもどんなプロセッサでも実行できるという、究極のユニバーサルなバイナリフォーマットに発展しているかもしれないのです。
※本記事は東京エレクトロンデバイスが提供する不定期連載のタイアップコラムです。
※会社名および商標名は、それぞれの会社の商標あるいは登録商標です。
※このコラムは不定期連載です。
※会社名および商標名は、それぞれの会社の商標あるいは登録商標です。
-
新野淳一/Junichi Niino
ブログメディア「Publickey」( http://www.publickey1.jp/ )運営者。IT系の雑誌編集者、オンラインメディア発行人を経て独立。新しいオンラインメディアの可能性を追求。