このガイドは、アプリをインストールする権限があり、自分が所有する機密情報を含まないテスト用ファイルを使えるMac利用者向けです。Ollamaにモデルを1つダウンロードし、永続化したOpen WebUIのブラウザーチャットとVS CodeのContinue拡張機能を同じ実行サービスに接続します。その後、実際に提示された変更案を確認して、採用するか判断します。以下のコマンドと確認方法は開発元の現行ドキュメントに基づきます。BIG CHANGEはこの構成を実行しておらず、速度、費用、ネットワーク通信量も測定していません。

大きな変化

  • 何が変わるのか: ダウンロードしたOllamaモデルは、ローカルAPIを通じてブラウザーチャットとVS Codeの編集支援の両方を提供できます。各クライアントの接続確認は別々に必要です。
  • なぜ重要なのか: 1回のモデル導入で、同じMac上の会話と確認付きのコード変更を支援でき、最終的な編集判断はファイルの所有者が行えます。
  • 注意する点: メニューに表示されたモデル名だけでは、どのサーバーが応答したかは分かりません。特に他の提供元やクラウド機能を設定している場合は、接続先と実際の応答を確認してください。

1. Macを確認してモデルを選ぶ

必要なのは、 Ollama用のmacOS 14以降、 Mac版Docker Desktop、 Continue拡張機能を導入したVS Code、以下の簡単なJSONとファイルの確認に使うPython 3です。OllamaはApple MシリーズのCPUとGPUでの実行に対応し、Intel Macではドキュメント上CPUのみです。Mac用の配布ページからOllamaを入手し、アプリをApplicationsに移動して起動します。求められたらコマンドラインへのリンクを許可してください。Docker Desktopをインストールして起動し、VS CodeのExtensionsビューからContinueを導入します。Python 3は、 Python.org からインストールします( python3 が使えない場合)。MacではVS Codeが code を自動でシェルの検索パスに追加するわけではありません。 Macのセットアップ手順に従い、 Cmd+Shift+PでCommand Paletteを開いて、 Shell Command: Install 'code' command in PATHを実行し、Terminalを再起動します。使用するツールが利用可能か確認してください。

Terminal
sw_vers -productVersion
ollama --version
docker version
code --version
python3 --version

インストールしたバージョンを記録します。いずれかのアプリが動いていない場合や、モデルとDockerデータを置く空き容量がない場合は中断してください。 qwen2.5-coder:7bのモデルページ には現在、ダウンロード容量4.7 GB、ライセンスApache 2.0と記載されています。ダウンロード容量は実行に必要な全メモリー量ではありません。このモデルは本ガイドの具体例であり、すべてのMacに適するという推奨ではありません。必要ならドキュメントで確認できる小さなローカルモデルのタグを選び、以下のすべてのコマンド、ブラウザーの選択、YAMLの項目にある qwen2.5-coder:7b をその正確なタグに置き換えます。代替モデルのライセンスも確認してください。

モデルをダウンロードし、Ollamaの一覧に正確なタグがあるか確認します。

Terminal
ollama pull qwen2.5-coder:7b
ollama list
curl --fail-with-body --silent --show-error http://127.0.0.1:11434/api/tags | python3 -c 'import json,sys; d=json.load(sys.stdin); print([m["name"] for m in d["models"]])'

一覧には qwen2.5-coder:7bが表示されるはずです。続いて、 ローカルのチャットAPI に短い応答を求めます。HTTPエラーではコマンドが失敗し、返されたモデルと空でないアシスタントの内容を確認します。回答の具体的な文言は問いません。 Ollamaの実行オプション num_predict によって、この確認で生成するトークン数を64に制限します。文が途中で切れていても内容が戻ったことは確認できます。応答が空なら確認失敗であり、調査が必要です。

Terminal
set -o pipefail
curl --fail-with-body --silent --show-error http://127.0.0.1:11434/api/chat \
  -H 'Content-Type: application/json' \
  -d '{"model":"qwen2.5-coder:7b","messages":[{"role":"user","content":"Reply with one short sentence about checking a local connection."}],"stream":false,"options":{"num_predict":64}}' \
  | python3 -c 'import json,sys; d=json.load(sys.stdin); assert d.get("model")=="qwen2.5-coder:7b",d.get("model"); assert d.get("message",{}).get("content","").strip(); print("Model:",d["model"],"Reply:",d["message"]["content"])'

タグがなければダウンロードを完了して一覧を再確認します。APIに接続できない場合はOllamaを起動し、 Macのサーバーログ を ~/.ollama/logs/server.logで確認してください。ダウンロード済みタグと正常なローカル応答で、3つの確認のうち最初が完了します。

2. データを永続化してOpen WebUIを起動する

この Open WebUIクイックスタート は、アカウント、設定、チャットを /app/backend/data に保存し、固定の WEBUI_SECRET_KEYを使うよう説明しています。ここでは安定版の v0.12.3リリース を使用し、随時更新される main タグは使いません。DockerはMacのアーキテクチャに合うイメージを選びます。取得後にイメージの識別情報を記録してください。

最初に、ここで使う名前を調べます。すでに存在する場合は、そのコンテナーやボリュームを調べ、以前の設定のものか判断してください。このコマンドを動かすためだけに既存コンテナーを置き換えたり、ボリュームを削除したりしないでください。

Terminal
docker ps -a --filter name=^/bc-open-webui$ 
docker volume inspect bc-open-webui-data

初回の設定では、2番目のコマンドがボリュームは存在しないと表示しても正常です。以下では、生成したキーをMacアカウント内の非公開ファイルに保存します。コンテナーを再作成するときのため、安全に保管してください。内容をリポジトリにコミットしたり、貼り付けたり、共有したりしないでください。このインスタンス用のキーがある場合は引き続き同じものを使います。

Terminal
mkdir -p "$HOME/.config/bc-open-webui"
chmod 700 "$HOME/.config/bc-open-webui"
umask 077
if [ ! -s "$HOME/.config/bc-open-webui/webui-secret" ]; then
  openssl rand -hex 32 > "$HOME/.config/bc-open-webui/webui-secret"
fi
chmod 600 "$HOME/.config/bc-open-webui/webui-secret"
export WEBUI_SECRET_KEY="$(cat "$HOME/.config/bc-open-webui/webui-secret")"
docker pull ghcr.io/open-webui/open-webui:v0.12.3
docker image inspect ghcr.io/open-webui/open-webui:v0.12.3 --format '{{json .RepoDigests}}'
docker volume create bc-open-webui-data
docker run -d --name bc-open-webui --restart unless-stopped \
  -p 127.0.0.1:3000:8080 \
  --add-host=host.docker.internal:host-gateway \
  -v bc-open-webui-data:/app/backend/data \
  -e WEBUI_SECRET_KEY \
  -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
  ghcr.io/open-webui/open-webui:v0.12.3
unset WEBUI_SECRET_KEY
docker ps --filter name=^/bc-open-webui$ --format 'table {{.Names}}\t{{.Image}}\t{{.Ports}}'

ポートの出力には 127.0.0.1:3000->8080/tcpと表示されるはずです。名前付きボリュームはコンテナー再作成後もチャットと設定を保持します。キーはセッションの継続性とアプリの暗号化された値を保護するため、非公開のコピーを保存します。Dockerにアクセスできる人はコンテナー設定から環境変数を見られる場合があります。これは1人用のローカル構成であり、共有ホスト向けの秘密情報保管庫ではありません。

ブラウザーで http://127.0.0.1:3000 を開きます。初回は管理者アカウントを作成します。アバターメニューで Settings → Admin → Connectionsを開き、 Manage Ollama API Connections を確認し、 http://host.docker.internal:11434を指す接続を1つだけ有効にします。この確認で意図していない提供元の接続は削除するか無効にしてください。Open WebUIは 複数のOllama接続へリクエストを振り分けられるため、ドロップダウンの名前が一致するだけでは不十分です。新しいチャットで qwen2.5-coder:7b を選び、「ローカルモデルが回答したことを確認する方法を1つ教えてください」と尋ねます。空でない応答が出たことを確認し、保存したチャットを開き直します。選択したモデルと接続URLを記録します。これがブラウザーの確認であり、特定の答えを要求するものではありません。

ページが読み込めない場合は、 docker logs bc-open-webui とポートの割り当てを調べます。モデル一覧が空なら、Ollamaが引き続き /api/tagsに応答するか、保存したOpen WebUIの接続、使用中のDocker DesktopがMacホストのサービスに到達できるかを確認します。 host.docker.internal は Docker Desktopのホストアドレスですが、 localhost はコンテナー内ではそのコンテナー自体を指します。Ollamaは 標準で127.0.0.1にバインドするため、ホストとコンテナー間の転送は設定によって異なる場合があります。失敗した接続を成功扱いしたり、一般的な修正としてOllamaを 0.0.0.0 で公開したりしないでください。先へ進む前に、自分のセキュリティ方針に沿ってローカルのネットワーク経路を解決します。調査中もボリュームと既存チャットを保持してください。

3. Continueを同じOllamaタグへ接続する

ContinueはMacのVS Code内で動くため、Ollama APIのアドレスは http://localhost:11434です。Continueを開き、チャット入力欄の右上の設定ドロップダウンから Local Configの横の歯車をクリックします。これで ~/.continue/config.yamlが開きます。 Continueの現行リファレンス はYAMLを使用します。既存設定をコピーして保存し、必要なモデルやルールを残してください。新規のローカル設定の最小限の全内容は次のとおりです。

YAML
name: Local Ollama check
version: 1.0.0
schema: v1
models:
  - name: Qwen2.5 Coder 7B local
    provider: ollama
    model: qwen2.5-coder:7b
    apiBase: http://localhost:11434
    roles:
      - chat
      - edit

既存ファイルの場合は、モデル項目をその models: 一覧へ追加し、現在の最上位設定を残します。保存して Local Config と名前を付けたローカルモデルを選び、Continue Chatで短い質問をします。内容が返ることを確認します。拡張機能の接続確認にはなりますが、チャット応答はファイル編集ではありません。 chat と edit の役割が、ここで使う2つの操作を有効にします。この手順はAgentや自動補完を約束しません。

自分が所有するテスト用ディレクトリと、独立して確認できる単純な動作を持つファイルを作ります。コマンドは既存のファイルや原本コピーを保持します。どちらかの名前が使用済みなら、確認するか新しいテスト用ディレクトリを選んでください。

Terminal
mkdir -p "$HOME/continue-local-check"
if [ -e "$HOME/continue-local-check/greeting.py" ] || [ -e "$HOME/continue-local-check/greeting.original.py" ]; then
  printf '%s\n' 'Scratch file already exists; inspect it or choose a new directory.'
else
  cat > "$HOME/continue-local-check/greeting.py" <<'PY'
def greeting(name):
    return "Hello, " + name

if __name__ == "__main__":
    assert greeting("Ada") == "Hello, Ada"
    print(greeting("Ada"))
PY
  if python3 "$HOME/continue-local-check/greeting.py"; then
    cp "$HOME/continue-local-check/greeting.py" "$HOME/continue-local-check/greeting.original.py"
  else
    printf '%s\n' 'Original check failed; inspect the file before requesting an edit.'
  fi
fi

元の確認では、アサーションが通った後に Hello, Ada と出力されるはずです。 greeting.py をVS Codeで開き、関数だけを選択して Cmd+I を押し、 Continue Editを使います。返す文字列を変えずに短いdocstringを追加するよう依頼します。順次表示されるインラインdiffを greeting.original.pyと比較します。選択したコードへのEditでもファイル全体がコンテキストに入る場合があるため、自分の所有する機密情報のないファイルだけを使ってください。モデルは依頼した範囲を超えて変更する可能性があります。すべての変更行を調べ、適切な提案は Cmd+Opt+Yで採用し、拒否する場合は Cmd+Opt+Nを使います。Continueにはすべて採用・すべて拒否の操作もありますが、小さなdiffの方が変更を1つずつ調べやすくなります。

採用後はファイルを保存し、次を実行します。

Terminal
diff -u "$HOME/continue-local-check/greeting.original.py" "$HOME/continue-local-check/greeting.py" || true
python3 "$HOME/continue-local-check/greeting.py"

diffが意図した変更だけで、元のアサーションも通ることを確認します。提案を拒否した場合は原本と一致することを確認し、拒否を記録します。編集が完了したと報告してはいけません。ファイル、diff、独立したPythonの確認の方が、モデル自身による作業説明より確実です。

4. 境界を明確にする

Ollama、Open WebUI、Continueにはそれぞれ別の設定があります。Ollamaのクラウドだけを無効にするには、Ollamaサーバーを実行するアカウントの ~/.ollama/server.jsonに以下のフィールドを追加し、既存のJSONフィールドを保持します。新規ファイルの全内容は次のとおりです。

JSON
{
  "disable_ollama_cloud": true
}

Ollamaアプリを再起動し、サーバーログを確認します。

Terminal
grep 'Ollama cloud disabled: true' "$HOME/.ollama/logs/server.log"

この Ollama FAQ は、そのログ行を説明しています。見つからない場合は、どのMacアカウントがOllamaを実行しているか、JSON、再起動を再確認してから、クラウド機能が無効になったと判断してください。この設定はOpen WebUIの他の提供元や任意のオンライン機能、Continueの通信を調べません。Continueの オフラインガイド では、 Allow Anonymous Telemetryをオフにし、ローカルモデルを使ってVS Codeを再起動するよう説明されています。機密情報を使う前に各アプリの接続を確認してください。ループバックURLだけではネットワーク監査になりません。

実際の用途について Docker Desktopのライセンス を確認します。個人、教育、非営利のオープンソース利用に加え、次の条件を満たす小規模企業は無料です。 従業員250人未満、かつ年間売上高1,000万ドル未満。それより大きな組織での業務利用と政府機関での利用には有料サブスクリプションが必要です。モデルのApache 2.0ライセンスは別です。ディスク、メモリー、ダウンロード帯域、電力も必要であり、本ガイドでは費用や性能を測定していません。

Ollamaの端末とAPIだけを扱う狭い手順は、 ローカルOllamaモデルを動かしてチャットAPIを確認するを参照してください。 ローカルOllamaモデルでClaude Codeの変更を1件確認する は別のコーディングクライアントを扱います。

出典と参考資料