OllamaでローカルにLLMを動かす完全ガイド2026 - インストールからAPI連携まで


はじめに

Ollamaは、オープンソースのLLM(大規模言語モデル)をローカル環境で簡単に動かすためのツールです。クラウドAPIに依存せず、データをローカルに保ちながらAIアプリを開発できます。

2026年現在、Ollamaはエンジニアの標準ツールになりつつあります。本記事では、インストールから実際のアプリ開発まで、実践的に解説します。

Ollamaとは

Ollamaは、LLMをローカルで実行するためのフレームワークです。

主な特徴:

  • ワンコマンドインストール: macOS、Linux、Windowsに対応
  • 多数のモデル対応: Llama 3、Mistral、Gemma、Phi、CodeLlamaなど
  • REST API内蔵: OpenAI互換APIを提供
  • GPU加速: NVIDIA/AMDのGPU、Apple Silicon(Metal)に対応
  • 完全プライベート: データがクラウドに送信されない

インストール

macOS

# 公式サイトからダウンロード
brew install ollama

# または curl でインストール
curl -fsSL https://ollama.com/install.sh | sh

Linux

curl -fsSL https://ollama.com/install.sh | sh

Windows

公式サイト(https://ollama.com)からインストーラーをダウンロードして実行します。

モデルの取得と実行

# Ollamaサーバーを起動
ollama serve

# モデルをダウンロードして対話開始(別ターミナル)
ollama run llama3.2

# 軽量なモデル(3B)
ollama run llama3.2:3b

# コード生成特化
ollama run codellama

# 日本語に強いモデル
ollama run command-r

# Googleのモデル
ollama run gemma2

主要モデル一覧

モデルサイズ特徴推奨用途
llama3.2:3b2GB軽量・高速開発・テスト
llama3.2:70b40GB高精度本番・高品質
mistral:7b4.1GB英語・コード強い汎用
gemma2:9b5.5GBGoogle製・バランス良好汎用
codellama3.8GBコード特化コード生成
deepseek-coder-v28.9GB最強クラスコードコード生成
phi48.5GBMicrosoft製・軽量高精度軽量高精度
qwen2.5-coder4.7GBAlibaba製コード特化コード生成
# インストール済みモデル一覧
ollama list

# モデルを削除
ollama rm llama3.2:3b

# モデルの詳細情報
ollama show llama3.2

REST API の利用

OllamaはデフォルトでRESTサーバーを http://localhost:11434 で起動します。

テキスト生成(ストリーミング)

curl http://localhost:11434/api/generate \
  -d '{
    "model": "llama3.2",
    "prompt": "TypeScriptでHello Worldを書いてください",
    "stream": false
  }'

チャット形式

curl http://localhost:11434/api/chat \
  -d '{
    "model": "llama3.2",
    "messages": [
      {
        "role": "user",
        "content": "Pythonで素数判定関数を書いてください"
      }
    ],
    "stream": false
  }'

Python からの利用

ollama ライブラリを使う(推奨)

pip install ollama
import ollama

# シンプルなチャット
response = ollama.chat(
    model='llama3.2',
    messages=[
        {
            'role': 'user',
            'content': 'Pythonでフィボナッチ数列を生成する関数を書いてください。',
        },
    ]
)
print(response['message']['content'])

ストリーミング対応

import ollama

# ストリーミングで受け取る
for chunk in ollama.chat(
    model='llama3.2',
    messages=[{'role': 'user', 'content': '量子コンピューターを説明してください'}],
    stream=True
):
    print(chunk['message']['content'], end='', flush=True)

OpenAI互換クライアントで使う

OllamaはOpenAI APIと互換性があるため、既存コードをほぼそのまま使えます:

from openai import OpenAI

# OllamaのエンドポイントをOpenAIクライアントで使用
client = OpenAI(
    base_url='http://localhost:11434/v1',
    api_key='ollama',  # ダミーキーでOK
)

response = client.chat.completions.create(
    model='llama3.2',
    messages=[
        {
            'role': 'system',
            'content': 'あなたは熟練したPythonエンジニアです。'
        },
        {
            'role': 'user',
            'content': 'FastAPIでCRUD APIを実装してください。'
        }
    ]
)
print(response.choices[0].message.content)

Node.js / TypeScript からの利用

npm install ollama
import ollama from 'ollama';

// チャット
const response = await ollama.chat({
  model: 'llama3.2',
  messages: [
    { role: 'user', content: 'TypeScriptのジェネリクスを説明してください' }
  ],
});

console.log(response.message.content);

OpenAI SDKとの互換性

import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'http://localhost:11434/v1',
  apiKey: 'ollama',
});

const completion = await client.chat.completions.create({
  model: 'codellama',
  messages: [
    { role: 'user', content: 'Reactでカスタムフックを書いてください' }
  ],
  stream: true,
});

for await (const chunk of completion) {
  process.stdout.write(chunk.choices[0]?.delta?.content || '');
}

LangChain との連携

from langchain_ollama import OllamaLLM
from langchain_core.prompts import ChatPromptTemplate

# モデルの初期化
llm = OllamaLLM(model="llama3.2")

# プロンプトテンプレート
prompt = ChatPromptTemplate.from_template(
    "次の技術トピックについて日本語で説明してください:{topic}"
)

# チェーンの作成
chain = prompt | llm

# 実行
result = chain.invoke({"topic": "マイクロサービスアーキテクチャ"})
print(result)

Modelfile でカスタムモデルを作成

OllamaではModelfileを使ってカスタムモデルを定義できます:

# Modelfile
FROM llama3.2

# システムプロンプトの設定
SYSTEM """
あなたはイザークコンサルティング株式会社のAIアシスタントです。
日本語で丁寧かつ簡潔に回答してください。
コードの質問には必ず実際に動くコード例を添えてください。
"""

# パラメータのカスタマイズ
PARAMETER temperature 0.7
PARAMETER top_p 0.9
PARAMETER num_ctx 4096
# カスタムモデルを作成
ollama create my-assistant -f Modelfile

# 実行
ollama run my-assistant

マルチモーダル(画像理解)

import ollama

# 画像を含むメッセージ(llava等のモデルが必要)
response = ollama.chat(
    model='llava',
    messages=[
        {
            'role': 'user',
            'content': 'この画像に何が写っていますか?',
            'images': ['/path/to/image.jpg']
        }
    ]
)
print(response['message']['content'])

実践: RAGシステムの構築

import ollama
from langchain_ollama import OllamaEmbeddings
from langchain_community.vectorstores import Chroma
from langchain_core.documents import Document

# Embeddingモデルでベクトル生成
embeddings = OllamaEmbeddings(model="nomic-embed-text")

# ドキュメントをベクトルDBに保存
docs = [
    Document(page_content="OllamaはオープンソースのローカルLLMフレームワークです"),
    Document(page_content="Ollama APIはOpenAI APIと互換性があります"),
    Document(page_content="OllamaはGPUを活用してモデルを高速実行します"),
]

vectorstore = Chroma.from_documents(docs, embeddings)
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})

def rag_query(question: str) -> str:
    # 関連ドキュメントを検索
    relevant_docs = retriever.invoke(question)
    context = "\n".join([doc.page_content for doc in relevant_docs])

    # LLMで回答生成
    response = ollama.chat(
        model="llama3.2",
        messages=[
            {
                "role": "system",
                "content": f"以下のコンテキストを基に質問に答えてください:\n{context}"
            },
            {
                "role": "user",
                "content": question
            }
        ]
    )
    return response['message']['content']

# クエリ実行
print(rag_query("OllamaのAPIはどのSDKと互換性がありますか?"))

パフォーマンスチューニング

GPU メモリの管理

# 利用するGPUを指定
OLLAMA_GPU_LAYERS=35 ollama run llama3.2

# CPUのみで実行(低速だが確実)
OLLAMA_GPU_LAYERS=0 ollama run llama3.2

# 並行リクエスト数の設定
OLLAMA_NUM_PARALLEL=2 ollama serve

モデルの量子化

量子化レベルが低いほど精度が高く、メモリも多く必要です:

# Q4(バランス型、推奨)
ollama run llama3.2:8b-instruct-q4_0

# Q8(高精度、メモリ多め)
ollama run llama3.2:8b-instruct-q8_0

# fp16(最高精度、GPUメモリ大量)
ollama run llama3.2:8b-instruct-fp16

Dockerでの実行

# docker-compose.yml
services:
  ollama:
    image: ollama/ollama
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama
    # GPU使用(NVIDIA)
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

volumes:
  ollama_data:
# 起動
docker-compose up -d

# モデルのダウンロード
docker exec -it ollama-1 ollama pull llama3.2

セキュリティと本番環境

外部からのアクセスを制限

# デフォルトはローカルのみ(0.0.0.0で全公開)
OLLAMA_HOST=127.0.0.1 ollama serve

# 特定IPのみ許可(Nginxでリバースプロキシ推奨)

Nginxでの認証設定

server {
    listen 443 ssl;
    server_name ollama.example.com;

    location / {
        # Basic認証
        auth_basic "Ollama API";
        auth_basic_user_file /etc/nginx/.htpasswd;

        proxy_pass http://localhost:11434;
        proxy_set_header Host $host;
    }
}

まとめ

Ollamaはプライバシーを守りながらLLMを活用したい開発者にとって最強のツールです。

Ollamaが特に向いているシナリオ:

  • 機密データを扱うアプリケーション開発
  • クラウドAPIコストを削減したい場合
  • オフライン環境でのAI活用
  • ローカルでの実験・プロトタイプ開発
  • OpenAI APIからの移行(互換API)

次のステップ:

  • ollama run llama3.2でまず動かしてみる
  • LangChainや自社フレームワークと連携
  • RAGシステムを構築して実務活用

関連記事