Ollama とは? オープンソースのローカル大規模言語モデル実行ツールで、個人パソコン上で Llama、Mistral、Qwen などのオープンソース AI モデルをワンクリックでダウンロード・実行・管理できます。GPU クラスタもクラウド API も不要です。
目次
- Ollama とは?
- Ollama のインストール
- クイックスタート:最初のモデルを動かす
- モデル管理:ダウンロード、切替、削除
- Ollama API:アプリケーションへの統合
- 実践例:ローカル AI アシスタントを作る
- パフォーマンス最適化と GPU アクセラレーション
- よくある質問 FAQ
- まとめ
Ollama とは?
Ollama はオープンソースのローカル大規模言語モデル(LLM)実行ツールで、Jeff Hancock 氏によって開発され、MIT ライセンスで公開されています。その核となる目標はシンプルです——誰でも手軽にローカルでオープンソースの AI モデルを動かせるようにすること。
主な特徴
| 特徴 | 説明 |
|---|---|
| ワンクリック実行 | ollama run llama3 でモデル起動完了 |
| モデルライブラリ | 数十種類の人気モデルを内蔵、カスタム Modelfile 対応 |
| REST API | OpenAI 互換の標準インターフェースで統合が容易 |
| クロスプラットフォーム | macOS、Linux、Windows をすべてカバー |
| GPU アクセラレーション | NVIDIA/AMD GPU を自動検出して活用 |
| オープンソース&無料 | MIT ライセンス、商用利用も可能 |
なぜ Ollama を選ぶのか?
Ollama が登場する以前、大規模言語モデルをローカルで動かすには複雑な設定が必要でした——重みファイルを手動でダウンロードし、PyTorch をインストールし、依存関係の衝突を解決し、推論コードを書く……。Ollama はこれらすべてをたった1行のコマンドにまとめてしまいました。
他のローカル LLM ツールとの比較:
| ツール | 使いやすさ | モデル数 | API 互換性 | GPU サポート |
|---|---|---|---|---|
| Ollama | ⭐⭐⭐⭐⭐ | 50+ | OpenAI 互換 | NVIDIA/AMD/Apple Silicon |
| LM Studio | ⭐⭐⭐⭐ | 30+ | OpenAI 互換 | NVIDIA/AMD |
| GPT4All | ⭐⭐⭐ | 20+ | 独自形式 | NVIDIA/AMD |
| 手動デプロイ | ⭐ | 無制限 | 独自形式 | 手動設定が必要 |
Ollama の強みは極めてシンプルな操作性と豊富なモデルエコシステムにあり、開発者の迅速なプロトタイピングや日常的な AI 支援コーディングに特に向いています。
Ollama のインストール
macOS
# 方法 1:ワンクリックインストール(推奨)
curl -fsSL https://ollama.com/install.sh | sh
# 方法 2:Homebrew でインストール
brew install ollama
# インストール確認
ollama --version
macOS 版は **Apple Silicon(M1/M2/M3/M4)**の Metal GPU アクセラレーションを自動利用し、優れたパフォーマンスを発揮します。
Linux
# ワンクリックインストール(systemd サービス込み)
curl -fsSL https://ollama.com/install.sh | sh
# 手動インストール(バイナリ方式)
curl -fsSL https://ollama.com/install.sh | OLLAMA_INSTALL=1 sh
# systemd で管理
sudo systemctl start ollama
sudo systemctl enable ollama
# 確認
ollama --version
Linux インストール時は NVIDIA GPU が自動検出され、CUDA ドライバのサポートも含まれます。
Windows
# Windows インストーラーをダウンロード
winget install Ollama.Ollama
# または公式サイトからインストーラーをダウンロード
# https://ollama.com/download/OllamaSetup.exe
# 確認
ollama --version
Windows 版は NVIDIA CUDA および AMD ROCm GPU アクセラレーションに対応しています。
Docker デプロイ
# 公式イメージを取得
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
# 確認
docker exec ollama ollama list
Docker デプロイはサーバー環境や CI/CD シナリオに最適です。
クイックスタート:最初のモデルを動かす
たった1行で実行
ollama run llama3.2
これだけです!Ollama が自動で次のことを行います: 1. ローカルにモデルが既にあるか確認 2. なければ公式ライブラリからダウンロード 3. 対話型インターフェースを起動
初回実行時はモデル(約 2〜4 GB)のダウンロードに時間がかかりますが、その後の起動はわずか数秒です。
対話型チャット
モデルを実行すると、対話型のターミナル画面が表示されます:
>>> こんにちは!日本語で自己紹介してください。
こんにちは!私は AI アシスタントで、Llama 3.2 モデルをベースに動作しています。
質問への回答、コード作成、翻訳、ブレインストーミングなど、
さまざまなサポートが可能です。何かお手伝いできることはありますか?
>>> Python のクイックソートを書いてください
了解!クイックソートの Python 実装です:
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
# テスト
print(quick_sort([3, 6, 8, 10, 1, 2, 1]))
# 出力: [1, 1, 2, 3, 6, 8, 10]
よく使うショートカット
| ショートカット | 機能 |
|---|---|
Enter |
メッセージ送信 |
Ctrl+C |
現在の応答を中断 |
Ctrl+D または /bye |
対話モード終了 |
Ctrl+R |
応答を再生成 |
/set parameter |
生成パラメータを変更 |
モデル管理:ダウンロード、切替、削除
利用可能なモデルを確認
# ローカルにインストール済みのモデル一覧
ollama list
# 出力例:
# NAME ID SIZE MODIFIED
# llama3.2:latest a1b2c3d4e5f6 2.0 GB 2 hours ago
# mistral:7b f6e5d4c3b2a1 4.1 GB 1 day ago
# qwen2.5:14b 1a2b3c4d5e6f 8.9 GB 3 days ago
公式モデルライブラリを参照
ollama.com/library にアクセスすれば、すべての利用可能モデルを確認できます。以下は 2026 年の人気モデルおすすめ:
| モデル | パラメータ数 | サイズ | 適した用途 |
|---|---|---|---|
| Llama 3.2 | 1B/3B/8B | 0.8-4.7 GB | 汎用対話、コード生成 |
| Mistral 7B | 7B | 4.1 GB | 汎用タスク、多言語対応 |
| Qwen 2.5 | 7B/14B/32B | 4-18 GB | 中国語最適化、数学推論 |
| DeepSeek Coder V2 | 16B/236B | 9-133 GB | コード生成、プログラミング支援 |
| Phi-4 | 14B | 8.4 GB | 軽量、推論能力が高い |
| Gemma 2 | 2B/9B/27B | 1.6-15 GB | Google 製、効率的な推論 |
| Yi 1.5 | 6B/9B/34B | 3.5-20 GB | 中国語・英語バイリンガル最適化 |
モデルをダウンロード
# 指定モデルをダウンロード
ollama pull llama3.2
ollama pull mistral:7b
ollama pull qwen2.5:14b
# 特定のバージョンをダウンロード
ollama pull llama3.2:3b
モデルを切替
対話型チャット内で:
>>> /model mistral:7b
mistral:7b モデルに切替しました
またはコマンドラインで直接指定:
ollama run mistral:7b
モデルを削除
# 単一モデルを削除
ollama rm llama3.2
# 全モデルのディスク使用量を確認
du -sh ~/.ollama/models/*
カスタム Modelfile
Ollama はカスタムモデル設定の作成に対応しています。Modelfile を作成しましょう:
FROM llama3.2:3b
# システムプロンプトを設定
SYSTEM """
あなたは Python 開発のエキスパートです。
回答時は:
1. まず実行可能なコード例を示す
2. コードの重要なロジックを解説する
3. 潜在的な落とし穴と最適化ポイントを指摘する
"""
# 生成パラメータを調整
PARAMETER temperature 0.7
PARAMETER top_p 0.9
PARAMETER num_ctx 4096
カスタムモデルを作成:
# モデルを作成
ollama create my-python-assistant -f Modelfile
# カスタムモデルを実行
ollama run my-python-assistant
Ollama API:アプリケーションへの統合
REST API の基本
Ollama はデフォルトで http://localhost:11434 に REST API を提供しており、OpenAI 互換のインターフェース形式を採用しています。
# テキスト生成(非ストリーミング)
curl http://localhost:11434/api/generate -d '{
"model": "llama3.2",
"prompt": "Python でバブルソートを書いてください",
"stream": false
}'
# Chat 形式(複数ターンの対話)
curl http://localhost:11434/api/chat -d '{
"model": "llama3.2",
"messages": [
{"role": "system", "content": "あなたはコードのエキスパートです"},
{"role": "user", "content": "async/await を説明してください"}
],
"stream": false
}'
OpenAI 互換エンドポイント
Ollama は OpenAI 互換エンドポイントを提供しており、既存アプリケーションの移行が容易です:
# OpenAI 互換の /v1/chat/completions
curl http://localhost:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ollama" \
-d '{
"model": "llama3.2",
"messages": [{"role": "user", "content": "Hello"}]
}'
Python 統合
公式 ollama Python ライブラリを使用します:
# インストール
# pip install ollama
import ollama
# 単純な生成
response = ollama.generate(
model='llama3.2',
prompt='量子コンピューティングを一言で説明してください'
)
print(response['response'])
# Chat 形式
response = ollama.chat(
model='llama3.2',
messages=[
{'role': 'system', 'content': 'あなたはコードレビューのエキスパートです'},
{'role': 'user', 'content': 'このコードの問題点は?\n\nfor i in range(len(arr)):\n if arr[i] == x: return i'}
]
)
print(response['message']['content'])
# ストリーミング出力
stream = ollama.chat(
model='llama3.2',
messages=[{'role': 'user', 'content': 'プログラミングに関する詩を書いてください'}],
stream=True
)
for chunk in stream:
print(chunk['message']['content'], end='', flush=True)
OpenAI SDK で Ollama を呼び出す
from openai import OpenAI
# Ollama のローカルエンドポイントを指定
client = OpenAI(
base_url='http://localhost:11434/v1',
api_key='ollama' # 任意の値でOK
)
response = client.chat.completions.create(
model='llama3.2',
messages=[
{'role': 'user', 'content': 'RAG とは何か説明してください'}
]
)
print(response.choices[0].message.content)
JavaScript/TypeScript 統合
// npm install ollama
import { Ollama } from 'ollama';
const ollama = new Ollama();
// 単純な生成
const response = await ollama.generate({
model: 'llama3.2',
prompt: 'Docker とは何ですか?',
});
console.log(response.response);
// Chat 形式
const chat = await ollama.chat({
model: 'llama3.2',
messages: [
{ role: 'user', content: 'Rust を学ぶためのリソースを 5 つ教えてください' }
],
});
console.log(chat.message.content);
実践例:ローカル AI アシスタントを作る
事例 1:ローカルコードレビューアシスタント
コードレビューに特化した AI アシスタントを作成します:
import ollama
import sys
def review_code(code: str, language: str = "Python"):
"""ローカルコードレビュー"""
response = ollama.chat(
model='llama3.2',
messages=[
{'role': 'system', 'content': f'''あなたは経験豊富な {language} コードレビュアーです。
以下の観点からコードをレビューしてください:
1. コードスタイル(PEP 8 / ベストプラクティス)
2. 潜在的なバグと境界ケース
3. パフォーマンスの問題
4. セキュリティ脆弱性
5. 改善提案
出力フォーマット:
- 問題レベル:🔴 重大 / 🟡 警告 / 🟢 提案
- 問題の説明
- 修正コード例'''},
{'role': 'user', 'content': f'以下のコードをレビューしてください:\n\n```{language}\n{code}\n```'}
]
)
return response['message']['content']
if __name__ == '__main__':
# ファイルからコードを読み込み
with open(sys.argv[1], 'r') as f:
code = f.read()
print(review_code(code))
使い方:
python review.py my_script.py
事例 2:ローカル RAG ナレッジベース
ベクトルデータベースを組み合わせてローカル RAG システムを構築します:
# pip install ollama chromadb sentence-transformers
import ollama
import chromadb
from chromadb.utils import embedding_functions
# Chroma クライアントを初期化
chroma_client = chromadb.Client()
# ローカル埋め込みモデルを使用
embed_fn = embedding_functions.SentenceTransformerEmbeddingFunction(
model_name="all-MiniLM-L6-v2"
)
collection = chroma_client.get_or_create_collection(
name="knowledge_base",
embedding_function=embed_fn
)
# ドキュメントを追加
def add_document(text: str, metadata: dict = None):
collection.add(
documents=[text],
metadatas=[metadata or {}],
ids=[f"doc_{collection.count()}"]
)
# 関連ドキュメントを検索
def retrieve(query: str, n_results: int = 3):
results = collection.query(
query_texts=[query],
n_results=n_results
)
return results['documents'][0]
# 回答を生成
def rag_answer(question: str) -> str:
# 1. 関連ドキュメントを検索
context_docs = retrieve(question)
context = "\n\n".join(context_docs)
# 2. Ollama で回答を生成
response = ollama.chat(
model='llama3.2',
messages=[
{'role': 'system', 'content': f'以下のコンテキストに基づいて質問に答えてください:\n\n{context}'},
{'role': 'user', 'content': question}
]
)
return response['message']['content']
# 使用例
add_document("Ollama は Llama、Mistral、Qwen などのオープンソースモデルをサポートしています")
add_document("Ollama は OpenAI 互換の REST API を提供しています")
print(rag_answer("Ollama はどのモデルをサポートしていますか?"))
事例 3:バッチテキスト処理
import ollama
import json
def extract_entities(text: str) -> dict:
"""テキストからエンティティを抽出"""
response = ollama.chat(
model='llama3.2',
messages=[{
'role': 'user',
'content': f'''以下のテキストからエンティティを抽出し、JSON 形式で返してください:
{text}
返却フォーマット:
{{
"人物": [],
"組織": [],
"場所": [],
"時間": [],
"イベント": []
}}'''
}]
)
try:
return json.loads(response['message']['content'])
except json.JSONDecodeError:
return {}
# バッチ処理
texts = [
"Apple の CEO ティム・クックが 2026 年 6 月に北京を訪問",
"OpenAI がサンフランシスコで GPT-5 をリリース"
]
for text in texts:
entities = extract_entities(text)
print(json.dumps(entities, ensure_ascii=False, indent=2))