この記事の対象読者
- ローカルでLLMを動かしたいが、ビルドとか面倒なことは避けたい方
- コマンドラインが好きなエンジニア
- 開発中のアプリにローカルLLMを組み込みたい方
- プライバシーを重視してAIを使いたい方
この記事で得られること
- Ollamaが何者で、なぜ人気なのかの理解
- インストールから実運用までの完全な手順
- OpenAI互換APIを使った既存アプリとの連携方法
- Modelfileによるカスタムモデルの作成
この記事で扱わないこと
- llama.cppのソースコードレベルの解説
- モデルのファインチューニング
- Ollama Turbo(クラウドサービス)の詳細
1. Ollamaとの出会い
「llama.cppをビルドするのが面倒すぎる」
正直に白状しよう。私がOllamaを使い始めた理由は、怠惰だった。llama.cppは素晴らしいが、毎回cmakeでビルドして、モデルをダウンロードして、パスを指定して...という作業が億劫だったのだ。
そんなとき出会ったのがOllama。
Ollamaとは、一言でいうと「ローカルLLMの『Homebrew』」である。
# これだけでLLMが動く
ollama run llama3.2
たったこれだけ。ビルド不要、パス指定不要、依存関係の解決も不要。
Homebrewがbrew installでソフトウェアをインストールするように、Ollamaはollama runでAIモデルをダウンロードして実行する。2025年現在、ローカルLLM界で最も人気のあるツールのひとつとなっている。
ここまでで、Ollamaがどんなものか、なんとなくイメージできたでしょうか。次は、この記事で使う用語を整理しておきましょう。
2. 前提知識の確認
本題に入る前に、この記事で登場する用語を確認します。
2.1 Modelfileとは
Dockerfileに似た、モデルの設定ファイル。ベースモデル、システムプロンプト、パラメータなどを定義できる。Ollamaの強力なカスタマイズ機能の中核である。
2.2 OpenAI互換APIとは
OpenAIのAPIと同じエンドポイント・フォーマットで動作するAPI。これにより、OpenAI向けに作られたアプリケーションをほぼ無改造でローカルLLMに切り替えられる。
2.3 OCI(Open Container Initiative)とは
コンテナイメージの標準規格。Ollamaはこの規格を利用してモデルを管理している。Dockerイメージと同じように、モデルにタグをつけてバージョン管理できる。
これらの用語が押さえられたら、Ollamaの背景を見ていきましょう。
3. Ollamaが生まれた背景
3.1 開発の経緯
Ollamaは2023年後半に登場した。llama.cppの強力な推論エンジンを、誰でも簡単に使えるようにラップしたツールとして開発された。
3.2 解決しようとした課題
| 従来の課題 | Ollamaの解決策 |
|---|---|
| llama.cppのビルドが複雑 | ワンライナーでインストール |
| モデルのダウンロード管理が面倒 |
ollama pullで一発 |
| 設定ファイルが煩雑 | Modelfileで宣言的に管理 |
| APIサーバー構築が必要 | 起動時に自動でサーバー起動 |
3.3 2025年の主要アップデート
Ollamaは2025年に大きな進化を遂げた。
| 時期 | アップデート |
|---|---|
| 2025年7月 | ネイティブデスクトップアプリ(macOS/Windows) |
| 2025年8月 | Ollama Turbo(クラウドサービス)プレビュー開始 |
| 2025年 | ストリーミングTool Calling対応 |
| 2025年 |
ollama launchコマンド追加(Claude Code等との連携) |
| 2025年 | thinking(思考過程)の表示/非表示切り替え |
背景がわかったところで、基本的な仕組みを見ていきましょう。
4. 基本概念と仕組み
4.1 アーキテクチャ概要
Ollamaは以下の構造で動作する。
┌─────────────────────────────────────────────────────┐
│ Ollama │
├─────────────────────────────────────────────────────┤
│ CLI / Desktop App │
│ (ユーザーインターフェース) │
├─────────────────────────────────────────────────────┤
│ Ollama Server │
│ - モデル管理 │
│ - APIエンドポイント │
│ - メモリ管理 │
├─────────────────────────────────────────────────────┤
│ llama.cpp │
│ (推論エンジン) │
├─────────────────────────────────────────────────────┤
│ ハードウェア │
│ CPU / CUDA / Metal / ROCm │
└─────────────────────────────────────────────────────┘
4.2 モデル管理の仕組み
Ollamaはモデルをレイヤー構造で管理する。
モデル: llama3.2:latest
├── ベースレイヤー(重みデータ)
├── パラメータレイヤー
├── テンプレートレイヤー
└── システムプロンプトレイヤー
この構造により、カスタムモデルを作る際も、差分だけを保存すればよい。
4.3 サポートされているハードウェア
| ハードウェア | サポート状況 | 備考 |
|---|---|---|
| CPU | ◎ | AVX2推奨 |
| NVIDIA GPU | ◎ | CUDA対応 |
| Apple Silicon | ◎ | Metal最適化 |
| AMD GPU | ○ | ROCm対応(Linux/Windows) |
| Intel GPU | △ | 限定的サポート |
基本概念が理解できたところで、実際にコードを書いて動かしてみましょう。
5. 実践:実際に使ってみよう
5.1 環境構築
インストールは驚くほど簡単。
# macOS / Linux
curl -fsSL https://ollama.com/install.sh | sh
# Windows
# https://ollama.com/download からインストーラーをダウンロード
# インストール確認
ollama --version
5.2 環境別の設定ファイル
Ollamaの設定は環境変数で管理する。プロジェクトごとに設定ファイルを用意すると便利だ。
開発環境用(.env.development)
# .env.development - 開発環境用(そのままコピーして使える)
OLLAMA_HOST=127.0.0.1:11434
OLLAMA_MODELS=/home/user/.ollama/models
OLLAMA_NUM_PARALLEL=2
OLLAMA_MAX_LOADED_MODELS=2
OLLAMA_KEEP_ALIVE=5m
OLLAMA_DEBUG=1
OLLAMA_FLASH_ATTENTION=1
本番環境用(.env.production)
# .env.production - 本番環境用
OLLAMA_HOST=0.0.0.0:11434
OLLAMA_MODELS=${MODEL_DIR:-/var/lib/ollama/models}
OLLAMA_NUM_PARALLEL=8
OLLAMA_MAX_LOADED_MODELS=4
OLLAMA_KEEP_ALIVE=24h
OLLAMA_DEBUG=0
OLLAMA_FLASH_ATTENTION=1
OLLAMA_NO_CLOUD=1
テスト環境用(.env.test)
# .env.test - CI/CD用
OLLAMA_HOST=127.0.0.1:11434
OLLAMA_MODELS=/tmp/ollama/models
OLLAMA_NUM_PARALLEL=1
OLLAMA_MAX_LOADED_MODELS=1
OLLAMA_KEEP_ALIVE=30s
OLLAMA_DEBUG=1
OLLAMA_LOAD_TIMEOUT=60s
5.3 基本的な使い方
モデルの取得と実行
# モデルをダウンロードして対話開始
ollama run llama3.2
# 特定のバージョンを指定
ollama run llama3.2:8b
# モデル一覧の確認
ollama list
# モデルの削除
ollama rm llama3.2
APIの利用
# Ollamaサーバーが起動していることを確認(通常は自動起動)
ollama serve
# Chat Completions API(OpenAI互換)
curl http://localhost:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama3.2",
"messages": [
{"role": "user", "content": "日本で一番高い山は?"}
]
}'
# 生成API(Ollama独自)
curl http://localhost:11434/api/generate \
-d '{"model": "llama3.2", "prompt": "Hello!"}'
Pythonからの利用
"""
OllamaをPythonから利用するサンプル
実行方法: pip install ollama && python ollama_example.py
"""
import ollama
def main():
"""メイン処理"""
# シンプルなチャット
response = ollama.chat(
model='llama3.2',
messages=[
{'role': 'user', 'content': 'Pythonの良いところを3つ教えて'}
]
)
print(response['message']['content'])
# ストリーミング
print("\n--- ストリーミング出力 ---")
stream = ollama.chat(
model='llama3.2',
messages=[{'role': 'user', 'content': '短い俳句を作って'}],
stream=True
)
for chunk in stream:
print(chunk['message']['content'], end='', flush=True)
print()
if __name__ == "__main__":
main()
OpenAI SDKとの互換利用
"""
OpenAI SDKでOllamaを利用(ドロップイン置換)
実行方法: pip install openai && python ollama_openai_compat.py
"""
from openai import OpenAI
def main():
"""メイン処理"""
# ベースURLをOllamaに向ける
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama" # 実際には不要だがSDKが要求するため
)
response = client.chat.completions.create(
model="llama3.2",
messages=[
{"role": "system", "content": "あなたは親切なアシスタントです。"},
{"role": "user", "content": "東京タワーの高さは?"}
],
temperature=0.7
)
print(response.choices[0].message.content)
if __name__ == "__main__":
main()
5.4 Modelfileでカスタムモデルを作成
Modelfileを使うと、独自のシステムプロンプトやパラメータを設定したモデルを作成できる。
# Modelfile - 日本語特化アシスタント
FROM llama3.2
# パラメータ設定
PARAMETER temperature 0.7
PARAMETER top_p 0.9
PARAMETER top_k 40
PARAMETER num_ctx 8192
# システムプロンプト
SYSTEM """
あなたは「アシスタントさん」という名前の、日本語に堪能なAIアシスタントです。
以下のルールに従って応答してください:
1. 常に丁寧語で応答する
2. 技術的な質問には具体例を添える
3. わからないことは正直に「わかりません」と答える
4. 回答は簡潔にまとめる(200文字以内を目安)
"""
# テンプレート(オプション)
TEMPLATE """{{ if .System }}<|system|>
{{ .System }}<|end|>
{{ end }}{{ if .Prompt }}<|user|>
{{ .Prompt }}<|end|>
{{ end }}<|assistant|>
{{ .Response }}<|end|>
"""
# カスタムモデルの作成
ollama create my-assistant -f Modelfile
# 実行
ollama run my-assistant
5.5 実行結果
上記のPythonコードを実行すると、以下のような出力が得られる。
$ python ollama_example.py
Pythonの良いところを3つお伝えします:
1. **読みやすいシンタックス**: インデントベースの構文により、
コードが自然と整理され、他人のコードも理解しやすいです。
2. **豊富なライブラリ**: NumPy、Pandas、TensorFlowなど、
データサイエンスからWeb開発まで幅広いライブラリが揃っています。
3. **学習コストが低い**: プログラミング初心者でも取り組みやすく、
短期間で実用的なプログラムが書けるようになります。
--- ストリーミング出力 ---
古池や
蛙飛びこむ
水の音
5.6 よくあるエラーと対処法
| エラー | 原因 | 対処法 |
|---|---|---|
Error: could not connect to ollama server |
サーバー未起動 |
ollama serveを実行、またはsystemctl start ollama
|
Error: model not found |
モデル未ダウンロード |
ollama pull モデル名を実行 |
Error: not enough memory |
メモリ不足 | 小さいモデルを使用、またはOLLAMA_MAX_LOADED_MODELS=1
|
Error: GPU not detected |
GPUドライバ問題 | CUDAドライバを再インストール |
bind: address already in use |
ポート競合 |
OLLAMA_HOSTで別ポートを指定 |
5.7 環境診断スクリプト
問題が発生した場合は、以下のスクリプトで環境を診断できる。
#!/usr/bin/env python3
"""
Ollama環境診断スクリプト
実行方法: python check_ollama_env.py
"""
import subprocess
import sys
import urllib.request
import json
def check_environment():
"""環境をチェックして問題を報告"""
issues = []
info = []
# Ollamaバージョン確認
try:
result = subprocess.run(
["ollama", "--version"],
capture_output=True, text=True
)
if result.returncode == 0:
info.append(f"Ollama: {result.stdout.strip()}")
else:
issues.append("Ollamaがインストールされていません")
except FileNotFoundError:
issues.append("Ollamaがインストールされていません")
issues.append(" → curl -fsSL https://ollama.com/install.sh | sh")
# サーバー接続確認
try:
req = urllib.request.Request("http://localhost:11434/api/tags")
with urllib.request.urlopen(req, timeout=5) as response:
data = json.loads(response.read())
models = [m["name"] for m in data.get("models", [])]
info.append(f"Ollamaサーバー: 起動中")
info.append(f"インストール済みモデル: {', '.join(models) if models else 'なし'}")
except Exception as e:
issues.append(f"Ollamaサーバーに接続できません: {e}")
issues.append(" → ollama serve を実行してください")
# Python SDK確認
try:
import ollama
info.append("ollama-python: インストール済み")
except ImportError:
issues.append("ollama-pythonがインストールされていません")
issues.append(" → pip install ollama")
# 結果出力
print("=" * 50)
print("Ollama 環境診断結果")
print("=" * 50)
print("\n📋 環境情報:")
for i in info:
print(f" ✓ {i}")
if issues:
print("\n❌ 問題が見つかりました:")
for issue in issues:
print(f" - {issue}")
else:
print("\n✅ 環境は正常です")
if __name__ == "__main__":
check_environment()
実装方法がわかったので、次は具体的なユースケースを見ていきます。
6. ユースケース別ガイド
6.1 ユースケース1: Claude Codeとの連携
想定読者: ローカルLLMでコーディング支援を使いたい開発者
推奨構成: Ollama + Claude Code(ollama launchコマンド)
サンプルコード:
# Claude Codeと連携(2025年の新機能)
ollama launch claude
# または手動で設定
# ~/.claude/config.json
{
"localModel": {
"provider": "ollama",
"model": "qwen3-coder",
"baseUrl": "http://localhost:11434"
}
}
6.2 ユースケース2: Docker Composeでの運用
想定読者: 本番環境でOllamaを運用したいインフラエンジニア
推奨構成: Docker Compose + リバースプロキシ
サンプルコード:
# docker-compose.yml
version: '3.8'
services:
ollama:
image: ollama/ollama:latest
ports:
- "11434:11434"
volumes:
- ollama_data:/root/.ollama
environment:
- OLLAMA_NUM_PARALLEL=4
- OLLAMA_MAX_LOADED_MODELS=2
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:11434/api/tags"]
interval: 30s
timeout: 10s
retries: 3
# Webフロントエンド(オプション)
open-webui:
image: ghcr.io/open-webui/open-webui:main
ports:
- "3000:8080"
environment:
- OLLAMA_BASE_URL=http://ollama:11434
depends_on:
- ollama
volumes:
- webui_data:/app/backend/data
volumes:
ollama_data:
webui_data:
6.3 ユースケース3: マルチモーダル(画像認識)
想定読者: 画像を入力にしたAIアプリを作りたい開発者
推奨構成: Ollama + LLaVAモデル
サンプルコード:
"""
画像認識サンプル
実行方法: ollama pull llava && python vision_example.py
"""
import ollama
import base64
from pathlib import Path
def analyze_image(image_path: str, prompt: str) -> str:
"""画像を分析して説明を生成"""
# 画像をBase64エンコード
image_data = Path(image_path).read_bytes()
image_base64 = base64.b64encode(image_data).decode('utf-8')
response = ollama.chat(
model='llava',
messages=[{
'role': 'user',
'content': prompt,
'images': [image_base64]
}]
)
return response['message']['content']
if __name__ == "__main__":
result = analyze_image(
"screenshot.png",
"この画像に何が写っていますか?日本語で説明してください。"
)
print(result)
ユースケースを把握できたところで、この先の学習パスを確認しましょう。
7. 学習ロードマップ
この記事を読んだ後、次のステップとして以下をおすすめする。
初級者向け(まずはここから)
- Ollamaモデルライブラリを探索
-
ollama run llama3.2で対話してみる - Modelfileでカスタムモデルを作成
中級者向け(実践に進む)
- OpenAI互換APIで既存アプリを移行
- Docker Composeで本番運用
- Open WebUIでWeb UIを構築
上級者向け(さらに深く)
- Ollama GitHubでソースを読む
- MCP(Model Context Protocol)との連携
- カスタムモデルをOllama Hubに公開
8. まとめ
この記事では、Ollamaについて以下を解説した。
- Ollamaの正体: llama.cppをラップした「ローカルLLMのHomebrew」
-
簡単な使い方:
ollama runでワンライナー実行 - API連携: OpenAI互換APIで既存アプリと統合
- カスタマイズ: Modelfileで独自モデルを作成
私の所感
Ollamaを使い始めて、ローカルLLMの敷居が劇的に下がったと感じる。以前は「llama.cppをビルドして...」と説明していたのが、今では「ollama run llama3.2を実行して」で済む。
2025年7月にデスクトップアプリがリリースされ、さらにハードルは下がった。CLIが苦手な人でも、GUIで簡単にローカルLLMを体験できるようになっている。
唯一の注意点は、Ollama Turbo(クラウドサービス)の存在。プライバシー重視でローカルLLMを使いたい場合は、OLLAMA_NO_CLOUD=1を設定しておこう。
まずはollama run llama3.2を実行して、ローカルAIの世界に足を踏み入れてみてほしい。