marimo で LMStudio を使ってみる
こんにちは、初めましての方は初めまして。かわらです。つい四日前にMastra でローカルの LLM を使ったエージェントを作るという記事も書いているのでぜひ読んでください。唐突な宣伝ですみません!
この記事は「【2nd】Studist Tech Advent Calendar 2025」の 18 日目の記事です。marimo という Python のノートブックツールがかなり良いと最近よく耳にすることが多いので、この記事ではその marimo を触ってみるついでに AI を用いた機能の裏側を LMStudio で動かしてみようと思います。
この記事でやりたいこと
- marimo をサクッと試してみる
- AI 機能の裏側の LLM を LMStudio でホストする
以上の二点を試していこうと思います。
marimo を使ってみる
marimo のインストールと立ち上げ
僕は uv で環境構築をしていたため、uv add marimo でインストールしました。それ以外のツールでもインストール出来るので、ドキュメント[1]を読んで適宜インストールしてください。インストール後に uv run marimo edit hello.py のようにファイルを指定して立ち上げると、ターミナルにアドレスが表示されると思います。そのアドレスにアクセスすると、Jupyter notebook と同じようにブラウザで notebook を編集するための画面が開きます。

marimo を立ちあげた時の画面
この時点ですでにモダンな感じが漂っています(頭の悪そうなコメント)色々良さそうな点はありますが、以下では個人的に役立ちそうだと思った機能に関してピックアップして紹介していきたいと思います。
marimo を試してみる
まずは公式のここの動画を見てみてください(埋め込まれている動画も MNIST の埋め込みを可視化してインタラクティブに操作していてかなり良さそうですが、video とリンクが貼ってあるやつの方が marimo で出来ることが分かりやすいと思います)例えば変数を変えるとそれに依存している markdown セルの内容が変わっていることや、スライダーの UI を簡単に追加でき、かつその変数と markdown セルの内容が連動出来ていることが分かるかと思います。
また、埋め込みの可視化についても勝手に依存関係を認識し、セルを実行し直していることが分かるかと思います(エラーが消えている部分)Jupyter notebook では自分でそれぞれのセルを実行し直さないといけないため、実行順序を間違ってしまって変な結果が出力されたり、実行を忘れてエラーが出たりすることも多いかと思います。しかし marimo では、依存関係にあるセルを再実行してくれます(上の動画でも紹介されていた markdown 埋め込み変数の反映も、この再実行の結果だと思います)

SQL 文をセル内で書く例
また、上の画像のように SQL 文をセル内に直接書いてその結果を取得することも出来ます。デフォルトでは DuckDB をサポートしているようですが、PostgreSQL や MySQL, Snowflake などとも接続できます[2]。この記事の後半でも試してみますが、AI にコードを書かせることも出来ます。最近は AI に実装を任せることも多いので、この機能があるのは個人的に嬉しいところです。
Jupyter notebook との比較
AI ツールとの連携のしやすさ
Jupyter では notebook のファイルを ipynb という拡張子で保存しています。この中身は JSON 形式であり、書いたコードを Python としてテストしたり他のモジュールで読み込んだりする場合は Python のコードに変換する必要があります。また、セルを直接編集できる AI ツールが少ないため、AI ツールと連携することが難しい場合が多いです。marimo ではファイル自体は Python のコードとして保存されているため、このデメリットはありません。つまり Python コードとして編集することも出来るので AI コーディングツールとの連携もしやすいです。
git で管理する時の違い
また、Jupyter notebook ではコード自体は変わっていなくても実行するだけで JSON 自体が変わります。このため、git などで管理していると人の目には何も変わっていないのに差分が生じるといったことが起こります。marimo ではそのような差分は生じないため、ローカルで実行しても git が差分を検出するといったことはありません。その一方で、marimo には出力がファイルには保存されないため、その時点での解析結果を共有したいときに共有しづらいといった不便さはあります[3]。また、ファイル自体は Python なので、GitHub 上で見た時に notebook のようにはレンダリングされない(ただの Python ファイルとして表示される)といったデメリットもあります。実際に採用する際はここら辺を考慮するといいかもしれません。
marimo が向いているタスク
marimo は個人的には探索的データ分析のような、インタラクティブにコードを実行して結果を解釈していくようなタスクに向いているかと思います。もちろんコードをちょっと試してみるという点でも使えると思いますが、やりたいことが決まっているなら AI に任せても大丈夫です。しかし、データ分析は最初にやりたいことが確定していることは少なく、「どういう分析をするか」をその時その時で変えながら実装していくことも多いかと思います。そのような時に、可視化するための機能が揃っている marimo がかなり役立つのではと思います。また、実装したコードを他のモジュールでも使いたくなった場合にインポートしやすいのも利点化と思います(Jupyter notebook ではこの点がデメリットとして挙げられることも多いですね)
LMStudio の LLM を使ってみる
marimo には AI 機能が備わっており、AI とのチャット機能や AI によるコーディング生成機能が使えます。この機能を使用するためには各プロバイダーの API キーを登録して使用するほか、独自のプロバイダを登録して使用することも出来ます。ここでは、LMStudio でホストした LLM を独自のプロバイダとして登録して使用してみようと思います。

チャット UI を開いた画面
marimo の画面で左に並んでいるロボットみたいなアイコンを押すと、チャット用の UI が表示されると思います。ここの歯車から設定を開きましょう(もしくは右上のハンバーガーメニューから "User settings" を選択して開きましょう)

設定画面を開いたら、AI Providers の OpenAI-Compatible を開き、Base URL に LMStudio のローカルの URL を貼り付けます(/v1 まで含めないと API が叩けないので気を付けましょう)API キーを設定している場合は入力しておきましょう。僕はローカルで使うだけなので特に設定はしていません。

次に AI Models のタブを開いて Add Model をクリックし、LMStudio のモデルを登録します。Provider には "Custom" を選び、Model にはモデルの ID を入力します(今回は OpenAI の gpt-oss-20b を使ったので、その ID を入力します)また、Name には分かりやすい名前を入力しておきましょう。
以上で準備は完了です。ここでは例としてチャットを使用してみます。先ほど設定したモデルが一覧に追加されていると思うので、それを選択してテキストを投げてみます。

モデル選択の例

チャット例
LMStudio の LLM を使ってテキストを生成できました!(自信度が高い… その自信を僕にも分けてほしい…)コード生成でも同じように自分で設定したモデルを選択して生成が出来ます。こちらはセル追加時のオプションで "GENERATE WITH AI" を選択し、生成して欲しいコードの内容を記述することで生成できます。
感想
この記事では marimo について簡単に試し、AI 機能の裏側を LMStudio でホストしてみました。LMStudio は OpenAI 互換の API を備えているため、OpenAI と連携しているツールとすぐに連携しやすい点がいいですね。
marimo は Jupyter notebook のデメリットを多く改善しており、個人的にはデータ分析がめちゃくちゃしやすい点、実行するだけだと git 差分が出ない点が嬉しいです。まだ新しいツールということもあって大規模な開発に導入するには不安な点はあるものの、体験自体はかなり良いのでこれから notebook をする際の選択肢に加えるのはかなりアリなのではと思いました。
Discussion