こんばんは、mirukyです。
今回は、ローカルLLMをテーマに、完全オフラインで動作するAI開発環境をゼロから構築していきます。
ChatGPTやClaude、Geminiなどのクラウド型AIは非常に便利ですが、こんな課題を感じたことはありませんか?
これらの課題を一気に解決するのが、ローカルLLMです。このアプローチでは、手元のPC上でAIモデルを直接実行するため、外部への通信が一切不要です。
本記事では、Ollamaを中心に、VS Codeでのコード補完、ターミナルでのAIペアプログラミング、ChatGPTライクなWebUI、ローカルRAGまで、実用的な開発環境をフルスタックで構築します。
| 比較項目 | クラウドAPI(GPT-4o/Claudeなど) | ローカルLLM(Ollama) |
|---|---|---|
| コスト | 従量課金(月数千〜数万円) | 初期投資のみ(電気代のみ) |
| プライバシー | データがクラウドに送信される | データが一切外部に出ない |
| オフライン | 不可(ネット必須) | 完全オフラインで動作 |
| レート制限 | あり(RPM/TPM制限) | なし(無制限) |
| レイテンシ | ネットワーク遅延あり | ローカル処理で低遅延 |
| モデル品質 | 最高品質 | 用途次第で十分実用的 |
| カスタマイズ | 限定的 | モデルの微調整が自由 |
セキュリティ要件が厳しい開発
コスト最適化
安定性・可用性
ローカルLLMの現実的な品質について
2026年現在、7B〜14Bクラスのローカルモデルでも、コード補完・リファクタリング・テスト生成といった開発タスクでは十分に実用的な品質に達しています。一方で、複雑な設計判断やアーキテクチャレベルの相談はクラウドAPIの方が優れています。両者を適材適所で使い分けるのがベストプラクティスです。
LLMの動作に最も重要なのはメモリ(RAM / VRAM) です。以下は量子化モデル(Q4_K_M)を使用した場合の目安です。
| モデルサイズ | 必要メモリ目安 | 対応できるMacの例 | 対応できるGPUの例 |
|---|---|---|---|
| 1B〜3B | 2〜4 GB | MacBook Air(8GB) | GTX 1060(6GB) |
| 7B〜8B | 5〜8 GB | MacBook Pro(16GB) | RTX 3060(12GB) |
| 14B | 10〜14 GB | MacBook Pro(18GB) | RTX 4070(12GB) |
| 32B〜35B | 20〜28 GB | MacBook Pro(36GB) | RTX 4090(24GB) |
| 70B | 40〜48 GB | Mac Studio(64GB) | A6000(48GB) |
| Llama 4 Scout(109B MoE) | 67 GB | Mac Studio(96GB以上) | H100(80GB) |
メモリ不足時の挙動
メモリが足りない場合、モデルの一部がCPU側のRAMにオフロードされます。動作はしますが、トークン生成速度が大幅に低下します(10倍以上遅くなることも)。快適に使うには、モデル全体がGPU VRAM(または Apple Silicon の統合メモリ)に収まるサイズを選びましょう。
| 項目 | スペック |
|---|---|
| マシン | MacBook Air M2/M3(16GB) |
| 推奨モデル | 7B〜8Bクラス |
| 用途 | コード補完、チャット、簡単なRAG |
| 体感速度 | 15〜25 tokens/sec |
| 項目 | スペック |
|---|---|
| マシン | MacBook Pro M3 Pro/Max(36GB〜) |
| 推奨モデル | 14B〜32Bクラス |
| 用途 | 高品質コード生成、RAG、マルチタスク |
| 体感速度 | 20〜40 tokens/sec |
| 項目 | スペック |
|---|---|
| マシン | Mac Studio M2 Ultra(192GB)/ NVIDIA H100搭載サーバー |
| 推奨モデル | 70B〜Llama 4 Scout |
| 用途 | 大規模RAG、複数人同時利用、本番ワークロード |
| 体感速度 | 30〜60 tokens/sec |
Apple Siliconが強い理由
Apple Silicon(M1〜M4)は、CPUとGPUが同じ統合メモリを共有しているため、NVIDIAのようにVRAM容量の制約を受けにくいのが特徴です。64GBや96GBの統合メモリを搭載できるMac Studioは、ローカルLLM用途では非常にコストパフォーマンスが高い選択肢です。
Ollamaは、ローカルでLLMを簡単に実行・管理できるオープンソースツールです。2026年3月現在、v0.18.0が最新の安定版リリースです。v0.18.0では ollama launch コマンドが追加され、Claude Code・Codex・OpenClawなどの外部ツールとワンコマンドで連携できるようになりました。
| 項目 | 内容 |
|---|---|
| 最新バージョン | v0.18.0 |
| 対応OS | macOS / Linux / Windows |
| ライセンス | MIT |
| GitHub Stars | 約165K |
| 対応モデル数 | 数百以上(Llama 4, Qwen3.5, Qwen3-Coder, DeepSeek-R1, Gemma3 等) |
| API互換性 | OpenAI 相容 API(/v1/chat/completions) |
方法1:公式サイトからダウンロード(推奨)
https://ollama.com/download からアプリをダウンロードし、Applicationsフォルダにドラッグ&ドロップします。
方法2:ターミナルからインストール
curl -fsSL https://ollama.com/install.sh | sh
curl -fsSL https://ollama.com/install.sh | sh
方法1:PowerShellからインストール
irm https://ollama.com/install.ps1 | iex
方法2:インストーラーをダウンロード
https://ollama.com/download からインストーラー(OllamaSetup.exe)をダウンロードして実行します。
# モデルをダウンロードして対話モードで起動
ollama run qwen2.5-coder:7b
# モデルの一覧を確認
ollama list
# モデルのダウンロードのみ(起動しない)
ollama pull deepseek-r1:8b
# モデルの削除
ollama rm qwen2.5-coder:7b
# Ollamaのバージョン確認
ollama --version
# Claude CodeやCodexとの連携(v0.18.0〜)
ollama launch claude
ollama launch codex
Ollamaはデフォルトで localhost:11434 にAPIサーバーを公開します。
# OpenAI互換APIでリクエスト
curl http://localhost:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen2.5-coder:7b",
"messages": [
{"role": "user", "content": "Pythonでフィボナッチ数列を生成する関数を書いて"}
]
}'
# モデル情報の確認
curl http://localhost:11434/api/show \
-d '{"name": "qwen2.5-coder:7b"}'
OpenAI互換APIの利点
OllamaはOpenAI相容のAPIエンドポイント(/v1/chat/completions)を提供しているため、OpenAI SDKをそのまま使うことができます。既存のOpenAI向けコードを最小限の変更でローカルLLMに切り替えられるのが大きなメリットです。
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama" # 任意の字串でOK
)
response = client.chat.completions.create(
model="qwen2.5-coder:7b",
messages=[{"role": "user", "content": "Hello!"}]
)
print(response.choices[0].message.content)
| モデル | パラメータ | 特徴 | Ollamaコマンド |
|---|---|---|---|
| Qwen3-Coder | 30B(3.3B active)/ 480B | 最新Qwen。MoEで軽量高性能。エージェント向け | ollama run qwen3-coder:30b |
| Qwen2.5-Coder | 7B / 14B / 32B | コード特化。補完精度が非常に高い | ollama run qwen2.5-coder:7b |
| Devstral | 24B | Mistral製。コーディングエージェント向け | ollama run devstral |
| Codestral | 22B | Mistral製。コード生成に特化 | ollama run codestral |
| DeepSeek-Coder | 6.7B / 33B | コード補完・生成に強い | ollama run deepseek-coder:6.7b |
コーディングにおすすめの1本
メモリ16GBのマシンなら Qwen2.5-Coder:7b が最もバランスが良いです。コード補完の精度、日本語対応、速度のいずれも高水準です。32GB以上あるなら Qwen3-Coder:30b(MoEにより実質3.3Bのアクティブパラメータで動作、ダウンロードサイズ19GB)が最新のおすすめです。エージェント機能やリポジトリ全体の理解力に優れています。
| モデル | パラメータ | 特徴 | Ollamaコマンド |
|---|---|---|---|
| Qwen3.5 | 4B / 9B / 27B / 35B | 最新Qwen。マルチモーダル・推論対応 | ollama run qwen3.5:9b |
| Qwen3 | 8B / 14B / 30B / 32B | thinking対応。推論タスクに強い | ollama run qwen3:8b |
| Gemma3 | 4B / 12B / 27B | Google製。軽量で高性能 | ollama run gemma3:12b |
| DeepSeek-R1 | 8B / 14B / 32B / 70B | 推論特化。数学・コーディングに強い | ollama run deepseek-r1:8b |
| Llama 4 Scout | 109B(MoE、17B active) | Meta最新。10Mコンテキスト | ollama run llama4:scout |
Llama 4はMetaが2025年4月にリリースした最新モデルで、Mixture-of-Experts(MoE)アーキテクチャを採用しています。
| 項目 | Llama 4 Scout | Llama 4 Maverick |
|---|---|---|
| 総パラメータ数 | 109B | 400B |
| アクティブパラメータ | 17B | 17B |
| エキスパート数 | 16 | 128 |
| コンテキスト長 | 10M tokens | 1M tokens |
| Ollamaダウンロードサイズ | 67GB | 245GB |
| マルチモーダル | テキスト + 画像 | テキスト + 画像 |
| 必要メモリ | 67GB以上 | 245GB以上 |
Llama 4 Scoutのローカル実行について
Llama 4 Scoutは67GBのダウンロードサイズで、最低でも96GB以上の統合メモリ(Mac Studio等) が必要です。一般的なノートPCでの実行は現実的ではありません。手軽に試したい場合は、Qwen3.5やGemma3などの7B〜14Bクラスのモデルから始めることをおすすめします。
RAG(検索拡張生成)で使用する埋め込みモデルも、Ollamaでローカル実行できます。
| モデル | パラメータ | 特徴 | Ollamaコマンド |
|---|---|---|---|
| nomic-embed-text | 137M | 高性能な汎用埋め込みモデル | ollama pull nomic-embed-text |
| mxbai-embed-large | 335M | mixedbread.ai製。高精度 | ollama pull mxbai-embed-large |
| bge-m3 | 567M | BAAI製。多言語対応 | ollama pull bge-m3 |
Continueは、VS CodeとJetBrainsに対応したオープンソースのAIコードエージェントです。Ollamaと接続することで、完全ローカルで動作するGitHub Copilotの代替環境を構築できます。
| 項目 | 内容 |
|---|---|
| VS Codeインストール数 | 236万以上 |
| GitHub Stars | 31.9K |
| ライセンス | Apache 2.0 |
| 主な機能 | Agent / Chat / Edit / Autocomplete / CI Checks |
| 対応プロバイダー | Ollama, OpenAI, Anthropic, Google 等 |
Continueの設定ファイル(~/.continue/configs/config.yaml)を以下のように編集します。
# ~/.continue/configs/config.yaml
name: Local Ollama Config
version: 0.0.1
schema: v1
models:
- name: Qwen2.5-Coder 7B
provider: ollama
model: qwen2.5-coder:7b
apiBase: http://localhost:11434
roles:
- chat
- edit
- apply
- name: Qwen2.5-Coder 7B (Autocomplete)
provider: ollama
model: qwen2.5-coder:7b
apiBase: http://localhost:11434
roles:
- autocomplete
- name: Nomic Embed Text
provider: ollama
model: nomic-embed-text
apiBase: http://localhost:11434
roles:
- embed
簡単なセットアップ方法
Autodetect機能を使うと、ローカルにインストール済みのOllamaモデルを自動検出できます。
models:
- name: Autodetect
provider: ollama
model: AUTODETECT
roles:
- chat
- edit
- autocomplete
サイドバーのContinueパネルからAIとチャットできます。コードを選択してから質問すると、そのコードのコンテキストを踏まえた回答を得られます。
使用例:
このコードをリファクタリングしてこの関数のユニットテストを書いてこのエラーの原因を教えてコードを書いている最中に、AIがリアルタイムで補完候補を提示します。Tab キーで確定できます。
Autocomplete用のモデル選び
Autocompleteは応答速度が重要なため、軽量なモデルが適しています。Qwen2.5-Coder:7bは補完精度と速度のバランスが良く、おすすめです。メモリに余裕があれば14Bにすると補完品質がさらに向上します。
コードを選択して Cmd+I(Mac)/ Ctrl+I(Windows/Linux)を押すと、選択範囲に対する修正指示をAIに出せます。ファイルを離れることなく、その場でコードを修正できます。
Continueのエージェント機能を使うと、AIが複数ファイルにまたがるタスクを自律的に実行します。ターミナルコマンドの実行や、ファイルの作成・編集も可能です。
aiderは、ターミナル上でAIとペアプログラミングできるオープンソースツールです。コードベース全体のマップを生成し、複数ファイルにまたがる変更を一括で行えます。
| 項目 | 内容 |
|---|---|
| GitHub Stars | 42K |
| PyPIダウンロード数 | 570万以上 |
| ライセンス | Apache 2.0 |
| 対応言語 | 100言語以上 |
| Git連携 | 自動コミット対応 |
| 最新バージョン | v0.86.0 |
# aiderのインストール
python -m pip install aider-install
aider-install
# Ollamaのモデルを使って起動(ollama_chat/ プレフィックスが推奨)
cd /path/to/your/project
aider --model ollama_chat/qwen2.5-coder:7b
Ollamaがバックグラウンドで起動していることを確認してから、上記コマンドを実行します。
ollama_chat/ と ollama/ の違い
aiderの公式ドキュメントでは、ollama/ ではなく ollama_chat/ プレフィックスの使用が推奨されています。ollama_chat/ はチャット形式のAPIを使用し、より正確な応答が得られます。
aiderを起動すると対話型のプロンプトが表示されます。
# ファイルをチャットに追加
/add src/main.py src/utils.py
# AIにコード変更を依頼
> この関数にエラーハンドリングを追加して
# 変更をGitにコミット
# → aiderが自動的にコミットしてくれる
# Webページを参考にコード修正
/web https://docs.example.com/api-reference
# 変更を元に戻す
/undo
リポジトリマップ
aiderはコードベース全体の構造を解析し、AIに提供します。そのため、1つのファイルだけでなく、関連するファイル間の依存関係を理解した上で変更を行えます。
自動Gitコミット
AIが行った変更は、適切なコミットメッセージとともに自動的にGitにコミットされます。気に入らない変更は git diff で確認し、/undo で即座に元に戻せます。
IDEとの併用
aiderはターミナルで動作するため、VS CodeなどのIDEと同時に使えます。aiderでコードを変更すると、IDEにリアルタイムで反映されます。IDEのコメントに ai! と書くとaiderが自動検知してその指示を実行する watchモード も搭載されています。
aiderのローカルLLM利用時の注意点
aiderはクラウドのLLM(Claude Sonnet 4.6、DeepSeek等)で最も高い性能を発揮します。ローカルの7B〜14Bモデルでは、大規模なリファクタリングや複雑な変更は精度が落ちる場合があります。ただし、テスト追加、バグ修正、小〜中規模の機能追加といったタスクでは十分に実用的です。
Open WebUIは、Ollamaと連携してChatGPTライクなWebインターフェースを提供するオープンソースプロジェクトです。ブラウザから手軽にローカルLLMを利用でき、RAG機能やユーザー管理も内蔵しています。
| 項目 | 内容 |
|---|---|
| GitHub Stars | 128K |
| ライセンス | Open WebUI License |
| 最新バージョン | v0.8.10 |
| 対応バックエンド | Ollama / OpenAI互換API |
| RAG対応 | あり |
| ベクターDB対応 | 9種類のベクターDB対応 |
| オフラインモード | 対応 |
docker run -d -p 3000:8080 \
--add-host=host.docker.internal:host-gateway \
-v open-webui:/app/backend/data \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:main
起動後、ブラウザで http://localhost:3000 を開きます。初回アクセス時にアカウントを作成すると、すぐにOllamaのモデルとチャットできます。
# CPU版
docker run -d -p 3000:8080 \
-v ollama:/root/.ollama \
-v open-webui:/app/backend/data \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:ollama
# NVIDIA GPU版(Ollama同梱)
docker run -d -p 3000:8080 --gpus=all \
-v ollama:/root/.ollama \
-v open-webui:/app/backend/data \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:ollama
GPU版の補足
Ollama同梱版でGPUを使う場合は、:ollama イメージに --gpus=all フラグを追加します。:cuda タグはOllamaを同梱しない単体版のGPU対応イメージです。NVIDIA CUDA Container Toolkitの事前インストールが必要です。
pip install open-webui
open-webui serve
# → http://localhost:8080 でアクセス
チャットインターフェース
複数のモデルを切り替えながらチャットできます。会話履歴の保存、検索、エクスポートにも対応しています。
RAG(Retrieval Augmented Generation)
ドキュメントをアップロードすると、自動的にベクトル化されてRAGで活用できます。チャット中に # を入力するとドキュメントを参照できます。
Web検索統合
SearXNG、Google、Brave Searchなど15以上の検索エンジンと連携し、Web検索結果を回答に反映できます。
マルチモデル対話
複数のモデルに同じ質問を同時に投げて、回答を比較する機能があります。モデルの性能を比較する際に便利です。
オフラインモード
環境変数 HF_HUB_OFFLINE=1 を設定することで、完全オフラインで動作します。
チーム利用時のポイント
Open WebUIはユーザー管理とロールベースのアクセス制御(RBAC)を備えています。管理者が利用可能なモデルやモデルの作成・削除権限を制御できるため、チームでの利用にも適しています。LDAP/Active Directoryとの連携やSSOにも対応しています。
ローカルRAGは、ドキュメント検索とLLMによる回答生成を組み合わせた仕組みです。すべての処理がローカルで完結するため、社内文書や機密情報をAIに参照させる場合に最適です。
[ドキュメント] → [Embedding] → [ベクトルDB] → [検索] → [LLM] → [回答]
↑ ↑ ↑
ローカルファイル Ollama Ollama
(nomic-embed-text) (qwen2.5-coder:7b)
| コンポーネント | ツール | 役割 |
|---|---|---|
| LLM | Ollama(qwen2.5-coder:7b等) | 回答生成 |
| Embeddingモデル | Ollama(nomic-embed-text) | テキストのベクトル化 |
| ベクトルDB | ChromaDB | ベクトルの保存・検索 |
| フレームワーク | LangChain | 各コンポーネントの統合 |
# 必要なパッケージのインストール
pip install langchain langchain-ollama langchain-chroma langchain-community chromadb
# Embeddingモデルのダウンロード
ollama pull nomic-embed-text
# LLMモデルのダウンロード(まだの場合)
ollama pull qwen2.5-coder:7b
以下は、ローカルのMarkdownファイルを読み込んでRAGを構築するPythonスクリプトです。
from langchain_ollama import OllamaLLM, OllamaEmbeddings
from langchain_chroma import Chroma
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains import RetrievalQA
from langchain_community.document_loaders import DirectoryLoader, TextLoader
# 1. ドキュメントの読み込み
loader = DirectoryLoader(
"./docs", # ドキュメントが格納されたディレクトリ
glob="**/*.md", # Markdownファイルを対象
loader_cls=TextLoader,
loader_kwargs={"encoding": "utf-8"}
)
documents = loader.load()
print(f"読み込んだドキュメント数: {len(documents)}")
# 2. テキストの分割(チャンク化)
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500, # 1チャンクあたりの最大文字数
chunk_overlap=50, # チャンク間のオーバーラップ
separators=["\n\n", "\n", "。", "、", " "]
)
chunks = text_splitter.split_documents(documents)
print(f"チャンク数: {len(chunks)}")
# 3. Embeddingモデルの設定(Ollama経由)
embeddings = OllamaEmbeddings(
model="nomic-embed-text",
base_url="http://localhost:11434"
)
# 4. ベクトルDBへの保存
vectorstore = Chroma.from_documents(
documents=chunks,
embedding=embeddings,
persist_directory="./chroma_db" # ローカルに永続化
)
# 5. LLMの設定(Ollama経由)
llm = OllamaLLM(
model="qwen2.5-coder:7b",
base_url="http://localhost:11434"
)
# 6. RAGチェーンの構築
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vectorstore.as_retriever(search_kwargs={"k": 3}),
return_source_documents=True
)
# 7. 質問に回答
query = "このプロジェクトのAPI仕様を教えて"
result = qa_chain.invoke({"query": query})
print(f"\n質問: {query}")
print(f"回答: {result['result']}")
print(f"\n参照ドキュメント:")
for doc in result["source_documents"]:
print(f" - {doc.metadata.get('source', 'unknown')}")
# docsディレクトリを作成してドキュメントを配置
mkdir -p docs
# ドキュメントファイルを docs/ に配置
# スクリプトの実行
python rag_local.py
実行すると、./chroma_db にベクトルデータが永続化されます。2回目以降は既存のベクトルDBを再利用できるため、Embeddingの再計算は不要です。
Open WebUIのRAG機能との使い分け
コードや情報に機密性はあるか?
├─ はい → ローカルLLM一択
└─ いいえ
├─ 複雑なアーキテクチャ設計や推論か?
│ ├─ はい → クラウドAPI(Claude/GPT-4o等)
│ └─ いいえ
│ ├─ コード補完・リファクタリング? → ローカルLLM
│ ├─ テスト生成・バグ修正? → ローカルLLM
│ └─ ドキュメント生成? → どちらでもOK
└─ オフライン環境か? → ローカルLLM一択
| タスク | 推奨環境 | 理由 |
|---|---|---|
| コード補完(日常的) | ローカル(Qwen2.5-Coder:7b) | 低遅延、無課金、大量利用 |
| インライン編集 | ローカル(Continue) | レスポンス速度重視 |
| テスト生成 | ローカル(aider) | パターン化されたタスク |
| 複雑なリファクタリング | クラウド(Claude Sonnet 4.6) | 高い推論能力が必要 |
| アーキテクチャ設計相談 | クラウド(GPT-5/Claude) | 広い知識ベースが必要 |
| 社内ドキュメント検索 | ローカルRAG | 情報漏洩防止 |
| コミットメッセージ生成 | ローカル | 定型タスク |
| コードレビュー | クラウド or ローカル | 規模による |
Ollama v0.18.0からは、クラウドモデルもサポートされています。ローカルモデルとクラウドモデルをシームレスに切り替えることができます。
# ローカルモデルで実行
ollama run qwen2.5-coder:7b
# クラウドモデルで実行(:cloud タグ)
ollama run nemotron-3-super:cloud
ollama run qwen3.5:cloud
段階的な移行がおすすめ
いきなりすべてをローカルLLMに移行するのではなく、まずはコード補完をローカルに切り替えるところから始めましょう。ローカルLLMの品質と使い勝手を体感した上で、徐々に適用範囲を広げていくのが現実的です。
ここまでお読みいただきありがとうございます。
今回は、Ollamaを中心としたローカルLLM開発環境をフルスタックで構築しました。
今回構築した環境の全体像:
| レイヤー | ツール | 役割 |
|---|---|---|
| LLMランタイム | Ollama | モデルの実行・管理 |
| コーディング支援 | Continue(VS Code) | コード補完・チャット・編集 |
| ターミナルAI | aider | AIペアプログラミング |
| WebUI | Open WebUI | ChatGPTライクなチャットUI |
| RAG | LangChain + ChromaDB | ローカルドキュメント検索 |
| Embedding | nomic-embed-text | テキストのベクトル化 |
これらすべてが完全にローカルで動作し、外部への通信が一切不要です。
2026年現在、ローカルLLMの品質は急速に向上しており、開発タスクの多くをカバーできる段階に達しています。クラウドAPIと適切に使い分けることで、コスト削減・プライバシー保護・可用性向上のすべてを両立できます。
ぜひ、まずはOllamaをインストールして ollama run qwen2.5-coder:7b からお試しください。
ではまた、お会いしましょう。