marimo

marimo(マリモ)はJupyterに代わるPythonノートブックツールです。ファイルがJupyterの*.ipynbのようなJSONではなく、そのまま実行できる*.pyです。また、セルの実行順序がグローバル変数の依存関係によって自動的に定まります。

インストールは

pip install marimo

または推奨パッケージも含めてインストールするなら

pip install "marimo[recommended]"

とします。インストールしたら

marimo edit test.py

と打ち込むと、カレントディレクトリの test.py に紐付けられたノートブックがデフォルトのブラウザで開きます。test.py が存在しないか空の場合は、ノートブックも空です。カレントディレクトリに __marimo__ というディレクトリができて、その中にセッション情報が書き込まれます。

最初は空のセルが一つあるはずですので、その中に例えば

3+4

のような計算式を書き込んで、Jupyter や Google Colaboratory と同様に Ctrl + Enter(Macでは + Enter)すると、セルが実行され、計算結果 7 が現れます。

ノートブックの下には「PYTHON」「MARKDOWN」「SQL」「GENERATE WITH AI」というボタンがあります。「PYTHON」をクリックすると、Pythonコードを書き込むためのセルが追加されます(あるいは実行する際に Shift + Enter とすれば、実行後に新しいセルができ、そこにカーソルが移ります)。

もう一つやってみましょう。

import sys

sys.version

これを同様に実行すると、動いているPythonのバージョン情報が表示されます。

import matplotlib.pyplot as plt

plt.plot([-1, 1])
plt.title("グラフ")

でグラフが出ます。日本語もちゃんと表示されることをご確認ください。

セルに書き込んだ内容は、最初に指定した test.py に自動保存されるはずです(あるいは右側の下にある 💾 のアイコンをクリックすると保存されます)。上の例は、おおよそ次のような感じで保存されます。

import marimo

__generated_with = "0.17.7"
app = marimo.App(width="medium")

@app.cell
def _():
    3+4
    return

@app.cell
def _():
    import sys

    sys.version
    return

@app.cell
def _():
    import matplotlib.pyplot as plt

    plt.plot([-1, 1])
    plt.title("グラフ")
    return

if __name__ == "__main__":
    app.run()

marimoの便利な機能として、次のようにスライダーが簡単に作れます。

import marimo as mo

slider = mo.ui.slider(1, 10, value=1, label="n")
slider

スライダーの値を他のセルで使うと、インタラクティブな図が作れます。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi, 201)
plt.plot(x, np.sin(slider.value * x))
plt.title(f"sin {slider.value}x")

OpenAI APIなどを設定すると、AIにコードを書いてもらうこともできます。設定内容は、設定ファイル ~/.config/marimo/marimo.toml に保存されます。

終わったら、ノートブックの右上にある×ボタン(Shutdown)で閉じます。シャットダウンせずにブラウザのページを閉じた場合は、最初に打ち込んだコマンド marimo edit test.pyCtrl + C で停止します。

既存の*.ipynbファイルは marimo convert foo.ipynb -o foo.py でmarimo用Pythonファイルに変換できます。逆は marimo export ipynb foo.py -o foo.ipynb です。marimo convert foo.py -o bar.py で一般のPythonファイルをmarimo用Pythonファイルにすることもできます。

グローバル変数はセルをまたいで意味を持ちますが、JupyterやGoogle Colabと違って、別のセルで再定義することはできません。例えば

x = 2
x = x + 1

は大丈夫ですが、

x = 2

x = x + 1

が別のセルにあったらエラーになります。特にデータフレームを表す df などは少しずつ再定義することがよくあるので、注意が必要です。

!pwd など !% で始まるコマンドは使えません。基本的にシェルコマンドは最下部のボタンでターミナルを開いて打ち込み、% で始まるマジックコマンドは Coming from Jupyter の指示に従って書き換える必要があります。