Microsoft、「VS Code for the Web」でPythonコードやWebシェルを実行できる拡張機能をプレビュー公開:WebAssembly、WASIでインタープリタを実装
Microsoftは、Pythonコードを「VS Code for the Web」で実行できるようにする拡張機能と、Webシェル実行を可能にする拡張機能をプレビュー公開した。
Microsoftは2023年6月5日、C/C++で書かれたPythonインタープリタを使い、Pythonコードを「WebAssembly」(以下、Wasm)にコンパイルして「VS Code for the Web」で実行できるようにする拡張機能と、Webシェル実行を可能にする拡張機能をプレビュー公開した。
Pythonコード実行拡張機能
Visual Studio Code(以下、VS Code)を、ローカルにインストールせずにブラウザで実行できるVS Code for the Webは、ブラウザでコードの編集、コンパイル、実行、デバッグをサポートする。これらについては、ブラウザにはJavaScript実行エンジンが搭載されているので、JavaScriptやTypeScriptなどの言語では可能だったが、他の言語では困難だった。例えば、ブラウザでPythonのコードを実行するには、Pythonのインタープリタ実行エンジンが必要で、インタープリタは通常、C/C++で書かれている。
そこで、仮想マシン用のバイナリ命令形式のWasmに着目。現在、Wasm仮想マシンは最新のブラウザに組み込まれており、C/C++をWasmコードにコンパイルするためのツールチェーンが存在することから、今回の拡張機能を公開したという。
Microsoftは既にCPythonをWasmにコンパイルする作業を開始しており、調査の結果を下記動画で見ることができる。
この動画において、サンプルのPythonコード(「app.py」と、それと依存関係にある「hello.py」)はGitHubリポジトリにホストされており、GitHubから直接読み取られる。
WasmコードにコンパイルされたPythonインタープリタは、VS Code for the Webで実行するために特に何かを変更する必要はない。PythonのREPL(Read-Eval-Print Loop)を実行しており、それをブラウザで操作できる。Pythonインタープリタは、ワークスペース内のソースコードファイル(上記でいえばapp.pyとhello.py)にアクセスできるが、他のファイルにはアクセスできないという。
なおインタープリタのWasmバイナリとしては、「WASI」(WebAssembly System Interface)をサポートしている。
Webシェル実行拡張機能
MicrosoftはWebシェル実行拡張機能についても検証動画を公開している。
この動画では、1つのUNIXシェルをWasmにコンパイルできるかどうかを検証している。ただし、一部のシェルはOSの機能(生成プロセスなど)に依存しており、現時点ではWASIでは利用できない。そこで、ls、cat、dateといったUNIXの基本的なコマンドのみをTypeScriptで実装してWasmにコンパイルしようとしたという。
カスタムWasmまたはコマンドを実行できないと、シェルは非常に使いづらいものになる。Webシェルを拡張したい場合、他の拡張機能では、ファイルシステムに追加のマウントポイントを提供したり、Webシェルに入力されたときに呼び出されるコマンドを提供したりする。コマンドによる間接化によって、具体的なWasmコードの実行がターミナルに入力された内容から切り離される。
これを使うと、プロンプトに「python app.py」と入力するか、デフォルトのPython 3.11ライブラリ(通常は「/usr/local/lib/python3.11」にマウントされている)をリストすることで、シェル内からPythonコードを直接作成する。
なおMicrosoftは「これら2つの拡張機能はどちらも実験的なプレビューなので、実稼働で使用しないでほしい」とした上で、質問やフィードバックをGitHubレポジトリのIssuesで募集している。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- WebAssemblyでBashやCurlが動く、業界標準APIを拡張した「WASIX」を発表 Wasmer
Wasmerは、業界標準のAPI仕様である「WASI」を拡張してPOSIXに対応した新技術「WASIX」を発表した。WASIXを利用すれば、コードを修正することなく、既存アプリケーションをWebAssemblyで実行できる。 - C/C++でWebAssembly――「Emscripten」を体験する
第4回は、WebAssembly開発で人気のあるC/C++とEmscriptenによる開発事例を紹介します。標準的なC/C++の関数の出力をWebページに反映させる事例の他に、C/C++の関数をJavaScriptから呼び出す事例も紹介します。 - 「WebAssembly」は次世代のJava、Node.jsになる?――「Wasmコンテナ」をKubernetesで動かす
Kubernetesやクラウドネイティブをより便利に利用する技術やツールの概要、使い方を凝縮して紹介する連載。今回は、最近注目されている「WebAssembly」について復習しながら、WebAssemblyのアプリケーションをKubernetesで試す方法を紹介する。