PythonインタプリタをWebAssemblyへコンパイル、Webブラウザで稼働するPython環境「Pyodide」。Mozillaが開発中

2019年4月19日

Mozillaは、WebブラウザでPythonインタプリタや数値計算ライブラリのNumPyなど、Pythonの標準的なデータサイエンス環境をほぼそのまま実行可能にする「Pyodide」(パイオダイドと発音されているようです)を開発中です。

Pyodide

Mozilla Hacksのブログに投稿された記事「Pyodide: Bringing the scientific Python stack to the browser」で、このPyodideの詳細と現状が報告されています。

Pyodideは、データサイエンス環境をWebブラウザ上で実現しようというMozillaのプロジェクト「Iodide(アイオダイド、と発音されているようです)の関連プロジェクト。

Pyodideの最大の特徴は、標準のPythonインタプリタのフル機能をWebブラウザ上で実現しようとしている点にあります。下記はブログから。

Pyodide gives you a full, standard Python interpreter that runs entirely in the browser, with full access to the browser’s Web APIs.

Pyodideはフル機能の標準Pythonインタプリタをブラウザ上で提供し、Web APIへのフルアクセスも実現する。

つまりWebブラウザ上でPython言語およびデータサイエンス関連のPythonライブラリ、例えばNumPy、Pandas、Scipy、Matplotlibなどをそのまま使ってプログラミングできて、さらにWebGLのような高速なグラフィック描画なども呼び出せるようにする、というわけです。

上記のWebページに表示されているグラフィックは、実際にPyodide環境上のPythonで計算された3DモデルをWebGLでアニメーションとして表示したものをGIFアニメで再現したもの。クリックしてぜひ実際のWebページをご覧ください。

CPythonインタプリタをWebAssemblyへコンパイル

これまでWebブラウザ上でPythonインタプリタを実現しようとさまざまな試みが行われてきましたが、いずれも課題を抱えているとMozillaは指摘します。

例えばPythonをJavaScriptへトランスパイルする「 Transcrypt」、PythonインタプリタをJavaScriptで実装しようとする「Brython」「Skulpt」、PyPyをEmscriptenを用いたJITコンパイルで実行しようとした「PyPyJs」など。

Emscriptenとは、C/C++のプログラムからWebAssemblyの生成に使えるコンパイラです。Pyodideは、このEmscripten用のPythonインタプリタを基盤としていると説明されています。

After a discussion with some of Mozilla’s WebAssembly wizards, we saw that the key to building this was emscripten and WebAssembly: technologies to port existing code written in C to the browser. That led to the discovery of an existing but dormant build of Python for emscripten, cpython-emscripten, which was ultimately used as the basis for Pyodide.

何人かのMozillaにいるWebAssemblyウィザードらと議論した結果、私たちはこれを実現するカギはEmscriptenとWebAssembly、つまりCで書かれた既存のコードをブラウザに移植する技術であると考えました。その結果、既存の、しかし休止中であったEmscripten用のPythonのビルドであるcpython-emscriptenの発見につながり、これが最終的にPyodideの基盤となったのです。

CPythonのソースコードに最小限の変更を行いEmscriptenでWebAssemblyへコンパイルしているため、標準のPythonインタプリタがWebブラウザ上で実現されると。さらにNumPy、Scipy、Matplotlib、Pnadasなどのライブラリもバンドルしているようです。

ただし、LinuxなどのOS上で実行されるPython環境と異なり、Webブラウザ環境ではファイルシステムなどへはアクセスできないなどの相違点はあります。

OS環境と同様の機能をWASIで実現へ

こうしたOS環境とWebブラウザ環境の違いを埋めようとしているのが、Mozillaが現在中心となって策定しようとしている標準仕様の「WASI」(WebAssembly System Interface)です。

参考:WebAssemblyをWebブラウザ以外の実行環境へ。システムインターフェイスへのアクセスを可能にする「WASI」の策定開始。Mozillaが呼びかけNode.jsらが賛同

WASIが具体的に目指しているのは、WebAssemblyにファイルやネットワーク、メモリなどのシステムリソースへ安全にアクセス可能にするAPIの標準仕様を備えること。これによってWebブラウザ上で実行されるWebAssemblyのアプリケーションからこれらのリソースへアクセス可能になるのです。

WASIは最初から必要なAPIをすべて策定するのではなく、モジュール形式で拡張していく方針をとると説明されています。まず最初に策定されるwasi-coreは、POSIXの基本的な要素にならってファイル、ネットワーク接続、クロック、ランダム番号などが含まれる予定。

WASI fig2

その後、非同期I/O、ファイルウォッチ、ファイルロックなどの策定へと進む見通しとされています。

またスレッド機能もWebAssemblyでの実装も一部で始まっており、将来的にはこれも取り込んでいくことになるだろうと説明されています。

将来こうした仕様や実装が揃えば、現在OS上で利用しているさまざまな機能がWebブラウザで実行されているWebAssemblyアプリケーションからも利用可能になります。Pyodideもその恩恵を受けることになるわけです。

あわせて読みたい

プログラミング言語 Mozilla Python




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本