🤖

ローカルLLM入門!LM Studioをバックグラウンドで実行しObsidianと連携する

に公開

はじめに

生成AI盛り上がってますね。私は置いていかれています。

そんな私、奇遇なことに30コアGPUを積んだMacBookを持っているではないですか。
本当は最近キラキラなAI(Devin, Claude Codeなど)を使いたいのですが、時代に逆行してローカルLLMに入門してみます。

この記事では以下のことをします。

  • LM Studioに入門
  • Obsidianと連携
  • LM Studio CLIを使ってバックグラウンドで実行

一応、ObsidianというのはMarkdownのノートアプリです。本記事では詳しく解説しません。

デモ

本記事の手順を最後まで実施すると、LM Studioのデスクトップアプリを立ち上げることなく、ObsidianからローカルLLMを使えるようになります。

https://x.com/r4ynode/status/1949366858710417906

PCスペックはこちら

https://support.apple.com/ja-jp/117736

良ければ

以下の記事では、技術イベントの音声を文字起こししています。整理されていない大量のテキストを、Gemini CLIを使わず、オフラインで要約したいと考えたことがローカルLLMに興味を持ったきっかけです。ぜひ読んでみてください!

https://zenn.dev/r4ynode/articles/audio-transcription-using-openai-whisper

ローカルLLMについて

ローカルLLMとは

ローカルLLMとは、「大規模言語モデル(LLM: Large Language Model)」をインターネットを介することなく、自分のパソコンやサーバーなどのローカル環境で動かすことです。データを外部に送信することなく、プライバシーを保護しながらAIの機能を利用できます。

ローカルLLMツール

ローカルLLMができるツールをいくつか調べてみました。

  • LM Studio
  • Ollama
  • GPT4All
  • LangChain
  • Llama.cpp
  • AMD Gaia

LM StudioはGUIが用意されており、初心者でも簡単に扱えるそうなので、今回はLM Studioを使ってみます。

LM Studio

LM Studioとは、ローカル環境でLLMを簡単に実行できるアプリケーションです。

GUIが用意されており、技術的なハードルが低く、初心者でも扱いやすいのが特徴です。モデルのダウンロードから実行まで、すべてGUI上で完結します。

ここで一つ押さえておきたいのは、LM Studioは非常にOpenAIライクなインターフェースを持っていることです。公式ドキュメントにも頻繁にOpenAIという言葉が使われています。

LM Studioは業務利用でも無料

これまでは個人利用の範囲では無料でしたが、2025年7月8日に業務内でも無料で利用可能になりました。ただし、商用サービスとしての提供は禁止されていることには注意が必要です。詳しくは公式の情報を参照してください。

https://lmstudio.ai/blog/free-for-work

環境構築

公式サイトからLM Studioをダウンロードできます。

https://lmstudio.ai/

モデルのダウンロード

LM StudioはHugging Faceに公開されているモデルを簡単にダウンロード・実行できます。今回はGoogleが開発したGemmaモデルを使用します。Googleの有名なGeminiファミリーと同じテクノロジーを使用して構築されており、Geminiの軽量バージョンのようなものです。

LM Studioデスクトップアプリを起動し、左側のサイドバーにある検索アイコンの「Discover」からモデルを検索できます。「gemma」と入力すると、ダウンロードできるモデルの一覧が表示されます。今回は「google/gemma-3-12b」をダウンロードします。

download-gemma

モデルをダウンロードしただけでは使用できません。ダウンロードしたモデルをメモリにロードします。上部の「Select a model to load」から「gemma-3-12b」を選択するとロードできます。

developer-console
load-gemma

チャットする

左側のサイドバーにあるチャットアイコンの「Chat」に遷移すると、チャットできます。

chat-gemma

ChatGPTみたいですね!先ほど述べた通り、UIやAPI等のインターフェースはOpenAIライクに実装されています。

Obsidianと連携

いよいよObsidianとLM Studioを連携させてみます。今回はSmart Composerプラグインを使用して、Obsidian上からローカルLLMを実行します。

LM Studioのローカルサーバーを起動

LM Studioのデスクトップアプリ以外からローカルLLMを使うためには、LM Studioのローカルサーバーを起動する必要があります。再び「Developer」に遷移し、以下の設定を行います。

  • StatusをRunningに設定
  • Enable CORSを有効化

Server Portの番号は任意です。今回はデフォルトの1234を使用します。Serve on Local Networkを有効化すると、ローカルネットワーク上の他のデバイスからもアクセス可能になります。今回は使用しません。

local-server-gui

上記の設定を終えると、Developer Logsにエンドポイントが表示されます。これでLM Studio側の準備完了です。

GET  http://localhost:1234/v1/models
POST http://localhost:1234/v1/chat/completions
POST http://localhost:1234/v1/completions
POST http://localhost:1234/v1/embeddings

Smart Composerの導入

今回、ObsidianでAI機能を使うためにSmart Composerを利用します。Smart ComposerはVSCodeやCursorのAI機能に近い体験をObsidian上で提供してくれます。

Smart Composerのインストール

Obsidianのコミュニティプラグインから「Smart Composer」をインストールして有効化します。

install-smart-composer

Smart Composerの設定画面で以下を設定します。

Providers

Providersのlm-studioの設定に以下を入力します。

  • API Key: 空欄
  • Base URL: http://localhost:1234

smart-composer-providers

Models

モデルはデフォルトで用意されていないので、「Add custom model」から登録します。

  • ID: gemma-3-12b(任意)
  • Provider ID: lm-studio
  • Model Name: google/gemma-3-12b
  • Prompt Level: default

smart-composer-models

Obsidianから使う

Smart Composerからgoogle/gemma-3-12bを選択して質問を投げかけてみましょう!

https://x.com/r4ynode/status/1949366262569836564

良い感じですね!
少し気になる点として、Applyに時間がかかると感じました。

LM Studio CLI

おいおい、LM Studioのデスクトップアプリを立ち上げているじゃないか!

と思った方、落ち着いてください。これから説明します。

調べてみると、LM Studioはデスクトップアプリで有名に思えますが、実はCLIツールも提供しています。これを使うことで、LM Studioの機能をコマンドラインから操作できるようになります。LM Studio CLIを使うことで、バックグラウンドでLM Studioを実行できるのです!

環境構築

LM Studio CLIのインストール方法と使い方は以下の公式ドキュメントに載っています。

https://lmstudio.ai/docs/cli

LM Studioにはコマンドラインツールが付属しており、デスクトップアプリをダウンロードすると一緒にインストールされています。ただし、コマンドラインツールのパスを通す必要があるため、以下のコマンドを実行する必要があります。

# Macの場合のインストール方法
$ ~/.lmstudio/bin/lms bootstrap
$ sudo ~/.lmstudio/bin/lms bootstrap # 権限でエラーが出る場合はsudoをつけて実行

install-lms

ダウンロードが完了すると、注意事項にある通り、新規でターミナルを開く必要があります。新しくターミナルを開いてlmsを実行してみましょう。

$ lms

lms

カッコいいですね!

CLIを使ってバックグラウンドで実行

バックグラウンドで実行してみましょう。これから実行するコマンドは、実はGUIで行っていた操作と同じことをするだけです。

# CORSを有効化し、ポート1234でローカルサーバーを起動
$ lms server start --cors --port 1234
W CORS is enabled. This means any website you visit can use the LM Studio server.
Starting server...
Success! Server is now running on port 1234

# ダウンロード済みモデルの一覧の確認
$ lms ls

You have 3 models, taking up 25.03 GB of disk space.

LLMs (Large Language Models)      PARAMS      ARCHITECTURE          SIZE
google/gemma-3-27b                               gemma3         16.87 GB
google/gemma-3-12b                               gemma3          8.07 GB

Embedding Models                          PARAMS      ARCHITECTURE          SIZE
text-embedding-nomic-embed-text-v1.5                   Nomic BERT       84.11 MB

# モデルをロード
$ lms load

! Use the arrow keys to navigate, type to filter, and press enter to select.

? Select a model to load | google/gemma-3-12b
Loading model "google/gemma-3-12b"...
Model loaded successfully in 7.63s. (8.07 GB)
To use the model in the API/SDK, use the identifier "google/gemma-3-12b".
To set a custom identifier, use the --identifier <identifier> option.

# サーバーのステータス確認
$ lms status

   ┌ Status ──────────────────────────────┐
   │                                      │
   │   Server:  ON  (Port: 1234)          │
   │                                      │
   │   Loaded Models                      │
   │     · google/gemma-3-12b - 8.07 GB   │
   │                                      │
   └──────────────────────────────────────┘

これで準備完了です!LM Studioのデスクトップアプリとターミナルを完全に終了してから、Obsidianで再度実行してみましょう。

https://x.com/r4ynode/status/1949366858710417906

うまくいきましたね!

サーバーを停止する場合は以下のコマンドを実行します。

# サーバーの停止
$ lms server stop
Stopped the server on port 1234.

まとめ

LM Studioを使ってローカルLLMに入門し、Obsidianと連携させてみました。オフライン環境で生成AIが実行できるのは感動しますね。

言うまでもありませんが、検索や開発を行う場合は、ChatGPTやClaude Codeに勝てるはずもありません。

ただ、ドキュメント作成や要約などの単純なタスクを実行する場合は、ローカルLLMでも十分に活用できると思いました。この前も、WiFiが提供されていない技術イベントの会場で要約タスクを実行させましたが、精度に関しては十分なものでした。

LM Studioは非常に簡単にローカルLLMができるので、ぜひ使ってみてください!

参考

Discussion