Simon Willison氏が、Python ASGIフレームワーク(FastAPI、Datasette等)をバックエンドサーバーなしでブラウザ上で完全動作させる新しい手法を実証した。PyodideとService Workerを組み合わせることで、従来の課題だった<script>タグの実行問題を解決し、プラグインを含むフル機能のDatasette 1.0a31がブラウザ上で動作することを確認している。

従来のアプローチと課題

Willison氏はDatasette Liteを2022年に公開した際、Web WorkerとPyodide(WebAssembly上のPython実装)を組み合わせてブラウザ上でPythonアプリを動かす手法を採用していた。

ただしこの方法には根本的な制約があった。<script>タグ内のJavaScriptが実行されないため、Datasetteの一部機能やプラグインが正常に動作しないという問題だ。単純なデータ参照には十分だったが、インタラクティブな可視化やプラグインエコシステムの活用は実質的に不可能な状態だった。

Service Workerによる解決策

今回の新手法では、Service WorkerがブラウザとWebの間に立ってリクエストをインターセプトする。/app/以下への同一オリジンのリクエストをすべて捕捉し、ASGIプロトコル経由でPyodide上のPythonアプリに処理を渡す仕組みだ。

重要なのは、ブラウザが返ってきたHTMLレスポンスを通常のページとして描画する点だ。<script>タグも正しく実行されるため、JavaScriptを多用するプラグインやUIコンポーネントが問題なく動作する。FastAPIとDatasette 1.0a31の両方で動作が確認されており、ASGI準拠のアプリであれば原理的に動作するという汎用性の高さも特筆すべき点だ。

Claude Opus 4.8がアーキテクチャ探索を加速

今回の実装では、Claude Code for webからClaude Opus 4.8にアーキテクチャ探索のタスクを依頼したことも公開されている。Willison氏自身が実装の詳細を完全に把握する前に動作するものが完成した——という経緯は、AIを活用した開発スタイルの現在地を象徴している。「実装を理解してから書く」から「動くものを作って理解する」へのシフトが、AIと組む開発では加速している。

実務への影響

この手法が実用化されると、いくつかの用途で大きなメリットが生まれる。

データ分析ツールの配布コスト削減: PandasやSQLiteを使うデータ探索ツールをサーバーなしでホスティングできる。GitHub PagesやCloudflare Pagesなど静的サイトホスティングだけで配布できるため、インフラコストがほぼゼロになる。

フルスタックアプリのプロトタイプ: FastAPIのエンドポイントをブラウザ上でそのまま動かせるため、バックエンド開発者がサーバーなしでUIを試せる環境が整う。デモ作成やハッカソンでの活用が即座に思い浮かぶ。

オフライン対応アプリ: Service Workerはオフラインキャッシュとも相性が良く、ネットワークなしで動作するPythonアプリという選択肢も現実味を帯びてくる。

日本のエンジニアにとっては、PoC(概念実証)やデモ環境を作る際に「サーバーを立てずにPythonのロジックを動かす」という選択肢が一つ増えることになる。

筆者の見解

「ブラウザでPythonが動く」という話はPyodideの登場から続いているが、今回の実証はその実用性を一段と引き上げた。従来のWeb WorkerアプローチはJavaScript実行の制約という壁があり、プラグインエコシステムを持つアプリには不向きだった。Service Workerを活用してその壁を取り除いたのは、技術的に筋のいい解決策だ。

AIを活用した技術探索の加速という側面も興味深い。実装を理解しきる前に動作するものが完成し、後から仕組みを読み解くというスタイルは、AIエージェントと組んで探索的な開発をするときに起きやすい。大切なのは「動いた」で終わらず、その仕組みを自分のものにして次のプロダクトに転用できる状態にすること。その作業は今も人間側の重要な仕事だ。

PyodideとWASMの成熟が続く中、「軽量なPythonツールはサーバーなしで動かす」という選択肢が今後のフロントエンド開発の当たり前になっていく可能性はある。データエンジニアやデータサイエンティストが自作ツールを配布する際に、この仕組みは強力な武器になるだろう。Datasette Liteへの適用が完了したとき、その実用性の評価が本格的に始まる。


出典: この記事は Running Python ASGI apps in the browser via Pyodide + a service worker の内容をもとに、筆者の見解を加えて独自に執筆したものです。