0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MacbookのDocker上にOpen WebUI+ローカルOllamaで「自分だけのChatGPT」を作る

0
Last updated at Posted at 2026-07-07

はじめに

今回Macbook上に自分だけのChatGPTライクなAI駆動Chat環境を構築しました。
社内で使われているChat型AIシステムが Open WebUI をベースにしていることを知り、「自分でも同じ仕組みを構築して、稼働検証しながら中身を学びたい」と思ったのがきっかけです。

やってみると、OSSを組み合わせるだけで、ローカルMacに完全オフラインで動くChatGPTライクな環境が驚くほど簡単に作れました(Claude codeを使って)。クラウドにデータを送らず、API課金もなく、UIはほぼChatGPTです。

image.png

この記事では、その構築手順と、途中でハマったポイントを共有します。

  • 対象読者:ローカルLLMに興味がある人/Open WebUIの仕組みを知りたい人
  • 所要時間:30分〜1時間(モデルのダウンロード時間込み)

使ったOSSの紹介

Open WebUI

Open WebUI は、LLM向けのセルフホスト型WebUIです。見た目や操作感はChatGPTそっくりで、チャット履歴、複数モデルの切り替え、RAG(ドキュメント読み込み)、ユーザー管理などを備えています。バックエンドとして Ollama や OpenAI互換API に接続できます。

Ollama

Ollama は、ローカルでLLMを動かすためのランタイムです。ollama pull llama3.2 のようにコマンド一発でモデルを取得でき、localhost:11434 でOpenAI互換に近いAPIを提供します。MacではApple Silicon(Metal)を使って高速に推論できます。

Colima(Docker Desktopの代替)

Colima は、Mac上でDockerを動かすための無料・OSSのコンテナランタイムです。docker / docker compose コマンドがそのまま使え、Docker Desktopのような商用ライセンスの制約がありません。

💡 なぜColima?
Docker Desktopは従業員251人以上または年商1000万ドル以上の企業では有料ライセンスが必要です。社内環境で気軽に検証するなら、ライセンスフリーなColimaが安心です。Docker Desktopをお使いの方は、Colimaのインストール部分を読み替えてください(後述のとおり接続設定は共通です)。


構成図

今回は Ollamaはホスト(Mac)に直接インストールし、Open WebUIだけをコンテナで動かす構成にします。こうするとOllamaがApple SiliconのGPUをフルに使えます。


前提環境

この記事は以下のバージョンで検証しました。

ソフト バージョン
macOS Apple Silicon (arm64)
Colima 0.10.3
Docker CLI 29.6.1(サーバ 29.5.2)
Docker Compose 5.3.0
Ollama 0.30.11
モデル llama3.2(3.2B, Q4_K_M)

Homebrewが入っている前提で進めます。


手順

1. Colima と Docker CLI のインストール

brew install colima docker docker-compose

docker compose(Composeプラグイン)を認識させるため、~/.docker/config.json に以下を追記します。

{
  "cliPluginsExtraDirs": [
    "/opt/homebrew/lib/docker/cli-plugins"
  ]
}

2. Colima を起動

colima start --cpu 4 --memory 6

動作確認します。

docker version
docker run --rm hello-world   # "Hello from Docker!" が出ればOK

3. Ollama を起動してモデルを取得

ここが最初のハマりどころです。Ollamaはデフォルトで 127.0.0.1(localhostのみ)で待ち受けるため、コンテナ内からは接続できません。全インターフェースで待ち受けるよう OLLAMA_HOST=0.0.0.0 を指定して起動します。

# 既存のOllamaが起動していれば一度止めてから
OLLAMA_HOST=0.0.0.0:11434 ollama serve

別ターミナルでモデルを取得します(llama3.2は約2GB)。

ollama pull llama3.2
ollama list   # llama3.2:latest が表示されればOK

💡 常用するなら launchctl setenv OLLAMA_HOST "0.0.0.0:11434" などで環境変数を永続化しておくと便利です。

4. docker-compose.yml を作成

作業ディレクトリに docker-compose.yml を作ります。

services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    ports:
      - "3000:8080"          # ホスト3000 → コンテナ8080
    environment:
      # コンテナからホストのOllamaを指す
      - OLLAMA_BASE_URL=http://host.docker.internal:11434
      - WEBUI_AUTH=True
    extra_hosts:
      # ★Colimaで必須:host.docker.internal をホストに解決させる
      - "host.docker.internal:host-gateway"
    volumes:
      - open-webui:/app/backend/data   # 履歴・設定を永続化
    restart: unless-stopped

volumes:
  open-webui:

⚠️ 2つ目のハマりどころ:host.docker.internal
Docker Desktopでは host.docker.internal が自動で使えますが、Colimaでは extra_hosts に host.docker.internal:host-gateway を明示しないと解決されません。これを入れると、Colima・Docker Desktopのどちらでも同じ設定で動きます。

5. Open WebUI を起動

docker compose up -d
docker compose ps   # STATUS が healthy になればOK

初回はイメージのダウンロードに数分かかります。

Open WebUIのソースコードはGitHubで管理されていて、ビルドされたDockerイメージはGitHub Container Registry(GHCR)に公開されています。そのイメージをDownloadしてコンテナを起動する、という動きが裏で起きています。Dockerの仕組み、本当にすごいと思います:grimacing:


動作検証

ブラウザでアクセス

http://localhost:3000 を開くと、Open WebUIのログイン画面が表示されます。初回は管理者アカウント(メール・パスワード)を作成します。ログイン後、右上のモデル選択に llama3.2 が出ていれば接続成功です。あとはChatGPTと同じように会話するだけ。

image.png

コマンドで接続を確認する

UIを開かずとも、コンテナ内からホストのOllamaに到達できるかで接続を検証できます。

# コンテナ内からOllamaのモデルリストAPIを叩く
docker exec open-webui \
  curl -s http://host.docker.internal:11434/api/tags

さらに、実際に推論させてみます。

docker exec open-webui curl -s http://host.docker.internal:11434/api/generate \
  -d '{"model":"llama3.2","prompt":"日本語で一言、自己紹介して。","stream":false}'

私の環境では次のような応答が返り、コンテナ → ホストOllama → llama3.2 の経路がすべて繋がっていることを確認できました。

{"model":"llama3.2","response":"私は機械のAIであり、人と話し合うためのサポートをします。","done":true, ...}

ハマりどころまとめ

ハマり 原因 対処
コンテナからOllamaに繋がらない Ollamaが 127.0.0.1 のみで待ち受け OLLAMA_HOST=0.0.0.0:11434 で起動
host.docker.internal が解決できない Colimaは自動対応しない compose に extra_hosts: host.docker.internal:host-gateway
docker compose が見つからない Composeプラグインのパス未登録 ~/.docker/config.json に cliPluginsExtraDirs を追加
Docker Desktopのライセンスが気になる 商用は有料 Colimaに置き換え(コマンドは同じ)
Gemmaで does not support tools エラー Gemmaはツール呼び出し非対応なのにネイティブFunction Callingが送られる Function Callingを Legacy に設定(後述)

ハマりどころ詳説:does not support tools(Gemma系で発生)

llama3.2 では問題なく動くのに、gemma2:2b などGemma系に切り替えた途端、チャットを送るだけで次のエラーが出て会話できないことがあります。

registry.ollama.ai/library/gemma2:2b does not support tools

原因

このエラーは Open WebUI ではなく Ollama本体が返すエラーです。モデルの対応機能を調べると一目瞭然で、Gemma系は tools(ツール呼び出し/Function Calling)に対応していません。

# capabilities に "tools" があるか確認
curl -s http://localhost:11434/api/show -d '{"model":"gemma2:2b"}' \
  | python3 -c "import sys,json; print(json.load(sys.stdin)['capabilities'])"
# → ['completion']            ← toolsが無い
# llama3.2 は ['completion', 'tools'] なので動く

問題は、ユーザーがツールを一切有効にしていなくても、Open WebUI が Web検索やスキルなどの「組み込みツール」をネイティブ方式でOllamaに送ろうとする点です。Function Calling の設定が Legacy 以外(Default / Native)だとこの経路に入り、tools非対応のGemmaで弾かれます。

⚠️ 紛らわしいのが、Default を選んでも内部的には「非-Legacy=ネイティブ扱い」になり、エラーは消えません。唯一 Legacy だけがツールを送らない設定です。

対処:Function Calling を「Legacy」にする

Function Calling はクリックするたびに Default → Native → Legacy → Default… と循環します。「Legacy」と表示されるまで切り替えてください。設定場所は用途で選べます。

  • このチャットだけ:右上の Controls(⚙)→ Advanced Params → Function Calling → Legacy
  • モデルの既定にする(常用ならおすすめ):管理者パネル → 設定 → モデル → 対象モデル → Advanced Params → Function Calling → Legacy
  • 全体の既定:設定 → 一般 → 詳細パラメータ → Function Calling → Legacy

llama3.2 のような tools対応モデルは Default のままで問題ありません。ツール機能を使わないGemma系だけ Legacy にすればOKです。

image.png


まとめ

  • Open WebUI × Ollama で、ローカルMacにChatGPTそっくりの環境が数十分で作れました。
  • Ollamaをホスト側に置くことで、Apple SiliconのGPUを活かして快適に動きます。
  • Docker Desktopの代わりに Colima を使えば、ライセンスを気にせず無料で構築できます。
  • ハマりどころは「Ollamaの待ち受けアドレス」「host.docker.internal の解決」、そしてモデルによっては「Function CallingをLegacyにする」くらい。いずれも一度分かれば簡単です。

社内システムがOpen WebUIを採用している背景を、自分の手で構築・検証することでかなり具体的に理解できました。RAGやモデル追加など、ここから拡張できる余地も大きいので、次はドキュメント読み込みやマルチモデル切り替えも試してみたいと思います。

参考リンク

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?