サーバサイドWebAssemblyに、かつてのCGIの仕組みを取り込んだ「WCGI」をWasmerが発表。すぐ起動し安全に分離されるWebAssemblyの特長が活きる
今回は「サーバサイドWebAssemblyに、かつてのCGIの仕組みを取り込んだ「WCGI」をWasmerが発表。すぐ起動し安全に分離されるWebAssemblyの特長が活きる」についてご紹介します。
関連ワード (上記、化済、開発等) についても参考にしながら、ぜひ本記事について議論していってくださいね。
本記事は、Publickey様で掲載されている内容を参考にしておりますので、より詳しく内容を知りたい方は、ページ下の元記事リンクより参照ください。
スタンドアロンのWebAssemblyランタイム「Wasmer」の開発元であるWasmer.ioは、サーバサイドのWebAssemblyフレームワークとして、かつて動的なWebサイトを構築する技術として主流だったCGI(Common Gateway Interface」の仕組みを取り込んだ「WCGI」を発表しました。
Today we are incredibly excited to announce WCGI.
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
— Wasmer (@wasmerio) April 6, 2023
WCGIは、既存のPHPやPythonのCGIアプリケーションをWebAssemblyにコンパイルするだけで簡単にサーバサイドのWebAssemblyアプリケーションになるのが大きな特長の1つです。
実際にWasmer.ioはWordPressをWebAssembly化し、ローカル環境でWCGIとして簡単に起動するデモ動画を公開。上記のツイート内の動画がその様子です。
以下の手順で実際に試すことも出来ます。具体的には、Wasmerをインストールして、データベース用のディレクトリを作成、WebAssembly化済みのWordPressデモアプリを起動するだけです。
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の実装手段として興味深いのではないでしょうか。