🐍

Jupyterからmarimoへ

に公開

これは Zenn 初投稿の記事です!!!
読みづらい部分や誤りがあれば、ぜひコメントで教えていただけると嬉しいです!

Jupyter Notebook から marimo に移行して感じたこと

最近、Jupyter Notebook から marimo に移行しました。
その中で感じた悩みや、marimo を使って「これは良い!」と思ったポイントをまとめます。

Jupyter Notebook を使っていたときの悩み

ipynb は git で管理しづらい

  • Jupyter は JSON 形式なので、meta data や実行回数などが大量に差分として出てしまい読みにくい
  • marimo 側のブログでも「Jupyter の diff は巨大で読みづらい」問題が指摘されている
  • pre-commit で自動整形したり、nbstripout を試したりもしたが、根本的に扱いづらい

セル順序を無視した「再現できない状態」ができあがる

  • 自分の使い方が悪いのもあるが、試行錯誤しているうちに 内部状態がぐちゃぐちゃになる
  • 最初から実行するとエラーが出るのに、今の状態では動く…というノートブックが量産されていた

そんな中で「marimo」と出会う

  • Jupyter の“隠れた状態”問題を解決しようとしている

  • Git フレンドリー(.py で保存)

  • セル依存関係の自動管理

    など、“Jupyter の弱いところ”を全部埋めるような設計になっていた


🐍 marimo とは?

marimoはリアクティブなPythonノートブックです:セルを実行したりUI要素を操作すると、marimoは自動的に依存するセルを実行(またはそれらを古いものとしてマーク)し、コードと出力の一貫性を保ちます。

marimoノートブックは純粋なPythonとして保存され、スクリプトとして実行でき、アプリとして展開できます。

ー README_Japanese より

https://github.com/marimo-team/marimo/blob/main/README_Japanese.md

まとめると…
Jupyter Notebook を代替でき、Git で管理しやすく、UI 付きアプリにもなる “モダンな Python Notebook”


実際に使って感動したポイント

  1. .py で保存されるので git 管理が爆ラク
  • 差分が小さく、PR レビューしやすい
  • JSON 山盛りの diff を見る必要がない
  1. セルの依存関係を自動処理してくれる
  • あるセルを変えると、自動的に「依存セル」も再実行
  • 一貫性が保たれるため、「再現できないノートブック問題」が消える
  1. 変数の再定義に厳しい(安全)
  • 他のセルと名前が衝突したら教えてくれる

    → 思わぬ上書きバグが防げて安心

  1. marimo コマンドひとつで “アプリ化” できる
marimo run notebook.py
  • アプリとして UI 付きで動く
  • 配布も簡単
  1. セル依存関係を DAG っぽく可視化
  • どのセルがどこに依存しているか一目でわかり、構造が見える化される

まだ使いこなせていないけど良さそうな機能

  • UI コンポーネント(スライダー、ドロップダウンなど)が標準搭載

  • AI 機能(API key 設定で利用可能)

  • ノートブックは Python だが

    mo.md()Markdown、ビルトインで SQL も扱える

    → Python / Markdown / SQL を 1 つにまとめられる

  • scratchpad

    • ノートブックとは独立した一時的な環境
    • 気に入ったコードはそのままノートブックに挿入可能

まだ慣れていない部分

  • VS Code の Jupyter 拡張に慣れすぎており、同じ機能が使えないものもある
  • ショートカットを少し覚え直す必要がある 設定から変更できました。
  • VS Code から marimo を直接プレビューできるらしいが、まだやれていない

自分が marimo を使うときの基本フロー

# PowerShell
uv venv
.\.venv\Scripts\activate
uv pip install marimo

# 新規 notebook を作成して開く
marimo edit sandbox.py

よく使う marimo コマンド

コマンド 内容
marimo edit ファイル名 ファイルがなければ新規作成し、編集 UI を開く
marimo run ファイル名 読み取り専用のアプリとして実行

marimo コードの構造

marimo の notebook は、以下のような Python ファイルとして保存される:

import marimo

app = marimo.App()

@app.cell
def _(a):
    x = a + 1
    return x
  • 各セルは @app.cell デコレータで定義

  • セルの依存関係は入力(引数)と出力(return)から自動推論される

  • 実行結果やセッション情報は、

    プロジェクト内の __marimo__/session/ 以下に JSON としてキャッシュされる

アンダースコア変数で「セルローカル」にできる

marimo では、変数名がアンダースコア(_)で始まると、その変数はセルローカルとして扱われます

  • _tmp などの変数は、**他のセルからは参照できない。**セルの引数やreturnに指定されなくなる
  • 複数のセルで同じ名前の _tmp を使っても衝突しない
  • そのセルの中でしか使わない一時変数に向いている

まとめ

Jupyter Notebook の不満(Git diff 問題・再現性問題)を抱えている人にとって、

marimo はかなり有力な選択肢だと感じています。

  • Git で扱いやすい
  • セルの依存関係が自動管理され、再現性が高い
  • UI 付きアプリにもなる
  • Python / Markdown / SQL を統合して扱える

今後も使い込みながら、さらに便利な使い方があれば追記していく予定です。

Discussion