1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Code × OpenRouter Free Models — コスト $0 で AI 駆動開発を始める5つの設定

1
Posted at

TL;DR

  • OpenRouter の :free モデルは API キーさえあれば月額 $0 で強力な LLM を呼べる
  • Claude Code の ANTHROPIC_BASE_URL を OpenRouter に向けるだけでモデルを差し替えられる
  • Qwen3 235B / DeepSeek R1 / Llama 4 Maverick などが現時点で無料枠対象
  • タスク種別でモデルを使い分ける「コスト最適ルーティング」を 5 ステップで構築する

背景

AI コーディングアシスタントが普及した今、課題は「使えるかどうか」ではなく「コストをどう抑えるか」になってきました。

Anthropic Claude の API は高品質ですが、大量のコード生成・レビュー・ドキュメント生成を毎日回すと請求額がじわじわ上がります。
一方 OpenRouter は複数 LLM ベンダーへのリバースプロキシ的 API を提供しており、:free サフィックス付きモデルは レートリミット内であれば料金ゼロ で使えます。

Claude Code は ANTHROPIC_BASE_URL 環境変数で接続先エンドポイントを切り替えられるため、この 2 つを組み合わせることで 実装コストを大幅に削減できます。

本記事では、公開仕様のみをもとに「無料モデルをうまく使い倒す 5 つの設定」を解説します。


1. OpenRouter のセットアップ (基礎)

1-1. アカウント作成 & APIキー取得

openrouter.ai でアカウントを作り、ダッシュボードから APIキーを発行します。
:free モデルはクレジット残高不要ですが、APIキーは必須です。

1-2. :free モデルの見つけ方

OpenRouter のモデル一覧ページで "free" でフィルタするか、モデル ID 末尾が :free になっているものを探します。

2026年5月時点で無料枠が提供されているモデルの例:

モデル ID 提供元 コンテキスト長 得意領域
qwen/qwen3-235b-a22b:free Alibaba Cloud 40K 推論・コード
deepseek/deepseek-r1:free DeepSeek 64K 数学・論理・コード
meta-llama/llama-4-maverick:free Meta 128K 長文処理・RAG
mistralai/mistral-7b-instruct:free Mistral AI 32K 軽量・高速応答
google/gemma-3-27b-it:free Google 8K 一般タスク

⚠️ 無料モデルの提供状況は OpenRouter 側の都合で変わります。本番運用前に必ず openrouter.ai/models で確認してください。

1-3. OpenAI 互換エンドポイント

OpenRouter は OpenAI API 互換フォーマットを提供しています。

Base URL : https://openrouter.ai/api/v1
Authorization: Bearer <YOUR_OPENROUTER_API_KEY>

model フィールドに上記のモデル ID を指定するだけで呼び出せます。


2. Claude Code を OpenRouter に向ける

Claude Code は内部的に Anthropic Messages API を呼び出しますが、ANTHROPIC_BASE_URL 環境変数でエンドポイントを上書きできます。

export ANTHROPIC_BASE_URL="https://openrouter.ai/api/v1"
export ANTHROPIC_API_KEY="sk-or-v1-xxxxxxxxxxxxxxxxxxxx"  # OpenRouter の API キー

これだけで claude CLI が OpenRouter 経由で LLM を呼び出すようになります。

Note: OpenRouter は anthropic/ プレフィックスのモデルも仲介しています。ただし Anthropic モデルは有料です。コスト $0 を目指すなら必ず :free サフィックスのモデルを指定してください。


3. タスク別モデルルーティング戦略

「1 モデルで全タスクを処理する」のではなく、タスク種別に応じてモデルを切り替えるのが賢いアプローチです。

3-1. タスクとモデルのマッピング例

┌──────────────────────────────────────────────────────────┐
│  タスク                   │ 推奨モデル                    │
├──────────────────────────────────────────────────────────┤
│  コードレビュー (深い推論) │ deepseek-r1:free              │
│  コード生成・補完          │ qwen3-235b-a22b:free          │
│  長文ドキュメント読解・RAG │ llama-4-maverick:free         │
│  単純な質問・チャット      │ mistral-7b-instruct:free      │
│  テスト生成                │ qwen3-235b-a22b:free          │
└──────────────────────────────────────────────────────────┘

3-2. シェルエイリアスで切り替える

# ~/.bashrc or ~/.zshrc

# 推論・レビュー用 (DeepSeek R1 無料枠)
alias cc-review='CLAUDE_MODEL="deepseek/deepseek-r1:free" claude'

# コード生成用 (Qwen3 235B 無料枠)
alias cc-code='CLAUDE_MODEL="qwen/qwen3-235b-a22b:free" claude'

# 軽量・高速レスポンス用
alias cc-quick='CLAUDE_MODEL="mistralai/mistral-7b-instruct:free" claude'

CLAUDE_MODEL 環境変数は Claude Code が起動時に参照するため、コマンドライン引数を変えるだけでモデルが切り替わります。


4. .claude/settings.json によるプロジェクト単位の設定

Claude Code はプロジェクトルートに .claude/settings.json を置くことで、プロジェクト固有の設定を持てます。

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://openrouter.ai/api/v1",
    "CLAUDE_MODEL": "qwen/qwen3-235b-a22b:free"
  }
}

これで git clone 後すぐに全員が同じモデル設定で動けます。
APIキーはここに書かないでください。.env ファイルや OS のキーチェーンで管理するのが鉄則です。

.gitignore への追加

.env
.env.local
.claude/local.json   # ローカル個人設定は別ファイルに分離

5. フォールバック設定でレートリミットを乗り越える

:free モデルはレートリミットが厳しい場合があります。OpenRouter の モデルルーティング機能 を使えば、プライマリモデルが詰まったときに自動で別モデルへフォールバックさせられます。

5-1. OpenRouter のルーティング構文

OpenRouter API では model フィールドにカンマ区切りでフォールバック候補を列挙できます (2024年以降の機能)。

import openai

client = openai.OpenAI(
    base_url="https://openrouter.ai/api/v1",
    api_key="<YOUR_OPENROUTER_KEY>",
)

response = client.chat.completions.create(
    # プライマリ → フォールバック1 → フォールバック2 の順
    model="qwen/qwen3-235b-a22b:free",
    extra_body={
        "route": "fallback",
        "models": [
            "qwen/qwen3-235b-a22b:free",
            "deepseek/deepseek-r1:free",
            "mistralai/mistral-7b-instruct:free",
        ],
    },
    messages=[{"role": "user", "content": "Hello"}],
)

公式ドキュメント: openrouter.ai/docs/model-routing

5-2. Claude Code 向けのラッパースクリプト

Claude Code から直接フォールバックを制御するのは難しいため、軽量プロキシスクリプト を間に挟む方法が実用的です。

#!/usr/bin/env python3
"""
simple_proxy.py — OpenRouter fallback proxy (学習用最小実装)
Claude Code → localhost:8080 → OpenRouter
"""
from http.server import HTTPServer, BaseHTTPRequestHandler
import json, urllib.request, urllib.error, os

OPENROUTER_URL = "https://openrouter.ai/api/v1/chat/completions"
FREE_MODELS = [
    "qwen/qwen3-235b-a22b:free",
    "deepseek/deepseek-r1:free",
    "mistralai/mistral-7b-instruct:free",
]

class ProxyHandler(BaseHTTPRequestHandler):
    def do_POST(self):
        length = int(self.headers["Content-Length"])
        body = json.loads(self.rfile.read(length))

        # モデルを Free リストの先頭に差し替え + fallback 設定を注入
        body["models"] = FREE_MODELS
        body["route"] = "fallback"
        body.pop("model", None)  # 元のモデル指定を除去

        req = urllib.request.Request(
            OPENROUTER_URL,
            data=json.dumps(body).encode(),
            headers={
                "Content-Type": "application/json",
                "Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}",
            },
        )
        try:
            with urllib.request.urlopen(req) as resp:
                result = resp.read()
            self.send_response(200)
            self.send_header("Content-Type", "application/json")
            self.end_headers()
            self.wfile.write(result)
        except urllib.error.HTTPError as e:
            self.send_response(e.code)
            self.end_headers()
            self.wfile.write(e.read())

    def log_message(self, *args):
        pass  # ログ抑制

if __name__ == "__main__":
    server = HTTPServer(("localhost", 8080), ProxyHandler)
    print("Proxy listening on :8080")
    server.serve_forever()
# 起動
OPENROUTER_API_KEY="sk-or-v1-xxx" python3 simple_proxy.py &

# Claude Code をプロキシに向ける
export ANTHROPIC_BASE_URL="http://localhost:8080"
export ANTHROPIC_API_KEY="dummy"   # プロキシが本物のキーを持つので何でも OK
claude

ベンチマーク比較 (参考)

以下は公開されているベンチマーク結果の抜粋です。自社での実測値ではなく、各モデルの公開スコアを参照しています。

モデル HumanEval (code) MATH 速度感
DeepSeek R1 ~85% ~97% やや遅め (推論ステップ長い)
Qwen3 235B (A22B MoE) ~87% ~94% 中速 (MoE で効率的)
Llama 4 Maverick ~81% ~88% 速い
Mistral 7B Instruct ~67% ~60% 非常に速い

出典: 各モデルの公式ブログ・論文 / lmsys.org/leaderboard
ベンチマークはプロンプト設計・量子化レベルで大きく変わるため参考値として扱ってください。


注意点とトレードオフ

✅ Free モデルを使うべきシーン

  • ローカル開発環境でのプロトタイピング
  • CI の自動レビューコメント生成
  • ドキュメント自動生成 (品質よりスピード優先)
  • 個人 OSS プロジェクトのコスト削減

⚠️ Free モデルを避けるべきシーン

  • レートリミット依存の本番フロー: :free は利用者が集中すると遅延・エラーが増加
  • 機密性の高いコードの送信: サードパーティ経由になるため、セキュリティポリシーを必ず確認
  • レスポンス品質が直接ビジネス影響するケース: 最終的には有料モデルのほうが安定

ライセンス確認

各 OSS モデルのライセンスは以下の通りです。商用利用前に必ず確認してください。

モデル ライセンス 商用利用
Qwen3 Apache 2.0 ✅ 可
DeepSeek R1 MIT ✅ 可
Llama 4 Llama 4 Community License ⚠️ 月間 7 億ユーザー超は要申請
Mistral 7B Instruct Apache 2.0 ✅ 可
Gemma 3 Gemma Terms of Service ⚠️ 制限あり・要確認

まとめ

設定 効果
ANTHROPIC_BASE_URL を OpenRouter に向ける Claude Code から無料モデルを呼べる
タスク別シェルエイリアス 用途に合ったモデルを即切り替え
.claude/settings.json チーム全員で同じ設定を共有
フォールバックリスト レートリミット時の自動切り替え
軽量プロキシ より細かなルーティング制御

コスト $0 は「無制限に使える」ではなく「賢く使えば月の大部分を無料で回せる」という意味です。まずは開発環境だけでも試してみてください。有料モデルを使うべき場面と使い分けることで、品質を落とさずコストを最適化できます。


参考リンク


✍️ 本記事の著者: 合同会社ジモラボ

ジモラボは、八王子を拠点に AI を活用した SaaS を多数開発しています。本記事の技術検証もそうした開発過程の副産物です。

興味を持っていただけたら、ぜひ各 SNS のフォローもお願いします!

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?