WebAssemblyはJavaScript以外でブラウザ上にて実行が保証されている動的なプログラミング実行環境になります。WebAssembly自体はプログラミング言語ではなく、RustやC、C++などの言語からWebAssemblyで実行できるバイナリを作成します。
そんな中、プログラミング言語の実行環境をWebAssembly化し、JavaScript以外のプログラミング言語をブラウザ上で実行してしまう試みが多数行われています。
この記事ではどういった言語がブラウザで実行できるか紹介します。
Ruby
Rubyは3.2より正式にWebAsssemblyをサポートしました。公式に提供されているJavaScriptファイルを読み込むだけで、Rubyをブラウザ上で実行できます。
TryRuby playground にて実際に試せます。
Python
CPythonをEmscriptenでWebAssembly化したのがPyodideです。コンソールもあり、そちらで実際にコードを実行できます。
このPyodideをベースに作られたのがJupyterLiteです。Pythonでよく使われるJupyter Notebookをブラウザだけで実行できるようにしたソフトウェアです。
PHP
PHPはWeb業界で最もよく使われているプログラミング言語でしょう。そんなPHPをEmscriptenによってWebAssembly化しています。
そしてPHP + SQLiteという組み合わせで、WordPressをブラウザだけで実行しています。ブラウザの中でアプリケーションサーバーを模倣している点がユニークです。
Node.js
ブラウザにはJavaScriptエンジンがあるのに、なぜNode.jsを実現するのでしょうか。使い方としてはユーザーが作るマクロを実行する環境というニーズがありそうです。サンドボックス環境にすることで、安全にJavaScriptを実行できます。
QuickJSはES2020をサポートしたJavaScript実行環境です。こちらのサイトで、実際にコードをデモできます。
Julia
Juliaは計算科学や数値解析などの分野で使われることの多いプログラミング言語です。Pythonなどと比べて実行速度が速いという点が挙げられます。
最初の登場が2012年と、比較的歴史の浅いプログラミング言語となっています。プレイグランドはこちらです。
Perl
Perlは長い歴史のあるプログラミング言語です。CGIの時代にはPerlでアプリケーションを書くのが当たり前だったのではないでしょうか。
現在ではWebアプリケーションはPHPで書くことが多いですが、サーバーでの処理などでまだまだ使われます。そんなPerlをWebAssembly化したのがWebPerlになります。
Swift
SwiftはAppleが開発したプログラミング言語であり、Objective-Cの代替言語に位置づけられます。iOSやmacOSアプリ開発向けの言語ですが、サーバーサイドでも利用できます。
そんなSwiftの実行エンジンをWebAssembly化し、実行できるようにしたのがSwiftWasmです。
まとめ
ブラウザ上で別な言語を動かす試みは昔からありましたが、別なプラグインが必要(Flash、ActiveX、Javaアプレットなど)だったり、JavaScriptで実行エンジンを書くものがほとんどでした。いずれもセキュリティやブラウザ互換性、実行速度などの問題があり、主流になるには至りませんでした。
現在のWebAssemblyは十分に高速に動作し、かつこれまでのC言語で書かれた資産を活かせるという点も注目です。今後、周辺のライブラリ対応が広がっていけば、JavaScript以外の言語でWebアプリケーションを作るのも当たり前になるかも知れません。