モデル / データセット
StructuredLabs/preswald avatar
StructuredLabs/preswald

Preswald:Pythonデータアプリを単一HTMLに固めるWASMパッケージャ

Preswald is a WASM packager for Python-based interactive data apps: bundle full complex data workflows, particularly visualizations, into single files, runnable completely in-browser, using Pyodide, DuckDB, Pandas, and Plotly, Matplotlib, etc. Build dashboards, reports, and notebooks that run offline, load fast, and share like a document.

スター 4,272フォーク 646PythonApache-2.0

ひと目でわかる

これは何?
PreswaldはPyodideとDuckDBをブラウザ内で動かし、Pythonで書いた可視化アプリを静的ファイルとして書き出すツール。配布と機密データの扱いに効く一方、ブラウザ側の制約をそのまま引き受ける設計でもある。
誰に向いている?
受け渡し先にPython環境を用意させたくない分析者、機密データを手元から出さずにUIを作りたいチーム、オフラインやエアギャップ環境で動くレポートが必要な現場には向いている。逆に、常時更新される大規模データのサーバーサイド集計、認証や権限管理を伴う社内ポータル、ユーザーごとに異なるデータを返すアプリには向かない。
商用利用できる?
できます。Apache-2.0 は寛容なライセンスで、著作権表示とライセンス表示を残せば、使用・改変・販売が可能です。
今もメンテナンスされている?
されています。最後のコミットは 96 日前です。
何の言語で書かれている?
主に Python です(GitHub の言語統計による)。

回答はプロジェクトの GitHub データ(最終同期:2026年9月15日)と当サイトの分析に基づくもので、法的助言ではありません。

オープンソース詳細解説

Preswaldが埋めるのは「配布」の穴である

Pythonでデータを可視化する道具はすでに多い。問題は作った後にある。受け渡し先の同僚にPythonを入れてもらい、依存を解決してもらい、CSVのパスを直してもらう。この手間が、一度きりのレポートやプロトタイプでは本体の作業より重くなる。Preswaldはここを狙う。READMEは自らを「静的サイトジェネレータ」と位置づけ、計算・データアクセス・UIを自己完結したデータアプリとしてまとめ、ブラウザ内でローカルに動かすと説明している。対象読者は、分析結果を他人に渡す立場のデータ分析者、機密データを外部サービスに置けないチーム、そしてAIエージェントに渡す道具をPythonで書きたい開発者だ。

ブラウザ内でPythonを動かすという割り切り

仕組みの核はWASMランタイム上のPyodideとDuckDBにある。Pythonのコードはサーバーで実行されず、閲覧者のブラウザ内で解釈される。データの読み込みと集計はDuckDBが担い、UIはPreswaldが用意する部品(テーブル、チャート、フォーム)で組む。READMEの例では、hello.pyにtext()、get_df()、table()を並べるだけで、見出しとテーブルが表示される。状態管理については「依存関係のDAGに基づき、必要な部分だけを再実行する」というリアクティブエンジンを挙げている。つまり入力が変わると、その入力に依存する計算だけが再評価される。サーバーが存在しないため、リクエストの往復もセッション管理もない。裏返せば、重い集計をブラウザのCPUとメモリで完結させる必要がある。

init、run、exportという3つのコマンド

導入はpip install preswald、またはuv pip install preswald。雛形はpreswald init my_appで作られ、hello.py、preswald.toml、secrets.toml、data/sample.csv、images/logo.pngが並ぶ構成になる。開発中はpreswald runでローカルサーバーが立ち上がり、READMEの例ではhttp://localhost:8501が案内される。配布物を作るのはpreswald exportで、dist/配下に静的サイト一式が出力される。このフォルダにはPythonコード(Pyodide経由)、データ、DuckDBクエリがまとまり、モダンブラウザでオフライン動作し、フォルダごと共有するかホスティングに埋め込める、と説明されている。設定はpreswald.tomlに集約され、[project]でtitle、version、port、slug、entrypoint、[branding]でname、logo、favicon、primaryColor、[logging]でlevelとformatを指定する。levelはDEBUG、INFO、WARNING、ERROR、CRITICALから選ぶ。

データ量とライブラリの壁

最大の制約は実行環境がブラウザであることだ。READMEは「大きなデータでもオフラインで動く」と書くが、その上限は閲覧者のマシンのメモリで決まる。数GBのParquetを読ませる用途では、サーバーサイドの集計に劣る場面が出る。もう一つは依存ライブラリだ。Pyodide上で動かすには、そのライブラリがWASM向けにビルドされている必要がある。PlotlyやMatplotlib、Pandas、DuckDBはREADMEで名前が挙がっているが、業務で使う独自のC拡張を含むパッケージが同じように動く保証は、提供された資料からは読み取れない。exportの前に、自分の依存関係がブラウザ側で解決できるかを確かめる工程が要る。

Streamlitとの違いは実行場所である

比較対象として分かりやすいのはStreamlitだ。StreamlitはPythonプロセスをサーバーで動かし、ブラウザは表示と操作を送るだけのクライアントになる。データはサーバー側にあり、集計もサーバーで走る。Preswaldはこの関係を反転させ、データもロジックも閲覧者のブラウザに運ぶ。だから配布はファイル1つで済み、機密データは手元から出ない。その代わり、データを配布物に含めるという判断が必要になる。アクセス制御はファイルを渡した相手の管理に委ねられ、認証の仕組みはアプリ側にはない。社内の複数人で同じデータを見る用途ならStreamlit、特定の相手にスナップショットを渡す用途ならPreswald、という切り分けが素直だ。

AIエージェントに渡す道具としての位置づけ

READMEは「AI-ready」として、アプリが完全に検査可能でエージェントが変更できる点を挙げている。PythonファイルとTOMLの設定、CSVという素直な構成は、コードを読んで書き換えるタイプのツールにとって扱いやすい。ここは他のデータアプリ基盤が明示的に打ち出していない特徴で、Preswaldの輪郭を最もはっきりさせる部分だ。ただし、これはあくまで構造の話であり、エージェントが生成したコードの正しさをPreswaldが保証するわけではない。

ライセンスと更新の追い方

ライセンスはApache-2.0。商用利用や改変、再配布の余地がある寛容なライセンスだが、著作権表示とライセンス文の同梱といった条件の解釈は利用者の状況によるため、ここで法的な判断はしない。配布物に同梱すべき表示があるかは、採用前に自組織で確認する項目になる。更新面では、リポジトリはアーカイブされておらず、2026年6月時点で最終プッシュが確認できる。リリースはv0.1.59(2025年6月5日)、v0.1.58(2025年5月29日)、v0.1.57(2025年5月29日)と、0.1系が短い間隔で続いている。バージョン番号が示すとおりAPIはまだ安定域に入っておらず、preswald.tomlのキーやコンポーネントの挙動が変わる前提でバージョンを固定して使うのが現実的だ。

編集部の結論

受け渡し先にPython環境を用意させたくない分析者、機密データを手元から出さずにUIを作りたいチーム、オフラインやエアギャップ環境で動くレポートが必要な現場には向いている。逆に、常時更新される大規模データのサーバーサイド集計、認証や権限管理を伴う社内ポータル、ユーザーごとに異なるデータを返すアプリには向かない。導入前に確認すべきは、自分のデータ量がPyodideのメモリに収まるか、そして必要なPythonライブラリがWASM向けにビルドされたホイールとして存在するか。この2点はpreswald exportの成否を分ける。

公式情報源

  1. License: Apache-2.0
  2. Project website
  3. README
  4. Releases
  5. StructuredLabs/preswald on GitHub
コミュニティノート

コミュニティノート