はじめに
Python使い、nikkieです。
新宿御苑.wasm #2025.2.28にて、PyodideネタでLTしました。
スライドを用意せずにやったので、発表した内容を簡単に書き留めておきます
目次
- はじめに
- 目次
- PyodideネタでLTしました
- 作りたかったもの
- flake8-kotohaのplayground!
- flake8-kotoha playgroundを実現できたポイント
- 発表後記
- 終わりに
PyodideネタでLTしました
Pyodideネタで発表します #新宿御苑dev
— nikkie(にっきー) / にっP (@ftnext) 2025年2月28日
デモページに全振りしたので、資料はございません!
作りたいものが作れたという興奮だけがあります!!https://t.co/m2aOVNhhJz
https://pyodide.org/en/stable/index.html#what-is-pyodide より
Pyodide is a port of CPython to WebAssembly/Emscripten.
CPythonをWasmにポートしたもの、という理解です。
作りたかったもの
GitHub ActionsのYAMLファイルのリンター actionlint のplaygroundです1。
Pythonのリンター flake8(の自作プラグイン flake8-kotoha2)のplaygroundが作れるんじゃないかと思ったんですよね。
flake8-kotohaのplayground!
textareaが2つ。
上のtextareaには、リント対象のPythonコードが書かれます3。
「Run」をクリックすると、下のtextarea(Output:
)にはリント結果が出力されます。
Pyodideを使って、このplaygroundを実装しました!
flake8-kotoha playgroundを実現できたポイント
実現できたポイントは2つあったと考えています。
micropipでPyPIからインストール
1つはflake8-kotoha(や依存するflake8)のインストールです。
これはmicropipで可能でした。
flake8やflake8-kotohaはPythonのみで実装されているので、micropipでインストールできます。
ブラウザ上に簡単に環境構築できたので、新宿御苑.wasmのLTを締切に設定しました
flake8コマンドの出力をJavaScriptで受け取る
もう1つはflake8コマンドの出力を画面に出すところです。
Pyodideでprint()
を含むPythonコードをrunPython()
したときの標準出力の扱い(setStdout
)を知り、実現できました。
発表後記
スケジュールがタイトだったため、実装は粗いです。
例えば、URLのハッシュ以降に含めるbase64エンコードしたソースコードの実装にはブラッシュアップの余地を残します(actionlintの実装を理解しきれず一部から始めました)
懇親会で話して印象に残ったのは、(flake8は下火なので)Ruffでも同様のplaygroundができるのかという質問。
RuffはRust実装のためにmicropipではインストールできないのではないかと思われます(ただし未検証)。
ですが、Rust実装ということはWasmにコンパイルできるわけで、なんらか手段はありそうに思います(要調査)
終わりに
Pyodideを使って、flake8-kotohaのplaygroundを実現できました。
actionlintのplaygroundは再現させたかったので、Pyodideで実現できて達成感!
ちょこちょこと細かいところを作り込んでいきます
主催のasukaさんをはじめ、発表者・参加者の皆さま、ありがとうございました!
また、BuySell Technologiesさん、素敵なオフィスを使わせていただき、ありがとうございます