TL;DR
- OpenRouter の
:freeサフィックスモデルを使えば、AI コーディング支援を月額0円で回せる - Claude Code の
ANTHROPIC_BASE_URLとmodel設定を差し替えるだけで OpenRouter 経由になる - Qwen3-235B-A22B・Gemini 2.0 Flash・DeepSeek R1 など強力な無料モデルが複数存在する
- タスク種別ごとにモデルを使い分ける「モデルルーティング」が費用対効果を最大化する
背景
LLM を使ったコーディング支援は、使えば使うほど API 料金が積み上がる。
Claude Opus や GPT-4o をデフォルトのまま使い続けると、個人開発・スタートアップには痛い出費になる。
OpenRouter には :free サフィックスを持つモデル群 がある。これらはレート制限こそあるものの、トークン単価は $0.00/1M。
Claude Code はカスタムベースURL を受け付けるため、この仕組みと組み合わせると 無料枠内でかなりの開発作業を回せる。
本記事では、その設定手順と運用上のコツを5つのポイントで解説する。
前提
| 項目 | バージョン/条件 |
|---|---|
| Claude Code | 最新版 (npm @anthropic-ai/claude-code) |
| OpenRouter アカウント | 無料プラン (クレジットカード登録不要で :free モデル利用可) |
| Node.js | 18 以上 |
| OS | macOS / Linux / WSL2 |
ポイント 1: OpenRouter の :free モデルとは何か
OpenRouter は複数の LLM プロバイダーをまとめて呼び出せるルーティングサービス。
モデル名末尾に :free を付けると、そのモデルの無料枠バリアント にルーティングされる。
2026年5月時点で代表的な :free モデルは以下の通り(OpenRouter モデル一覧 で最新版を確認):
| モデル ID | 特徴 | コンテキスト |
|---|---|---|
qwen/qwen3-235b-a22b:free |
MoE 235B・強力な推論 | 40K |
qwen/qwen3-30b-a3b:free |
軽量 MoE・高速 | 40K |
google/gemini-2.0-flash-exp:free |
マルチモーダル・高速 | 1M |
deepseek/deepseek-r1:free |
推論特化・OSS | 64K |
deepseek/deepseek-chat-v3-0324:free |
コーディング強め | 64K |
meta-llama/llama-4-maverick:free |
Meta 最新世代 | 512K |
mistralai/mistral-7b-instruct:free |
軽量・超高速 | 32K |
注意:
:freeモデルはレート制限 (rpm / req per day) が有料版より厳しい。複数モデルをローテーションすることで制限を回避できる。
ポイント 2: Claude Code を OpenRouter 経由で動かす基本設定
Claude Code は内部的に Anthropic SDK を使っているが、ANTHROPIC_BASE_URL 環境変数でベースURL を差し替えられる。
# ~/.bashrc or ~/.zshrc に追記
export ANTHROPIC_BASE_URL="https://openrouter.ai/api/v1"
export ANTHROPIC_API_KEY="sk-or-v1-xxxxxxxxxxxx" # OpenRouter の API キー
ただし Claude Code はデフォルトで claude-opus-4-5 や claude-sonnet-4-5 などを選択しようとする。
明示的にモデルを指定するには起動時オプションを使う:
# 起動時にモデルを指定
claude --model "qwen/qwen3-235b-a22b:free"
または claude.json(プロジェクトルート or ~/.claude/)に書いておくと毎回指定不要:
{
"model": "qwen/qwen3-235b-a22b:free",
"maxTokens": 8192
}
補足: OpenRouter の API エンドポイントは
/v1/messagesではなく/api/v1/messagesであることに注意。ANTHROPIC_BASE_URLにhttps://openrouter.ai/api/v1を設定すれば SDK が自動で補完してくれる。
ポイント 3: タスク種別ごとのモデル使い分け (モデルルーティング)
「とにかく無料モデルだけ使う」より、タスクの重さでモデルを切り替える 方が快適に使える。
軽量タスク (補完・単純なバグ修正)
→ mistral-7b-instruct:free (超高速・低レイテンシ)
中量タスク (リファクタ・ユニットテスト生成)
→ qwen3-30b-a3b:free or gemini-2.0-flash-exp:free
重量タスク (設計・複雑なアーキテクチャ相談)
→ qwen3-235b-a22b:free or deepseek-r1:free
シェルスクリプトでラッパーを作ると切り替えが楽:
#!/usr/bin/env bash
# claude-free.sh: タスク重さに応じてモデルを切り替えるラッパー
TASK_SIZE="${1:-medium}"
shift
case "$TASK_SIZE" in
light)
MODEL="mistralai/mistral-7b-instruct:free"
;;
medium)
MODEL="qwen/qwen3-30b-a3b:free"
;;
heavy)
MODEL="qwen/qwen3-235b-a22b:free"
;;
reason)
MODEL="deepseek/deepseek-r1:free"
;;
*)
echo "Usage: claude-free.sh [light|medium|heavy|reason] <claude args>"
exit 1
;;
esac
ANTHROPIC_BASE_URL="https://openrouter.ai/api/v1" \
claude --model "$MODEL" "$@"
# 使い方
./claude-free.sh light "この関数の型エラーを直して"
./claude-free.sh heavy "このマイクロサービスの分割方針を提案して"
./claude-free.sh reason "このアルゴリズムの計算量を証明して"
ポイント 4: レート制限をローテーションで回避する
:free モデルには 1 分あたりのリクエスト数 (rpm) 制限がある。
長い作業セッション中に制限に引っかかった場合、別モデルに即切り替え るのが現実的な対処法。
#!/usr/bin/env bash
# claude-rotate.sh: rpm 制限に引っかかったら次のモデルへフォールバック
FREE_MODELS=(
"qwen/qwen3-235b-a22b:free"
"google/gemini-2.0-flash-exp:free"
"deepseek/deepseek-chat-v3-0324:free"
"meta-llama/llama-4-maverick:free"
"qwen/qwen3-30b-a3b:free"
)
for MODEL in "${FREE_MODELS[@]}"; do
echo "→ Trying $MODEL ..."
RESULT=$(ANTHROPIC_BASE_URL="https://openrouter.ai/api/v1" \
claude --model "$MODEL" "$@" 2>&1)
# 429 (rate limit) でなければ成功とみなす
if ! echo "$RESULT" | grep -q "429\|rate limit\|Too Many Requests"; then
echo "$RESULT"
exit 0
fi
echo " Rate limited. Trying next model..."
sleep 2
done
echo "All free models are rate limited. Try again in a few minutes."
exit 1
ポイント 5: OpenRouter の X-Title ヘッダーでリクエストを識別する
OpenRouter のダッシュボードではリクエストログを確認できる。
X-Title ヘッダーを付けると「どのプロジェクトから来たリクエストか」を判別しやすい。
Claude Code 自体はカスタムヘッダーの直接注入をサポートしていないが、
ローカルプロキシ を挟む方法で実現できる。軽量な実装例 (Node.js + http-proxy):
// proxy.mjs — OpenRouter へのローカルプロキシ (学習・個人開発用)
import http from "http";
import https from "https";
const OPENROUTER_HOST = "openrouter.ai";
const OPENROUTER_API_KEY = process.env.OPENROUTER_API_KEY;
const PROJECT_NAME = process.env.PROJECT_NAME ?? "claude-code-local";
const server = http.createServer((req, res) => {
const body = [];
req.on("data", (chunk) => body.push(chunk));
req.on("end", () => {
const options = {
hostname: OPENROUTER_HOST,
path: req.url,
method: req.method,
headers: {
...req.headers,
host: OPENROUTER_HOST,
authorization: `Bearer ${OPENROUTER_API_KEY}`,
"x-title": PROJECT_NAME, // ← プロジェクト識別
"http-referer": "https://locallab.jp", // ← オプション
},
};
const proxy = https.request(options, (proxyRes) => {
res.writeHead(proxyRes.statusCode, proxyRes.headers);
proxyRes.pipe(res);
});
proxy.write(Buffer.concat(body));
proxy.end();
});
});
server.listen(8787, () => {
console.log("Proxy running on http://localhost:8787");
});
# プロキシ経由で Claude Code を使う
node proxy.mjs &
ANTHROPIC_BASE_URL="http://localhost:8787/api/v1" \
PROJECT_NAME="my-saas-project" \
OPENROUTER_API_KEY="sk-or-v1-xxxx" \
claude --model "qwen/qwen3-235b-a22b:free"
これにより OpenRouter ダッシュボードで my-saas-project と識別されたリクエストが可視化される。
モデル別クオリティ所感 (2026年5月時点)
実際に使ってみた主観的な評価を参考までに:
| モデル | コーディング | 推論/数学 | 日本語 | 速度 |
|---|---|---|---|---|
qwen3-235b-a22b:free |
★★★★☆ | ★★★★★ | ★★★★☆ | ★★★☆☆ |
gemini-2.0-flash-exp:free |
★★★★☆ | ★★★☆☆ | ★★★★☆ | ★★★★★ |
deepseek-r1:free |
★★★★☆ | ★★★★★ | ★★★☆☆ | ★★☆☆☆ |
deepseek-chat-v3-0324:free |
★★★★★ | ★★★★☆ | ★★★☆☆ | ★★★★☆ |
llama-4-maverick:free |
★★★☆☆ | ★★★☆☆ | ★★★☆☆ | ★★★★☆ |
mistral-7b-instruct:free |
★★★☆☆ | ★★☆☆☆ | ★★☆☆☆ | ★★★★★ |
日本語コーディング用途なら Qwen3-235B か Gemini 2.0 Flash が安定。
英語中心なら DeepSeek V3 がコーディング精度で頭一つ抜けている印象。
注意点
:free モデルの制約
- 商用利用の可否はモデルごとに異なる。DeepSeek R1 は MIT ライセンスだが、モデルによっては CC-BY-NC など商用禁止ライセンスが付くケースもある。OpenRouter のモデルページでライセンスを必ず確認すること。
- コンテキストウィンドウ上限は有料バリアントより低い場合がある
- レスポンスに
[TRUNCATED]が入ることがある (プロバイダー側の負荷状況による)
Claude Code との互換性
- OpenRouter の API は OpenAI 互換
/chat/completionsと Anthropic 互換/messagesの両方を提供しているが、Claude Code は Anthropic Messages API を使う。ANTHROPIC_BASE_URLにhttps://openrouter.ai/api/v1を設定すれば自動的に/messagesエンドポイントへルーティングされる - tool_use (ファイル編集・Bash 実行) は Anthropic Messages API の機能。OpenRouter 経由でも対応している無料モデルは複数あるが、非対応モデルを選ぶと Claude Code のファイル編集機能が動作しない
まとめ
| 設定 | 内容 |
|---|---|
ANTHROPIC_BASE_URL |
https://openrouter.ai/api/v1 |
ANTHROPIC_API_KEY |
OpenRouter の API キー |
--model |
qwen/qwen3-235b-a22b:free 等 |
| フォールバック | rpm 制限時に次の :free モデルへ切替 |
| ルーティング | タスクの重さで 3 段階にモデルを使い分け |
OpenRouter の :free モデルは「クオリティが低い」わけではなく、単に商業的な優先度が下げられたキューを通る無料枠。
Qwen3-235B や DeepSeek R1 クラスのモデルが無料で使える状況は、個人開発・スタートアップにとって恩恵が大きい。
「まず無料枠で動かす → 限界を感じたら有料モデルへ」というグラデーションで使うと、コストを最小化しながら開発体験を維持できる。
参考リンク
- OpenRouter モデル一覧
- OpenRouter API ドキュメント
- Claude Code 公式ドキュメント
- Anthropic SDK - Custom Base URL
- DeepSeek R1 ライセンス (MIT)
- Qwen3 ライセンス (Apache 2.0)
✍️ 本記事の著者: 合同会社ジモラボ
ジモラボは、八王子を拠点に AI を活用した SaaS を多数開発しています。本記事の技術検証もそうした開発過程の副産物です。
- 🌐 公式サイト: https://locallab.jp
- 🔍 AI SEO 最適化 SaaS: lookupai.jp
- 📺 YouTube: @locallab_llc
- ✉️ お問い合わせ: info@locallab.jp
興味を持っていただけたら、ぜひ各 SNS のフォローもお願いします!