marimo 解説:リアクティブな Python ノートブックをテスト可能なスクリプトにする
依存グラフ、純粋な Python ファイル、組み込み SQL、UI 部品、アプリ配信、WebAssembly 実行を公式資料から整理し、再現性と制約を評価します。
位置付けと現在の動き
marimo は通常の `.py` ファイルとして保存されるリアクティブな Python ノートブックで、変数の定義と参照がセル間の依存関係になります。取得時点で 21,925 Star、30 日間に約 171 コミット、最新リリースは 0.23.14 でした。隠れた状態、古い実行結果、レビューしにくい JSON 差分を設計規則で減らす点が主眼です。
用途と主要機能
データ探索、SQL 分析、モデル実験、教材、対話型レポート、社内ツールに利用できます。スライダー、表、フォームなどの UI 値を Python に渡し、SQL セルからデータフレームを得られます。同じファイルをノートブックとして編集し、スクリプトとして実行し、読み取り専用アプリとして配信できます。AI 支援は任意です。
リアクティブ実行の仕組み
各セルが定義・参照する名前を静的に調べ、有向非巡回の依存グラフを作ります。変数が変わると影響する下流セルだけをトポロジカル順に実行し、セル削除時には定義も消します。同じ変数を複数セルで定義することは許されません。重い処理は遅延できますが、オブジェクトの破壊的変更は名前の解析で検知できない場合があります。
技術構成とファイル形式
バックエンドとノートブックは主に Python、ブラウザー UI は TypeScript と React です。ファイルは import、テスト、Git 差分確認ができる Python プログラムです。アプリモードでは UI の値がバックエンド計算を起動します。WebAssembly 版は Pyodide でブラウザー内実行を行い、サーバー不要の共有に向く一方、パッケージ、資源、通信、永続化に制約があります。
最短の導入手順
`pip install marimo` で導入し、`marimo tutorial intro` で規則を確認するか、`marimo edit notebook.py` で作成します。`marimo run notebook.py` は読み取り専用アプリ、`python notebook.py` はスクリプト実行です。既存ノートブックを変換した後は、ウィジェット、拡張、マジックコマンド、環境依存を個別に検証してください。
利点と制約
純粋な Python 保存はレビュー、整形、import、テストに有利で、依存駆動の実行は手動順序による古い結果を減らします。一方、単一定義とリアクティブ規則を受け入れる必要があります。外部副作用、グローバル状態、破壊的変更が中心のコードは修正が必要です。大規模グラフの再計算、Jupyter 拡張との差、既存教材も移行判断に影響します。