Marimo - Python向けオープンソースのReactive Notebook
(github.com/marimo-team)- データとモデルを使ってすばやく試せるノートブック
- セル単位で実行、自動計算と更新
- 隠れた状態がなく、常に再実行可能
- Pythonファイルとして保存されるためGit-Friendly
- ノートブックをパイプライン化したり、インタラクティブなWebアプリとしてデプロイ可能
リアクティブプログラミング環境
- marimoは、ノートブックのコード、出力、プログラム状態の一貫性を保証する。
- セルを実行すると、marimoがその変数を参照しているセルを自動更新し、手動でセルを再実行する際のミスを防ぐ。
- セルを削除すると、marimoがプログラムメモリからその変数を取り除き、隠れた状態をなくす。
- ノートブックは変数参照に基づく決定的な順序で実行され、ページ上のセル位置には依存しない。
- スライダー、ドロップダウン、データフレーム変換器のようなUI要素とやり取りすると、その値を使うセルが自動的に最新の値で再実行される。
- marimoはコードを静的解析し、実行が必要なセルだけを実行することで性能を向上させる。
- marimoには、GitHub Copilot、Blackコードフォーマッティング、HTMLエクスポート、高速なコード補完、VS Code拡張機能など、さまざまな便利機能が含まれる。
クイックスタート
- インストール: ターミナルで
pip install marimoまたはconda install -c conda-forge marimoを実行してmarimoをインストールする。 - ノートブック作成:
marimo editorで空のノートブックを作成し、marimo edit your_notebook.pyで特定名のノートブックを編集する。 - アプリ実行:
marimo run your_notebook.pyを実行して、Webアプリとしてノートブックを動かす。このアプリはmarimoクラウドにデプロイされる。 - スクリプトとして実行:
python your_notebook.pyを実行してmarimoノートブックをスクリプトとして動かす。 - Jupyterノートブックの自動変換: CLIを使ってJupyterノートブックをmarimoノートブックへ自動変換する。
- チュートリアル:
marimo tutorial --helpを実行して、すべてのチュートリアルを一覧表示する。
さらに詳しく
- marimoは初心者でも簡単に始められ、上級ユーザー向けの多様な機能も提供する。
- たとえば、marimoで作られた埋め込み可視化ツール(動画)を確認できる。
- ドキュメント、
examples/フォルダ、ギャラリーから、さらに多くの情報を得られる。
インスピレーション
- marimoは、再現可能で、インタラクティブで、共有可能なPythonプログラムとしてPythonノートブックを再発明する。
- 使うツールが思考様式を形作るという信念のもと、Pythonコミュニティにより良いプログラミング環境を提供したいと考えている。
- Pluto.jl、ObservableHQ、Bret Victorのエッセイなど、多くの場所やプロジェクトから着想を得ている。
- marimoは、IPyflow、streamlit、TensorFlow、PyTorch、JAX、Reactなどの機能的・宣言的・リアクティブプログラミングのアイデアが多様なツールを改善していく、より大きなリアクティブデータフロープログラミング運動の一部である。
GN⁺の意見
- marimoは、従来のJupyterノートブックのようなツールの限界を克服しようとする革新的なリアクティブPythonノートブックであり、データやモデルの実験、ノートブックの正確性への確信、さらにパイプラインやインタラクティブなWebアプリとしての実用化を可能にする。
- このツールはコードの一貫性と再現性を重視し、ユーザーインターフェース要素との相互作用を簡素化することで、プログラミング体験を改善する。
- marimoは、データサイエンス、研究、教育分野での協業と共有を容易にし、コミュニティ形成を通じてユーザー同士の相互作用と知識共有を促進するプラットフォームを提供する。
1件のコメント
Hacker Newsの意見
JupyterとObservableノートブックのユーザーとして、Observableにはセルのリアクティブ性が不足していると感じていたが、この問題をうまく解決していると思う。Marimoのファイル形式がPythonなのも良いし、Apache 2ライセンスなのも気に入っている。GitHub Copilotの機能発見には感心した。
Jupyter Notebookを使う共同作業者との仕事では、環境設定とJupyterの隠れた状態が問題だった。このプロジェクトは後者の問題を解決しようとしているが、その代わりに柔軟性を犠牲にしている。再現性を重視するなら、これは妥協点になりうる。
requirements.txtは別の問題に対する標準的な解決策だが、使うのが面倒だ。requirements.txtの利用は煩雑だと感じており、よりよい解決策を望んでいる。ついに誰かがこれに取り組んでくれていてうれしい。Vscode拡張機能はあるが、Vscodeの既存のノートブックインターフェースではなく、ブラウザ全体のビューを開く点は残念だ。パッケージ管理と本番コードのデプロイについての考えも共有している。
プラットフォームについていくつか質問がある。インタラクティブウィジェット、Jupyterエコシステムへの依存関係や相互作用について説明してほしい。
Jupytext拡張機能は過小評価されていると思う。Jupyterのgitとの相互作用の問題や、ライブラリファイル作成を妨げるプログラミング慣行の問題を解決してくれる。この新しいプロジェクトのリアクティブな更新は、初心者や複雑なプロジェクトに役立ちそうだ。
依存関係の一覧が短く、tornado以外には多くの追加依存を引き込まない。とても便利でクールなプロジェクトに見える。
Marimoは素晴らしいと思う。markdownでmermaid.jsをサポートすることを検討しているのか気になる。
Marimoの創設者であるAkshayとMylesのファンだ。Jupyterの競合が現れたことで、科学ツールのエコシステムに良い影響があることを期待している。
Quartoは、このスレッドで言及されているJupyterの問題の多くを解決していると思う。NIHでもQuartoの利用が推奨されており、トレーニングも提供されている。
同じ変数を何度も定義するのはエラーだ。理由は明らかだ。ただし、その変数が最初に使われるセルでしか使われないなら、変数名の再利用は可能であるべきだ。