0
0

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 モデルで月0円AI開発環境を構築する5つの設定

0
Posted at

TL;DR

  • OpenRouter の :free サフィックスモデルを使えば、AI コーディング支援を月額0円で回せる
  • Claude Code の ANTHROPIC_BASE_URLmodel 設定を差し替えるだけで 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-5claude-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_URLhttps://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-235BGemini 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_URLhttps://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 クラスのモデルが無料で使える状況は、個人開発・スタートアップにとって恩恵が大きい。

「まず無料枠で動かす → 限界を感じたら有料モデルへ」というグラデーションで使うと、コストを最小化しながら開発体験を維持できる。


参考リンク


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

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

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

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?