= marimo = <> == marimo とは? == marimo は Python 用のノートブック環境です。コードをセル単位で実行し、結果やグラフをその場に表示できます。Jupyter と似ていますが、marimo はセル間の依存関係を解析し、必要なセルだけを再実行する *リアクティブ実行モデル* を採用している点が大きな違いです。 また、ノートブックは `.ipynb` ではなく *通常の Python ファイル (`.py`)* として保存されるため、Git 差分が読みやすく、スクリプトとしても扱いやすいのが利点です。 == インストール == 解析環境(仮想環境)にインストールします。 {{{ mamba install -c conda-forge marimo }}} == 1. ローカルで使う (推奨: まずはここから) == ブラウザ上で動作する標準インターフェースです。JupyterLab と同様に、ローカルでサーバを立ち上げてブラウザで操作します。 === 起動 === 作業ディレクトリで以下を実行します。 {{{ marimo edit }}} ブラウザが開き、marimo の編集画面が表示されます。 === 新しいノートブックの作成 === 空の Python ファイルを作ってから起動するのが分かりやすいです。 {{{ touch analysis.py marimo edit analysis.py }}} 作成されるノートブックは `.py` 形式で保存されます。 === 終了方法 === ブラウザを閉じ、ターミナルに戻って `Ctrl + C` を押すとサーバが停止します。 --- == marimo のセル (Code / Markdown) == marimo には主に 2 種類のセルがあります。 * *Code セル*: Python コードを書くセル * *Markdown セル*: 説明やメモ、数式、画像などを書くセル Markdown セルでは一般的な Markdown が使えます。画像は `![alt](path/to/image.png)` のように書いて表示できます。 == Jupyter との重要な違い == marimo は Jupyter と似ていますが、初心者に影響が大きい違いがあります。 === 実行順の考え方 === * Jupyter: セルは好きな順番で実行できる(''実行順によって状態が壊れやすい'') * marimo: 依存関係に基づいて必要なセルだけが更新される(''状態の一貫性を保ちやすい'') === ファイル形式 === * Jupyter: `.ipynb`(JSON) * marimo: `.py`(通常の Python) Git 管理・レビュー・再利用で扱いやすいです。 === `!` でシェルコマンド実行はできる? === 結論: ''できません''。 Jupyter の `!ls` や `!pip install` のような記法は marimo では使えません。シェル操作が必要な場合は次のどちらかにします。 * ターミナルで直接実行する * Python の `subprocess` でコマンドを呼ぶ 例: {{{ import subprocess subprocess.run(["ls", "-l"], check=False) }}} == 2. VS Code と併用する == marimo のノートブックは `.py` なので、VS Code で通常の Python と同じように編集できます。典型的には次の運用になります。 1. VS Code で `analysis.py` を編集する 2. ターミナルで `marimo edit analysis.py` を実行する 3. ブラウザで実行結果・グラフを確認する == リモートサーバでの利用 == リモートサーバ上で marimo を動かし、手元の PC から操作する方法です。 === 方法A: VS Code Remote - SSH (推奨) === VS Code の Remote - SSH を使うと、サーバ内で marimo を起動しつつ、手元で操作しやすくなります。 1. 手元の VS Code に拡張機能 '''Remote - SSH''' をインストールする 2. サーバに SSH 接続する 3. サーバ側で `marimo edit analysis.py` を実行する 4. VS Code のポート転送機能(Forwarded Ports)を使ってブラウザで開く === 方法B: SSH ポートフォワード === 1. '''サーバ側''': ポートを固定して起動します。 {{{ [user@server ~]$ marimo edit analysis.py --host 0.0.0.0 --port 8888 }}} 2. '''手元の PC''': 別ターミナルでポートフォワードします。 {{{ [local ~]$ ssh -N -L 8888:localhost:8888 user@server }}} 3. '''手元のブラウザ''': `http://localhost:8888` にアクセスします。 ssh にアクセスできず困ったら {{{ killall -9 ssh }}} == 便利なショートカットキー == marimo の UI は更新される可能性があるため、まずは以下だけ覚えておくとよいです。 * `Ctrl + S`: 保存 * `Ctrl + C`: ターミナル側でサーバ停止(ブラウザを閉じた後) (セル操作のショートカットは UI のバージョンにより変わることがあるため、画面上のヘルプ表示を参照してください) == まとめ == * marimo は Python のノートブック環境で、''実行順に依存しにくい'' のが強み * ノートブックが `.py` で保存され、Git 管理や再利用がしやすい * Jupyter の `!` によるシェル実行はできないため、ターミナルや `subprocess` を使う