概要
ブラウザでPythonを実行するプロジェクトであるPyScriptですが、Googleで検索すると2022年の登場時の話ばかりが目につく気がしており、2025年現在はどうなっているのか、自分の知る限りを列挙してみました。
MicroPythonサポート
PyScript登場当初は、CPythonのWasm移植版であるPyodideを使いやすくするためのライブラリであり、Pyodideしか利用できませんでしたが、現在ではMicroPythonのWasm版も選択できるようになっています。
MicroPythonは組み込み向けのPythonであり、一部の機能やライブラリが存在しなかったり、モジュールのインストールが不可能だったりしますが、組み込み向けであるため、ページを開いてからスクリプトが動作するまでの時間がPyodideに比べて明らかに速いです。
リリースノートを見ると、ロード直後にMicroPythonのバージョン(3.4.0; MicroPython v1.24.1 on 2024-11-30)が表示され、その後しばらくしてからPyodideのバージョン(3.12.7 (main, Feb 26 2025, 08:15:59) [Clang 19.0.0git (https://github.com/llvm/llvm-project 0a8cd1ed1f4f35905df318015b)])が表示される様子が確認できます(表示はバージョン2025.3.1時点のもの)。
正直、ブラウザ周辺のPythonライブラリはまだ充実しておらず、結局はJavaScriptライブラリに頼ることが多い印象です。そのため、CPythonの機能やモジュールを使わないのであれば、MicroPythonでJavaScriptライブラリを活用する構成で十分な気がしています。
どうしてもPyodideを使う必要がある場合でも、Web Workersを使えば複数のランタイムを連携させて動作させることが可能です。最初はMicroPythonで起動し、DOMや外部JavaScriptライブラリでUI周りを制御し、Worker経由でPyodideを動かすという構成が最も無難だと感じています。
scriptタグのサポート
PyScript登場時は、py-script
という独自タグ内にコードを書く必要がありましたが、IDEのサポートやブラウザ制御の都合により、2025年現在ではHTML標準のscript
タグでも記述可能になっています。
現在でもpy-script
タグは使用可能ですが、公式ドキュメントのFirst stepsではscript
タグによる記述が推奨されており、ページ下部にはscript
タグサポートの経緯が記載されています。
トップレベルは非同期評価で動作(Top-level await)
登場当初はトップレベルのコードが同期的に評価されていましたが、現在では非同期評価がデフォルトとなっています。詳細は公式ドキュメントのFirst stepsに記載されています。
Pygame-ceサポート
2025年に入り、Pyodideが公式にPygame-ceをサポートしたことにより、PyScriptでもPygame-ceが利用可能になりました。ただし、2025年現在ではいずれもまだ実験的段階であることが明記されています。
この話がきっかけで知ったのですが、Pygameコミュニティは現在、PygameとPygame-ceに分裂しているようです。
ループの際にブラウザに制御を返す必要があるため、非同期関数内でループを回し、毎回asyncio.sleep
関数を呼ぶ必要があるようです。そのため、オリジナルのPygame-ce(Pygame)のコードがそのまま動作するわけではないようです。
明示的にバージョン指定が必要になった
初期はlatest
で最新の安定版を指定することが可能でしたが、2023年からこの方針は撤回され、現在は2025.3.1
のように明示的にバージョンを指定する必要があります。その理由はFAQに記載されています。
個人的感想
ブラウザ上でPythonを動かすだけであれば、Jupyter Lab(Google Colab)で十分な場合が多く、個人的にはPyScriptの使いどころはブラウザゲームやモバイルアプリ(Ionic Framework/Capacitor経由)だと感じています。そういった分野の記事を書いていこうかと考えているところです。