🪅

Jupyterよりも marimoが使いやすい理由

に公開

みなさん、marimoってご存じですか?
https://docs.marimo.io/
最近marimoを触ってみたんですが、これが思った以上に便利でびっくりしました。
このツールだけで完結できる場面が多くて、しかもUIがリアルタイムに反応してくれるので、作っていてすごく楽しいんです🎶
驚くほど簡単で直感的に使えますし、「試してみたい!」と気持ちがどんどん湧いてきました。

というわけで、この記事ではそんなmarimoの魅力や、基本的な使い方について紹介していきたいと思います。
ちょっとでも「面白そう」と思ってもらえたら嬉しいです。

はじめに

Pythonでデータ分析や機械学習をするとき、まず思い浮かぶのが Jupyter Notebook という人も多いんじゃないでしょうか。
定番ツールとして長く使われてきたJupyterですが、実際に使ってみると「セルの実行順がバラバラになって混乱する」「どこで何が定義されてるか分かりづらい」「Gitで管理しづらい」など、地味に困るポイントもあります。

そこで登場したのが、marimoリアクティブな実行モデルとGitフレンドリーな設計を持つ、次世代のPythonノートブックです。

marimoとは?

marimoは、リアクティブに動作するPythonノートブック環境です。
一言でいうと、コードを書いたらすぐ反映される、しかも整合性が保たれるという気持ちよさがあるツールです。

セルを実行すると、関連するセルも自動で再実行されるので、「あれ、どこで定義したっけ?」とか「順番間違えて動かない…」のようなJupyterあるあるが起きにくいです。コードと出力が常に一致しているというのは、地味だけどすごくありがたいと思います。


リアクティブなプログラミング環境
下のセルを実行すると、上のセルの結果も自動で変わります。
これは、marimoがセル同士の関係を「DAG(有向非巡回グラフ)」として管理しているからです。
※そのため、異なるセル間で変数を再代入したり、変数同士が循環的に依存するような関係を定義することはできません。

また、ノートブックは .py ファイルとして保存されるので、Gitでの管理もスムーズです。
履歴が追いやすくて、チームでの開発にも向いてます。
作ったノートブックをそのままWebアプリとして公開するのも簡単なので、ちょっとしたツールやデモをサクッと共有できるのも嬉しいポイントです。

Jupyterとの比較

jupyterを使い慣れている方にとっては、「いったい何がどう違う?」「jupyterで十分では」と思うかもしれません。
そこで、Jupyterとmarimoの違いをざっくり表にまとめてみました👇

比較項目 Jupyter Notebook marimo
実行順序 セルの順番に依存 依存関係に基づいて自動再実行(リアクティブ)
UI連携 ipywidgetsなどで手動設定 mo.uiで簡単に連携、値変更で自動更新
ファイル形式 .ipynb(JSON) .py(Git管理に最適)
再現性 セッション状態に依存 状態が明示的に管理され、常に一貫性あり
アプリ化 別ツールが必要 marimo runでWebアプリ化可能

さらに実際に私が使ってみて便利だと感じたのが、必要なライブラリが足りないときに、画面上でインストール方法やバージョンを選べること。 そして、エラーが出たときには内容をもとに自動で修正してくれる機能が備わっていることです。


install
初心者の私にとって、同じ画面上でGUI操作ができ、そのままライブラリをインストールできるのがすごく便利で安心感がありました。


fix エラーの自動修正提案
さらに、エラー内容に「コピー」ボタンが表示されるため、そのままクリップボードに保存できます。
調べたり共有しやすいのは嬉しいポイントです。

marimoの主な機能と特徴

公式ドキュメントの内容を引用してご紹介します。

⚡️ リアクティブ実行:依存セルが自動更新される
🖐️ インタラクティブUI:スライダー・テーブル・チャートなどを簡単に追加
🐍 Gitフレンドリー:ノートブックは.py形式で保存
🛢️ SQL対応:Python変数を使ったSQLクエリが可能
🤖 AI補完:データに特化したAIアシスタントでコード生成
🔬 再現性重視:隠れた状態なし、決定論的な実行順序
🛜 Webアプリ化:ノートブックをそのままWebアプリやスライドに変換
🧪 テスト可能:pytestでノートブックをテスト
⌨️ モダンエディタ:Copilot、Vim操作、変数ビューアなどを搭載


埋め込みビジュアライザー

実際に使ってみよう

環境:Windows11
パッケージのインストールにはuvを使用したので、そちらのコマンドも併せて紹介していきます。

marimoのインストール

pip install marimo
uv add marimo #uv経由

チュートリアルを起動する

marimo tutorial intro
uv run marimo tutorial intoro  #uv経由

marimoのチュートリアル画面が表示されます。

ノートブックを新規作成・編集する

新規作成(空のノートブック)

marimo edit my_notebook.py
uv run marimo edit my_notebook.py  #uv経由

このコマンドで my_notebook.py というPythonファイルが作成され、marimoのエディタが起動します。

既存ノートブックの編集

すでにある .py ファイルを編集したい場合も同様に

marimo edit existing_notebook.py
uv run marimo edit existing_notebook.py  #uv経由

ノートブックをWebアプリとして実行

作成したノートブックをアプリとして起動するには、

marimo run my_notebook.py
uv run marimo run my_notebook.py  #uv経由

この状態では、コードは非表示になり、UIだけが表示されるWebアプリとして動作します。

marimo活用例:デモ

UI連携:mi.slider を使ってインタラクティブなスライダーを作成し、サイン波の周波数を変更しながらリアルタイムに描画します。

# cell: スライダーの作成
import marimo as mo

slider = mo.ui.slider(1, 10, value=5, label="周波数")
slider
# cell: スライダーの値に応じて描画
import numpy as np
import matplotlib.pyplot as plt

# スライダーの値を取得
freq = slider.value

# データ生成
x = np.linspace(0, 2 * np.pi, 500)
y = np.sin(freq * x)

# 描画
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title(f"sin({freq}x)")
ax.grid(True)
fig


スライダーの値を変更すると、それに応じて周波数もリアルタイムに更新され、グラフが描画されます。

おわりに

marimoは、Jupyterが抱える課題をうまく解決してくれる新しいノートブック環境です。

特にこんな人にはおすすめなのではないでしょうか:

  • セルの実行順や状態の再現にいつも悩まされている

  • ノートブックをGitでちゃんと管理したい

  • インタラクティブなデータ分析や教育用コンテンツを作ってみたい

  • PythonスクリプトをそのままWebアプリとして公開したい!

今後は、AIによるコード補完やSQLとの連携、クラウド上での共有(molab)といった機能も活用し、データ分析や教育、アプリ開発など、さまざまなシーンでmarimoが活躍してくれるはずです!

今回紹介したもの以外にも、面白そうで実用的な機能がたくさんありそうです。
(https://docs.marimo.io/guides/working_with_data/plotting/#altair) marimo guideより

Discussion