Claude Code を純正 Claude と Ollama で使い分けるために ollama-cc を作った

読了 約14分
Claude Code を純正 Claude と Ollama で使い分けるために ollama-cc を作った

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_URLollama-cc の子プロセスにだけ渡す
  • ANTHROPIC_AUTH_TOKEN=ollamaollama-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 は削除し、純正 claudeollama-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_TOKENANTHROPIC_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_KEYenv -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月時点