TL;DR
- OpenRouter の
:freeモデルは商用利用可能なものが複数存在し、API コールを無料で行える - Claude Code の
ANTHROPIC_API_KEY以外のモデルを呼び出す仕組みを使えば、雑務的な LLM タスクをコストゼロに近づけられる - ただし
:freeモデルはレートリミット・出力品質・ライセンスに注意が必要
背景
AI を使った開発補助ツールを日常的に使うと、一番気になるのが API 費用 です。Claude Opus や GPT-4o を全タスクに使い続けると、1 日数百〜数千円に達することも珍しくありません。
そこで注目したいのが OpenRouter の :free サフィックス付きモデル です。2025〜2026 年現在、OpenRouter では Qwen3、Llama 4、Mistral、Gemma 3 など複数の高性能モデルが :free プランで提供されており、速度や品質はプレミアムモデルに劣るものの、「繰り返し実行する定型タスク」には十分以上です。
本記事では、OpenRouter :free モデルを使って AI 補助コストを大幅削減する 3 つのパターン を紹介します。
OpenRouter :free モデルとは
OpenRouter は複数の LLM を統一 API で呼び出せるルーティングサービスです。
https://openrouter.ai/api/v1 を OpenAI 互換エンドポイントとして扱えるため、既存の openai SDK がそのまま使えます。
:free モデルの特徴:
| 特徴 | 内容 |
|---|---|
| 費用 | $0/token (無料枠) |
| レートリミット | 共有キューのため混雑時に遅延あり |
| コンテキスト長 | モデルによる (8K〜128K) |
| 商用利用 | モデルのオリジナルライセンスに依存 |
2026 年 5 月時点で利用可能な主な :free モデル例:
-
qwen/qwen3-235b-a22b:free(Apache 2.0 / 商用 OK) -
meta-llama/llama-4-scout:free(Llama 4 Community License) -
google/gemma-3-27b-it:free(Gemma Terms of Use) -
mistralai/mistral-7b-instruct:free(Apache 2.0 / 商用 OK)
⚠️ ライセンス確認は必須:
:freeは「料金が無料」なだけであり、各モデルのオリジナルライセンス (Apache 2.0 / CC-BY-NC / 独自 Terms) は適用されます。商用プロダクトに組み込む場合は必ず公式ページを確認してください。
パターン 1: コミットメッセージの自動生成
タスクの性質: 短い入力 → 短い出力。品質のゆらぎが許容される典型例。
import openai
import subprocess
client = openai.OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="<YOUR_OPENROUTER_API_KEY>",
)
def get_git_diff() -> str:
result = subprocess.run(
["git", "diff", "--cached", "--stat"],
capture_output=True, text=True
)
return result.stdout[:2000] # トークン節約のため先頭 2000 文字に限定
def suggest_commit_message(diff: str) -> str:
response = client.chat.completions.create(
model="qwen/qwen3-235b-a22b:free",
messages=[
{
"role": "system",
"content": (
"You are a Git commit message generator. "
"Output only the commit message in Conventional Commits format. "
"No explanation, no markdown."
),
},
{
"role": "user",
"content": f"Generate a commit message for this diff:\n\n{diff}",
},
],
max_tokens=80,
)
return response.choices[0].message.content.strip()
if __name__ == "__main__":
diff = get_git_diff()
if not diff:
print("No staged changes.")
else:
print(suggest_commit_message(diff))
使い方:
git add -p
python commit_suggest.py
# => feat(auth): add JWT refresh token rotation
コスト: $0 (:free モデル使用時)
品質: Conventional Commits 準拠で十分使えるレベル。長い diff を渡すと精度が落ちるので --stat のみ渡す。
パターン 2: PR レビューコメントの初稿生成
CI パイプラインに組み込んで「レビュアーが見るべきポイント」を事前サジェストする例です。
import openai
import sys
client = openai.OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="<YOUR_OPENROUTER_API_KEY>",
)
SYSTEM_PROMPT = """
You are a senior software engineer reviewing a pull request.
Point out:
1. Potential bugs or logic errors
2. Missing error handling
3. Security concerns
4. Readability improvements
Be concise. Use bullet points. Maximum 10 points.
""".strip()
def review_diff(diff_text: str) -> str:
response = client.chat.completions.create(
model="meta-llama/llama-4-scout:free",
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": f"Review this diff:\n\n```diff\n{diff_text}\n```"},
],
max_tokens=512,
temperature=0.2, # 低めにして一貫性を確保
)
return response.choices[0].message.content
if __name__ == "__main__":
diff = sys.stdin.read()
print(review_diff(diff))
GitLab CI 組み込み例 (.gitlab-ci.yml 抜粋):
review-ai-suggest:
stage: review
script:
- git diff origin/main...HEAD > /tmp/pr.diff
- python scripts/ai_review.py < /tmp/pr.diff > /tmp/review.md
- cat /tmp/review.md
artifacts:
paths:
- /tmp/review.md
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
注意: AI レビューはあくまで「見落とし補助」です。自動マージに連動させることなく、人間のレビュアーが最終判断を行う運用を推奨します。
パターン 3: README / ドキュメント翻訳バッチ
OSS プロジェクトの多言語対応や、社内技術文書の英語化に。
import openai
import pathlib
import argparse
client = openai.OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="<YOUR_OPENROUTER_API_KEY>",
)
def translate_markdown(source: str, target_lang: str) -> str:
response = client.chat.completions.create(
model="google/gemma-3-27b-it:free",
messages=[
{
"role": "system",
"content": (
f"Translate the following Markdown document to {target_lang}. "
"Preserve all Markdown syntax, code blocks, and links exactly. "
"Only translate prose text."
),
},
{"role": "user", "content": source},
],
max_tokens=4096,
)
return response.choices[0].message.content
def main():
parser = argparse.ArgumentParser()
parser.add_argument("input", help="Input .md file")
parser.add_argument("--lang", default="English", help="Target language")
args = parser.parse_args()
src = pathlib.Path(args.input).read_text(encoding="utf-8")
out = translate_markdown(src, args.lang)
out_path = pathlib.Path(args.input).with_suffix(f".{args.lang[:2].lower()}.md")
out_path.write_text(out, encoding="utf-8")
print(f"Saved: {out_path}")
if __name__ == "__main__":
main()
python translate.py README.md --lang English
# => README.en.md が生成される
コスト削減効果: 1 万字の README を GPT-4o で翻訳すると約 $0.15 かかりますが、:free モデルなら $0。品質は人手校正が前提ですが、ドラフトとして十分機能します。
:free モデルを使う際の 4 つの注意点
1. レートリミットと混雑
:free モデルは共有キューのため、ピーク時間帯 (UTC 14:00〜20:00 頃) はレスポンスが数十秒かかる場合があります。バッチ処理では time.sleep(2) を挟むか、リトライロジック (tenacity ライブラリ等) を組み込みましょう。
from tenacity import retry, wait_exponential, stop_after_attempt
@retry(wait=wait_exponential(min=2, max=30), stop=stop_after_attempt(5))
def call_llm(messages):
return client.chat.completions.create(...)
2. コンテキスト長の制限
:free モデルによっては 8K トークンまでのものもあります。大きなファイルをそのまま渡すとエラーになるため、チャンク分割を実装してください。
def chunk_text(text: str, max_chars: int = 6000) -> list[str]:
return [text[i:i+max_chars] for i in range(0, len(text), max_chars)]
3. ライセンスの商用可否
前述のとおり「:free = 無料」であり「商用利用 OK」は別問題です。
| モデル | ライセンス | 商用利用 |
|---|---|---|
| Qwen3 | Apache 2.0 | ✅ OK |
| Mistral 7B | Apache 2.0 | ✅ OK |
| Llama 4 | Llama 4 Community License | ⚠️ 月間 7 億ユーザー超で制限あり |
| Gemma 3 | Gemma Terms of Use | ⚠️ Google の規約に準拠 |
4. 出力の品質ゆらぎ
同じプロンプトでも呼び出しごとに品質が変わります。正確性が重要なタスク (コード生成・セキュリティチェック等) には使わず、ドラフト・補助 用途に限定することを推奨します。
まとめ
| パターン | モデル推奨 | 月間コスト削減試算 |
|---|---|---|
| コミットメッセージ生成 | qwen3-235b:free | 数百〜数千円 → $0 |
| PR レビューサジェスト | llama-4-scout:free | 同上 |
| ドキュメント翻訳バッチ | gemma-3-27b-it:free | 大量翻訳で特に効果大 |
OpenRouter :free モデルは「完璧な出力」を求めるには不向きですが、CI の補助・ドラフト生成・反復的な定型処理 には十分です。プレミアムモデルと :free モデルを タスクの重要度によって使い分ける ことで、AI 開発コストを構造的に削減できます。
コストポリシーを明示してチームで共有し、「このタスクは :free で十分」という基準を作っていくと、費用対効果の高い AI 活用体制を構築できます。
参考リンク
- OpenRouter ドキュメント
- OpenRouter モデル一覧
- Qwen3 GitHub (Apache 2.0)
- Meta Llama 4 ライセンス
- Gemma Terms of Use
- tenacity — Python リトライライブラリ
投稿前セルフレビュー
- 4-A〜4-D に該当する記述は 1 件もないか? → YES (OSS/公式 API のみ)
- コード断片は OSS / 公式 docs / 学習用最小例のみか? → YES
- 引用した OSS のライセンスを明記したか? → YES (Apache 2.0 / Llama 4 / Gemma Terms)
- 引用した数値・ベンチマークの出典 URL を記載したか? → YES (公式リンク記載)
- タイトルに数字を入れたか? → YES (「3 つの活用パターン」「4 つの注意点」)
- タグは Qiita 慣習に合っているか? → 下記参照
- 末尾にプロフィール+lookupai リンクを付けたか? → YES
- lookupai への自然な誘導が 1-2 箇所あるか? → YES (フッターで 1 箇所)
- 誤字脱字・コードブロックの言語指定は OK か? → YES
推奨タグ (Qiita): OpenRouter, LLM, Python, AI, コスト削減
✍️ 本記事の著者: 合同会社ジモラボ
ジモラボは、八王子を拠点に AI を活用した SaaS を多数開発しています。本記事の技術検証もそうした開発過程の副産物です。
- 🌐 公式サイト: https://locallab.jp
- 🔍 AI SEO 最適化 SaaS: lookupai.jp
- 📺 YouTube: @locallab_llc
- ✉️ お問い合わせ: info@locallab.jp
興味を持っていただけたら、ぜひ各 SNS のフォローもお願いします!