Claude Code を純正 Claude と Ollama で使い分けるために ollama-cc を作った
読了 約14分
What's in this posts
Claude Code の操作感はかなり気に入っています。 ファイルを読んで、コマンドを実行して、差分を見ながら進める作業ハーネスとしては優秀で、できればこの操作感のまま使い続けたい。
ただ、Claude Pro のレート制限は自分の使い方だとかなり厳しく感じました。 せめて計画は純正 Claude に任せて、実装作業はもう少し安いモデルに逃がせないか。そんな動機で Ollama 経由の Claude Code を試し始めました。
この記事の結論
- 純正 Claude Code は
claudeのまま使う - Ollama 経由で使いたい時だけ
ollama-ccを起動する - 接続先の切り替えは、毎回のコマンド実行時にだけ環境変数として渡す
前提環境
- Ollama v0.14.0 以降(Anthropic API 互換対応)
- Claude Code(最新版)
- macOS(自分の環境は macOS)
他の選択肢も見たが、いったん Ollama Pro に寄せた
Ollama に決め打ちしていたわけではなく、Z.ai のコーディングプランや MiniMax のトークン課金プランも見ました。 ただ、Z.ai は検討している間に大きく値上げされ、当時は速度面の評判も気になりました。正直、契約しない理由を探していたところもあると思います。
MiniMax は速くて安いという評判を見かけましたが、試しに Ollama Cloud 経由で触った範囲では、日本語の返事が自分の普段使いには少し厳しそうでした。
その点、Ollama Pro はオープンモデルをいくつか試せて、Claude Code の操作感と組み合わせるにはちょうどよさそうに見えました。
何が起きたのか分からなかった
Claude Code をいつも通りの Claude Pro と、Ollama Cloud のモデル経由の両方で使いたくなりました。
ところが、同じ Mac であれこれ起動しているうちに、純正の claude が API エラーになったり、Ollama 用に起動したつもりの画面が Claude Pro の初期設定に流れたりしました。
正直、最初は何が混ざっているのか分かりませんでした。
Claude Code の接続先は環境変数で変わる
まず理解したのは、Claude Code の接続先は環境変数で変わるということです。
claude は Claude Code を起動するコマンドです。
通常は Anthropic / Claude のサービスに接続します。
しかし ANTHROPIC_BASE_URL を指定すると、「Anthropic っぽい API がある別の場所」に向けられます。
Ollama は Anthropic Messages API 互換の口を持っているので、Claude Code から見れば「Anthropic 風 API」として使えます。
通常:
claude
-> Anthropic / Claude
Ollama 経由:
ANTHROPIC_BASE_URL=http://localhost:11434 claude
-> 自分のMacの Ollama
-> ローカルモデル or Ollama Cloud モデル
用語を整理しておきます。
localhost: 自分の Mac 自身を指す住所http://localhost:11434: Ollama が Mac 内で待ち受けている API の入口ANTHROPIC_BASE_URL: Claude Code が API リクエストを送る先を変える環境変数ANTHROPIC_AUTH_TOKEN: Claude Code 側が「認証情報がある」と判断するための値
ANTHROPIC_AUTH_TOKEN=ollama は秘密の API キーではない
ここが一番混乱しやすいところです。
ollama という文字列を見ると、何かの秘密トークンに見えます。
しかし Ollama の Anthropic 互換 API では、この値は「required but ignored」とされています。
つまり Claude Code / SDK 側の都合で認証欄は必要だが、localhost の Ollama はその値を本物の秘密鍵として検証していない、ということです。
だから ANTHROPIC_AUTH_TOKEN=ollama は「鍵」ではなく「空欄にできないので入れている合言葉のようなプレースホルダ」です。
受付で「名前を書いてください」と言われるので ollama と書くが、その名前で本人確認をしているわけではない、くらいの感覚です。
Cloud モデルなのに、なぜ localhost なのか
Cloud モデルを使うなら、なぜ https://... ではなく http://localhost:11434 なのか、という疑問が出るかもしれません。
Claude Code は直接 Ollama Cloud に話しに行くのではなく、まず自分の Mac の Ollama に話しかけます。
Ollama がローカルの窓口になります。
その先でローカルモデルを使うことも、:cloud の付いた Cloud モデルを使うこともできます。
Cloud 側の認証や利用権は、通常は、ollama signin 済みの Ollama 側が扱います。
Claude Code
-> http://localhost:11434 (自分のMac上の Ollama)
-> qwen3-coder-next:cloud
-> glm-4.7:cloud
-> glm-5.1:cloud
Claude Code から見ると接続先は localhost ですが、そこで必ずローカル GPU が使われるわけではありません。:cloud のモデル名を指定すると、Ollama を窓口にして Cloud モデルを使います。
公式手順と、自分のやり方の違い
Ollama 公式は ollama launch claude をクイックセットアップとして案内しています。
手動設定では、環境変数を export してから claude --model ... を実行する流れが紹介されています。
export ANTHROPIC_AUTH_TOKEN=ollama
export ANTHROPIC_BASE_URL=http://localhost:11434
claude --model glm-4.7:cloud
公式手順は「Claude Code を Ollama 用に使う」だけなら分かりやすいです。
しかし自分は同じ Mac で純正 claude も使いたい。
export ANTHROPIC_BASE_URL=... を shell 全体に入れると、そのターミナルで起動する純正 claude まで Ollama に向きます。
~/.zshrc や ~/.claude/settings.json に書いてしまうと、さらに混ざりやすい。
だから ollama-cc という ラッパー の実行中だけ環境変数を渡す形にしました。
| 方法 | よいところ | 自分の環境で困ったところ |
|---|---|---|
ollama launch claude |
公式推奨で簡単 | 自分で純正 claude との分離を細かく管理しづらい |
shell に export ANTHROPIC_BASE_URL=... |
手順が短い | 同じ shell の claude が全部 Ollama 向きになる |
~/.zshrc に書く |
毎回設定しなくてよい | 純正 Claude まで常に Ollama 向きになりやすい |
ollama-cc ラッパー |
起動時だけ Ollama に向く | ラッパー を自分で用意する必要がある |
最終形: claude は純正、ollama-cc は Ollama
最終的な使い方はシンプルです。
# 純正 Claude Code
claude
# Ollama 経由
ollama-cc
ollama-cc の役割はこうです。
claude本体は改名しないANTHROPIC_BASE_URLはollama-ccの子プロセスにだけ渡すANTHROPIC_AUTH_TOKEN=ollamaもollama-ccの子プロセスにだけ渡すANTHROPIC_API_KEYは親 shell に残っていても unset する- モデル枠を Ollama Cloud モデルに割り当てる
実際のモデル割当はこうしています(あくまで自分の設定例です)。
Haiku 枠 -> qwen3-coder-next:cloud
Sonnet 枠 -> glm-4.7:cloud
Opus 枠 -> glm-5.1:cloud
利用可能なモデル名は ollama list や Ollama のモデル一覧で確認してください。
Claude Code 用モデルではコンテキスト長が重要なので、大きめの context window(少なくとも 64k tokens)を持つモデルを選ぶとよいです。
ラッパー の中身を初心者向けに読む
ollama-cc の中身は、要点だけを載せるとこうなります。
exec env -u ANTHROPIC_API_KEY \
ANTHROPIC_AUTH_TOKEN="$OLLAMA_CC_AUTH_TOKEN" \
ANTHROPIC_BASE_URL="$OLLAMA_CC_BASE_URL" \
ANTHROPIC_DEFAULT_HAIKU_MODEL="$OLLAMA_CC_HAIKU_MODEL" \
ANTHROPIC_DEFAULT_SONNET_MODEL="$OLLAMA_CC_SONNET_MODEL" \
ANTHROPIC_DEFAULT_OPUS_MODEL="$OLLAMA_CC_OPUS_MODEL" \
claude "$@"
env ... claude "$@"は「このコマンドを実行する時だけ環境変数を付けてclaudeを起動する」という意味-u ANTHROPIC_API_KEYは「API キーが親 shell にあっても消す」という意味"$@"はollama-cc --model sonnetのように渡した引数を、そのままclaudeに渡すためのもの
ollama-cc は Claude Code の別物ではなく、Ollama 用のメモを一時的に貼り付けてから claude を起動する小さな受付係です。
試行錯誤 1: claude-plan を作ろうとしてやめた
最初は「プラン用に claude-plan」「実装用に claude-ollama」という分離を考えました。
しかし、Ollama 側だけが特殊設定なら、純正側にラッパーを噛ませる必要はない。
純正は claude のままが一番素直。
そこで claude-plan は削除し、純正 claude と ollama-cc の二択にしました。
分離したいからといって、両方にラッパーを作ればよいわけではありませんでした。純正側はなるべく素のままにして、特殊設定である Ollama 側だけ包むほうが分かりやすかったです。
試行錯誤 2: CLAUDE_CONFIG_DIR を分けたら初期設定画面になった
一度は CLAUDE_CONFIG_DIR=$HOME/.ollama-cc で設定ディレクトリも分けようとしました。
これにより Claude Code から見ると「新しい空の設定」になりました。
結果、Ollama 用に起動したはずが Claude Code の初期設定画面になり、Claude Pro のアカウント設定へ流れました。
今回必要だったのは「接続先の切り替え」であって、「Claude Code のログイン状態や設定一式の分離」ではなかった。 設定ディレクトリを分けると、ログイン状態も別物になって初心者にはかえって分かりにくい。
そのため CLAUDE_CONFIG_DIR は使わず、接続先だけ ラッパー 内の環境変数で切り替える形に戻しました。
将来的に完全分離したい場合は CLAUDE_CONFIG_DIR 分離も選択肢になります。
ただしその場合は別途ログイン・初期設定・設定ファイル管理が必要になります。
試行錯誤 3: ANTHROPIC_AUTH_TOKEN と ANTHROPIC_API_KEY を両方入れたら警告が出た
実際に出た警告の要旨はこうでした。
Auth conflict: Both a token (ANTHROPIC_AUTH_TOKEN) and an API key (ANTHROPIC_API_KEY) are set.
Claude Code から見ると、トークン認証と API キー認証の両方が指定されていて、どちらを使うべきか曖昧なので警告されました。
対応としては、ANTHROPIC_AUTH_TOKEN=ollama だけを渡し、ANTHROPIC_API_KEY は env -u ANTHROPIC_API_KEY で消しました。
公式 docs の中には ANTHROPIC_API_KEY="" を使う例もありますが、今回の Claude Code では衝突警告が出たため、ラッパー では片方にしました。
公式例にあるからといって、手元の Claude Code のバージョンで必ずそのまま無警告になるとは限りませんでした。今回は ANTHROPIC_AUTH_TOKEN に寄せ、ANTHROPIC_API_KEY は明示的に消すほうが安定しました。
動作確認コマンド
記事に載せる確認コマンドはこうです。
which claude
which ollama-cc
claude --version
ollama-cc --version
ollama-cc --print-config
期待する状態はこうです。
claude path: /Users/.../.local/bin/claude
base url: http://localhost:11434
auth token: ollama (default placeholder)
haiku model: qwen3-coder-next:cloud
sonnet model: glm-4.7:cloud
opus model: glm-5.1:cloud
混入チェックもしておきます。
env | grep -E '^(ANTHROPIC_BASE_URL|CLAUDE_CONFIG_DIR|OLLAMA_CC_|ANTHROPIC_DEFAULT_)='
親 shell に ANTHROPIC_BASE_URL が常駐していないか見ます。
純正 claude を起動するターミナルに ANTHROPIC_BASE_URL=http://localhost:11434 が残っていたら、純正も Ollama に向いてしまいます。
注意: env | grep の出力には API キーや認証トークンが含まれる可能性があるため、出力をそのまま共有しないようにしてください。
最終的なコード例
記事には最小版として載せます。実際の ラッパー はもう少し長いですが、概念説明にはこれで十分です。
#!/usr/bin/env bash
set -euo pipefail
OLLAMA_CC_BASE_URL="${OLLAMA_CC_BASE_URL:-http://localhost:11434}"
OLLAMA_CC_AUTH_TOKEN="${OLLAMA_CC_AUTH_TOKEN:-ollama}"
OLLAMA_CC_HAIKU_MODEL="${OLLAMA_CC_HAIKU_MODEL:-qwen3-coder-next:cloud}"
OLLAMA_CC_SONNET_MODEL="${OLLAMA_CC_SONNET_MODEL:-glm-4.7:cloud}"
OLLAMA_CC_OPUS_MODEL="${OLLAMA_CC_OPUS_MODEL:-glm-5.1:cloud}"
exec env -u ANTHROPIC_API_KEY \
ANTHROPIC_AUTH_TOKEN="$OLLAMA_CC_AUTH_TOKEN" \
ANTHROPIC_BASE_URL="$OLLAMA_CC_BASE_URL" \
ANTHROPIC_DEFAULT_HAIKU_MODEL="$OLLAMA_CC_HAIKU_MODEL" \
ANTHROPIC_DEFAULT_SONNET_MODEL="$OLLAMA_CC_SONNET_MODEL" \
ANTHROPIC_DEFAULT_OPUS_MODEL="$OLLAMA_CC_OPUS_MODEL" \
claude "$@"
実運用版では --print-config や --doctor も入れていますが、ここでは概念を伝えるための短縮版としています。
サードパーティ製 LLM / 互換 API を使う時の注意
注意点として、これは Claude Code の画面から別のモデル提供元にリクエストを流す構成です。
ANTHROPIC_BASE_URL を変えると、Claude Code の送信先も変わります。つまり、プロンプトやコード断片がどこに送られ、どのように保存・課金・処理されるかは、接続先のサービスや ゲートウェイ の仕様に依存します。
Anthropic のドキュメントでも、サードパーティの proxy / ゲートウェイ については、Anthropic がそのセキュリティや機能を保証・監査するものではなく、自己判断で使う趣旨の注意があります。
この記事は自分の個人環境での設定メモです。仕事の機密情報や個人情報を扱う場合は、Ollama、利用するモデル提供元、経由する ゲートウェイ の利用規約・データ保持・料金体系を確認したうえで、自己責任で試してください。
まとめ
今回の一番の学びは、AI ツールの設定でつまずいたとき、モデル名より先に「どのプロセスに、どの環境変数が渡っているか」を見るべきだった、ということでした。
- Claude Code の接続先は環境変数で変わる
- 便利だが、グローバルに設定すると純正
claudeにも混ざる ANTHROPIC_AUTH_TOKEN=ollamaは localhost Ollama 用のプレースホルダ- Cloud モデルでも入口は
localhost:11434。Ollama が窓口になる - 純正
claudeはなるべく素のままにし、Ollama 側だけollama-ccで包むと分かりやすい - 失敗した設定も含めて、環境変数の影響範囲を意識するのが大事だった
- サードパーティ製 LLM / 互換 API に向ける場合は、送信先と利用規約を自分で確認する必要がある
純正 Claude Code は claude のまま。Ollama に行きたい時だけ ollama-cc。
このくらい単純な形に戻したら、ようやく頭の中も環境も落ち着きました。
※2026年5月時点