1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ollamaってなんだ?〜ローカルLLMの「Homebrew」を完全理解〜

1
Posted at

この記事の対象読者

  • ローカルで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. 学習ロードマップ

この記事を読んだ後、次のステップとして以下をおすすめする。

初級者向け(まずはここから)

  1. Ollamaモデルライブラリを探索
  2. ollama run llama3.2で対話してみる
  3. Modelfileでカスタムモデルを作成

中級者向け(実践に進む)

  1. OpenAI互換APIで既存アプリを移行
  2. Docker Composeで本番運用
  3. Open WebUIでWeb UIを構築

上級者向け(さらに深く)

  1. Ollama GitHubでソースを読む
  2. MCP(Model Context Protocol)との連携
  3. カスタムモデルをOllama Hubに公開

8. まとめ

この記事では、Ollamaについて以下を解説した。

  1. Ollamaの正体: llama.cppをラップした「ローカルLLMのHomebrew」
  2. 簡単な使い方: ollama runでワンライナー実行
  3. API連携: OpenAI互換APIで既存アプリと統合
  4. カスタマイズ: 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の世界に足を踏み入れてみてほしい。


参考文献


関連記事

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?