検索
連載

PythonとRubyでWebAssembly――PyodideとPyScript、Ruby 3.2を体験するいろんな言語で試す、WebAssembly入門(終)

第7回は、PythonとRubyによる開発事例を紹介します。これらの言語は、ここまでの回で紹介してきた言語とは異なった、実行環境をWebAssembly化するというアプローチでWebAssemblyに対応しています。PythonのPyodideとPyScript、Ruby 3.2でのWebAssemblyサポートを紹介します。

Share
Tweet
LINE
Hatena
「いろんな言語で試す、WebAssembly入門」のインデックス

連載:いろんな言語で試す、WebAssembly入門

 本連載のサンプルコードをGitHubで公開しています。こちらからダウンロードしてみてください。


PythonとRubyのWebAssemblyへのアプローチ

 これまでの回では、TypeScript(AssemblyScript)、C++、Rust、Goといったプログラミング言語でのWebAssemblyサポートを紹介してきました。いずれも、各言語のソースコードのコンパイルによってWebAssemblyバイナリを生成するというもので、言語の特性を生かした高速な実行を期待できるというものでした。

 今回紹介するのは、これらとは方向性が違っていて、実行環境そのものをWebAssembly化するというものです。対象言語は、PythonとRubyです。双方とも動的に型付けするスクリプト型の言語であり、実行時にコードが解釈、コンパイルされるので、WebAssemblyバイナリの生成に向いたものとはいえません。そこで、実行環境の方をWebAssemblyすることで、間接的にPythonやRubyのコードを実行しようというわけです。

 実行速度という点だけを見れば、実行環境はプラットフォームネイティブに用意されているので、WebAssembly化には意味がないかも知れません。しかし、実行環境がWebAssembly化されてWebブラウザで動作するということには、以下のようなメリットがあります。

  • 言語の実行環境がインストール不要でWebブラウザがあれば実行できる
  • スマートフォンのような環境でも実行できる
  • Webブラウザで実行できる言語の選択肢が増える

 初学者が言語の学習をはじめる際の環境構築は意外とハードルが高いということもありますから、それが不要になるということは学習コストを下げることにつながります。また、スマートフォンやタブレットのように開発環境を入れにくい環境でも利用できるということは、学習手段の選択肢を広げることになります。さらに、サーバサイドでPythonやRubyを使っている開発者が、そのスキルをクライアントサイドの開発にも生かせます。このように考えると、高速化だけがWebAssemblyの利用目的にとどまらないことを理解していただけるのではないでしょうか。

図1 PythonとRubyのWebAssemblyへのアプローチ
図1 PythonとRubyのWebAssemblyへのアプローチ

 以降、PythonとRubyの2つの節に分けて、WebAssemblyへのアプローチを紹介します。

PythonのWebAssemblyへのアプローチ

 Pythonでは、Pyodide(パイオダイドと発音)とPyScriptが主な手段となります。PyScriptはPyodideを前提としているので、まずはPyodideから紹介します。

Pyodideとは

 Pyodideプロジェクトによる、CPython(以下のNOTEを参照)をWebAssembly化した実行環境です。PyodideをWebページに読み込むことで、JavaScriptからPythonコードを実行することができるようになります。

Pyodide - Version 0.23.2

 連載第4回で紹介しましたが、C/C++のWebAssemblyサポートはEmscriptenというプロジェクトが担っています。CPythonはC言語で記述されているので、このEmscriptenを用いてWebAssembly化を果たしています。つまり、PyodideはCPythonをEmscriptenを用いてWebAssemblyに移植したものといえます。

 ただし、単なる移植ではありません。micropip(Pyodideのために用意されたpipの簡易実装版)により、Pythonモジュールを読み込んで利用できますし、JavaScript側とPython側にAPIが用意されているので、お互いのスコープにアクセス可能です。例えば、PythonのコードからDOMの要素にアクセスするといったことが容易に実現できます。

【補足】CPythonとは?

 CPythonとは、Python言語のレファレンス実装です。参考実装ともいい、他のPython言語の実装に対する標準といえるものです。CPythonの“C”は、実装がC言語によるものであることに由来するといわれています。PyodideのWebAssemblyサポートとは、このCPythonのバイナリをWebAssembly環境で動作させることをいいます。

PyodideのREPLを試す

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る