サーバサイドWebAssemblyに、かつてのCGIの仕組みを取り込んだ「WCGI」をWasmerが発表。すぐ起動し安全に分離されるWebAssemblyの特長が活きる
スタンドアロンのWebAssemblyランタイム「Wasmer」の開発元であるWasmer.ioは、サーバサイドのWebAssemblyフレームワークとして、かつて動的なWebサイトを構築する技術として主流だったCGI(Common Gateway Interface」の仕組みを取り込んだ「WCGI」を発表しました。
Today we are incredibly excited to announce WCGI.
— Wasmer (@wasmerio) April 6, 2023
WCGI allows running any CGI app with WebAssembly and Wasmer!
(...we got Wordpress running! )
Check it out!https://t.co/TNTctlBqJa pic.twitter.com/tOZpdhd1Eq
WCGIは、既存のPHPやPythonのCGIアプリケーションをWebAssemblyにコンパイルするだけで簡単にサーバサイドのWebAssemblyアプリケーションになるのが大きな特長の1つです。
実際にWasmer.ioはWordPressをWebAssembly化し、ローカル環境でWCGIとして簡単に起動するデモ動画を公開。上記のツイート内の動画がその様子です。
以下の手順で実際に試すことも出来ます。具体的には、Wasmerをインストールして、データベース用のディレクトリを作成、WebAssembly化済みのWordPressデモアプリを起動するだけです。
# Install wasmer beta 2
curl https://get.wasmer.io -sSfL | sh -s "v3.2.0-beta.2"
# Execute Wordpress
mkdir db
wasmer run-unstable wasmer/wcgi-wordpress-demo --mapdir=/db:db
WindowsのWSL環境で試しましたが、下記の手順で簡単にローカルPC上でデモが起動しました。
この「wcgi-wordpress-demo」では、PHPをCGIで実行可能にするPHP-CGIがWebAssembly化され、そのアプリケーションとなるPHPで作られたWordPressのコードがパッケージングされているようです。
コンパクトかつサンドボックスによる安全性も
WCGIの2つ目の特長は、Dockerコンテナなどに比べると、アプリケーションを非常にコンパクトにパッケージングできるということです。
パッケージングに必要なのは、コンパイル済みのバイナリとなったWebAssembly化されたアプリケーションと関連ファイルであること、そして迅速に起動することも、(かつてのCGIの遅いイメージと比べても)利点といえるでしょう。
3つ目はWebAssemblyの特徴でもあるサンドボックス化された実行による安全性です。HTTPリクエスト毎に実行されるインスタンスはWebAssemblyのサンドボックス内で実行されるため、そこから外部に対して不正にアクセスされるといった可能性は非常に低くなります。
Wasmer.ioではPHP用のWCGIテンプレートやRustでWCGIを開発する手法について解説しています。
CGIはかつて動的なWebサイトを構築する手法としてよく使われていましたが、HTTPリクエスト毎にプロセスが起動され、結果をWebサーバに返すという仕組みのために処理速度やスケーラビリティに課題を抱えており、現在ではあまり使われなくなりました。
このCGIの課題を軽量で迅速に起動し実行されるWebAssemblyによって再構築しようというWCGIの取り組みは、WebAssemblyの特長を活かしたサーバサイドWebAssemblyの実装手段として興味深いのではないでしょうか。
あわせて読みたい
Cloudflare WorkersがNode.js API互換の提供を発表。Bun、Denoなどに続く対応により、Node.js APIはサーバサイドJavaScriptの事実上の標準になるか
≪前の記事
GitHub.comにSBOM生成ツールが登場。誰でも無償でSBOMファイル作成、パブリックリポジトリならユーザーでも自由に作成可能