Claude Code を本格的に使い始めると、月末の請求額に一度は驚くのではないでしょうか。私自身、複数サイトの自動化ワークフローで Claude Code を酷使していたとき、思ったより早くコストが膨らんでいくのを感じました。
そこで試してみたのが「ローカル LLM との使い分け」です。すべてのタスクを Claude に任せるのではなく、定型的・繰り返し系のタスクは手元の GPU で動く Ollama に振ります。複雑な設計や判断が必要なタスクだけ Claude Sonnet/Opus にお願いします。この棲み分けで、私の環境では API コストを体感で 50〜60% 程度削減できました。
なぜローカル LLM × Claude Code なのか
Claude Code は強力ですが、リクエスト単価が安くはありません。Sonnet で入力 $3/1M トークン、Opus で $15/1M トークン(2026年5月時点)。ちょっとしたファイル整形や定型コメント生成が積み重なると、じわじわコストがかさみます。
一方、Ollama はローカルマシンで LLM を動かすためのランタイムです。一度モデルをダウンロードしてしまえば、それ以降は完全無料。GPU がなくても CPU で動きますし、M シリーズ Mac なら Apple Silicon の恩恵で思ったより快適に使えます。
ポイントは「全部ローカルにしよう」ではなく「使い分け」です。Ollama で動く中規模モデル(Gemma 3 27B や Qwen 2.5 Coder など)は、Claude Sonnet と比べると複雑な推論や長いコンテキスト処理では見劣りします。ここを正直に理解したうえで、得意領域に集中させるのが肝です。
環境構築:Ollama + litellm プロキシ
Claude Code はリクエスト先として ANTHROPIC_BASE_URL 環境変数を参照します。ここを litellm プロキシに向けることで、Claude Code からのリクエストを Ollama に中継できます。
1. Ollama をインストール
# macOS(curl インストール)
curl -fsSL https://ollama.com/install.sh | sh
# Homebrew の場合
brew install ollama
# サービス起動
ollama serve &
# モデルをダウンロード(コーディング用途なら Qwen2.5-Coder または Gemma 3)
ollama pull qwen2.5-coder:32b
# GPU メモリが少ない場合は 14B か 7B に
# ollama pull qwen2.5-coder:14bollama run qwen2.5-coder:32b で動作確認しておきましょう。「Hello, how are you?」など簡単な質問を投げて返答が返れば OK です。
2. litellm をインストール
litellm は、Anthropic・OpenAI・Ollama などの異なる API フォーマットを統一的に扱えるプロキシです。Claude Code は Anthropic Messages API フォーマットでリクエストを投げますが、litellm がそれを Ollama 用のフォーマットに変換してくれます。
pip install 'litellm[proxy]'3. litellm の設定ファイルを作成
~/.claude-local/litellm_config.yaml を作成します:
# Claude Code → litellm → Ollama のルーティング設定
model_list:
# Claude Code が claude-sonnet-4-6 を要求したとき、Ollama の Qwen に振る
- model_name: claude-sonnet-4-6
litellm_params:
model: ollama_chat/qwen2.5-coder:32b
api_base: http://localhost:11434
# より軽量な処理は小さいモデルに振る設定(オプション)
- model_name: claude-haiku-4-5-20251001
litellm_params:
model: ollama_chat/qwen2.5-coder:14b
api_base: http://localhost:11434
litellm_settings:
port: 4000
set_verbose: false注意: Ollama は Anthropic Messages API に完全準拠しているわけではないため、ツール使用(tool_use)など高度な機能は litellm 側で互換処理が行われます。機能によっては動作しない場合もありますので、実際の利用前に確認しておくと安心です。
4. litellm プロキシを起動
litellm --config ~/.claude-local/litellm_config.yaml
# バックグラウンドで動かしたい場合
nohup litellm --config ~/.claude-local/litellm_config.yaml > /tmp/litellm.log 2>&1 &起動すると http://localhost:4000 でリクエストを待ち受けます。
Claude Code を litellm プロキシに向ける
環境変数を設定するだけです:
# .zshrc や .bashrc に追記(ローカル LLM モードを使いたいとき)
export ANTHROPIC_BASE_URL=http://localhost:4000
export ANTHROPIC_API_KEY=local-dev-key # litellm はキーの値を検証しないがフィールドは必要
# claude コマンドで動作確認
claude "この関数の引数名をよりわかりやすい名前に変えてください"切り替えをスムーズにするために、シェルエイリアスを用意しておくと便利です:
# .zshrc に追記
# Claude API(本番)モード
alias cc-cloud='unset ANTHROPIC_BASE_URL && export ANTHROPIC_API_KEY=your_real_api_key'
# ローカル LLM(節約)モード
alias cc-local='export ANTHROPIC_BASE_URL=http://localhost:4000 && export ANTHROPIC_API_KEY=local-dev-key'cc-local と打つだけでローカルモードに切り替えられます。プロンプトに現在のモードを表示しておくのもおすすめです:
# .zshrc のプロンプト設定
# ANTHROPIC_BASE_URL が設定されている場合は黄色表示で知らせる
RPROMPT='%F{yellow}${ANTHROPIC_BASE_URL:+[LOCAL]}%f'どのタスクをローカルに振るか — 判断軸
「何でもかんでもローカルに振ればいい」というわけではありません。私が実際に使って感じた境界線をご紹介します。
ローカル LLM が得意なタスク(コスト節約ゾーン):
- ファイル名・変数名・関数名のリネーム
- JSDoc やコメントの追加・修正
- テンプレートコードの生成(単純な CRUD など)
- ログ出力の追加
- import 文の整理・並べ替え
- 軽微なバグ修正(スタックトレースが明確なもの)
- コードフォーマットの修正
Claude Sonnet/Opus が必要なタスク(クラウドに任せるゾーン):
- アーキテクチャ設計の相談や提案
- 複数ファイルにまたがる複雑なリファクタリング
- セキュリティ要件を考慮した実装
- 長いコンテキストを読んだ上でのデバッグ
- 新機能の設計から実装まで
- 自然言語の要件から仕様を起こす作業
判断に迷ったら「この作業、AI が間違えたとき自分ですぐ気づけるか?」を基準にしています。気づけるなら → ローカル、複雑すぎて間違えても気づきにくい → Claude Sonnet、という整理です。
よくある落とし穴と対策
落とし穴 1: Ollama サーバーが落ちていてエラーになる
Claude Code 起動前に Ollama が動いているか確認するのを忘れがちです。起動スクリプトを用意しておきましょう:
#!/bin/bash
# ~/bin/start-local-claude.sh
# Ollama が起動していなければ起動
if ! pgrep -x "ollama" > /dev/null; then
echo "Ollama を起動します..."
ollama serve &
sleep 3
fi
# litellm が起動していなければ起動
if ! curl -s http://localhost:4000/health > /dev/null 2>&1; then
echo "litellm プロキシを起動します..."
nohup litellm --config ~/.claude-local/litellm_config.yaml > /tmp/litellm.log 2>&1 &
sleep 2
fi
echo "✅ ローカル Claude Code モード準備完了"
cc-localchmod +x ~/bin/start-local-claude.sh で実行権限を付けておきます。
落とし穴 2: tool_use が期待通りに動かない
Claude Code は内部的にファイル操作や検索を tool_use として実装しています。ローカル LLM がこの形式に対応していない場合、エラーや予期せぬ挙動が起きることがあります。特にファイル編集を伴う複雑な操作では、ローカルモードが途中で詰まることがあります。そういった場合は素直に cc-cloud でクラウドに切り替えるのが最善です。
落とし穴 3: ローカルモードのまま本番作業をしてしまう
プロンプトへのモード表示(前述の RPROMPT 設定)と、作業前の echo $ANTHROPIC_BASE_URL 確認を習慣にすることをおすすめします。
API コストの実際の変化
コスト削減の効果は使い方によって大きく変わります。私の場合、1日に Claude Code を 4〜6 時間使うセッションで、以前は月 $40〜60 かかっていたものが $20〜30 前後まで下がりました。特に、記事生成補助やコード整形などの反復作業をローカルに振ったのが効いています。
litellm を使ったより高度なマルチプロバイダー設定については、Claude API × litellm マルチプロバイダー AI ゲートウェイ完全ガイドで詳しく解説しています。
全体を振り返って — まず 1 つのタスクをローカルに振るところから
「Claude Code + ローカル LLM」の設定は、一度動かしてしまえば使い分けが自然と身につきます。最初の一歩として、Ollama に qwen2.5-coder:14b(軽めのモデル)をダウンロードして、コメント追加だけをローカルに振るところから始めてみてください。
重要なのは「完全移行」ではなく「使い分けの習慣」です。複雑な設計判断はやはり Claude の方が質が高い。ローカル LLM はその補佐として使う — この役割分担が、コストと品質を両立させる現実的な答えだと感じています。