【要約】GitHub Pages × marimo WASMで、サーバーなしのPythonデータ分析ダッシュボードを構築してみた [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
筆者は、サーバー費用をかけずにGitHub Pagesのみで、インタラクティブなデータ分析ページを公開したいと考えていた。しかし、静的ホスティング環境でPythonを動かすWASM環境特有の制約に直面した。具体的には以下の問題が発生した。
- ・ローカルのPythonモジュールがWASM側に存在せず、
ModuleNotFoundErrorが発生する。 - ・Polarsがブラウザの仮想ファイルシステムを参照し、意図したCSVファイルを読み込めない。
- ・パス指定の誤りにより、CSVの代わりに
index.htmlが返され、解析エラーを引き起こす。
// Approach
筆者は、marimoのWebAssembly HTMLエクスポート機能を採用し、実行環境に応じて挙動を切り替える実装を行った。具体的には以下の手法で課題を解決した。
- ・実行環境の判定:
try-exceptを用いて、ローカルでは既存モジュールを、WASM環境ではCSV読み込み関数を束縛する。 - ・データ取得の抽象化:
urllib.requestでHTTP経由でCSVを取得し、io.BytesIOを介してPolarsに渡す。 - ・デプロイの自動化:GitHub Actionsを用い、データの事前集計、WASM HTMLの生成、CSVの配置、デプロイを一貫して行う。
// Result
筆者は、サーバーを一切立てることなく、GitHub Pages上でPolarsとAltairを用いた高度なデータ分析ダッシュボードの公開に成功した。
- ・運用コストの最小化:静的ホスティングのみで完結するため、インフラ管理が不要となった。
- ・開発体験の向上:
.py形式でのGit管理と、ノートブック形式での試行錯誤がそのまま公開に直結する。 - ・ユーザー体験の向上:読者がUI操作を通じて、動的にグラフや集計結果を更新できる環境を提供できた。
Senior Engineer Insight
> 本手法は、データストーリーテリングや軽量な社内ダッシュボードの構築において、極めて高い費用対効果を発揮する。サーバーレスゆえに運用負荷はほぼゼロだが、WASM特有のファイルシステム制約やパス解決の複雑さを理解しておく必要がある。大規模データには不向きだが、事前集計済みの軽量なCSVを扱う用途であれば、開発から公開までのリードタイムを劇的に短縮できる優れたアプローチである。