はじめに
前回の記事で aider + Ollama(qwen2.5-coder:7b)に Python スクリプトを生成させたところ、骨格は正しいもののバグが 4 つ混じるという結果でした。「7B だとこんなもんなのか?」という疑問がわいてきたので、公開ベンチマークでの評価結果を確認してみました。
対象者
- ローカル LLM のコード生成能力がどの程度か客観的に知りたい人
- モデルのパラメータ数(7B, 14B, 32B 等)で性能がどう変わるか知りたい人
- 商用 API(GPT, Claude 等)とローカル LLM の差を把握したい人
ベンチマーク 1: aider Leaderboard
概要
aider 公式が運営するベンチマークです。6 言語(C++, Go, Java, JavaScript, Python, Rust)の 225 問でモデルのコード編集能力をランキングしています。
見方
| 列名 | 意味 |
|---|---|
| モデル名 | 使用モデル |
| 正解率(%) | 225 問中の正答率 |
| コスト | 全問解くのにかかった API 費用 |
| Edit Format | コード変更の出力形式(whole / diff / diff-fenced / architect) |
Edit Format とは
aider がLLM に「コードの変更をどういう形式で出力させるか」の指定です。
| フォーマット | 説明 | 向いているモデル |
|---|---|---|
| whole | ファイル全体を丸ごと出力 | 小さいモデル・ローカル LLM |
| diff | 差分だけを出力 | 高性能モデル(GPT-4, Claude 等) |
| diff-fenced | マークダウンのコードブロック内に差分を出力 | Gemini 等 |
| architect | 設計用モデルと編集用モデルの 2 段階 | モデルを 2 つ組み合わせる場合 |
whole はトークン消費が多いが安定する。diff は効率的だがモデルが書式を間違えるとファイルが壊れる。ローカル LLM では whole が推奨です。
主要モデルの結果
| モデル | 種別 | 正解率 |
|---|---|---|
| gpt-5 (high) | 商用API | 88.0% |
| Gemini 2.5 Pro | 商用API | 83.1% |
| Qwen2.5-Coder-32B(ローカル最上位) | ローカル | 16.4% |
商用 API モデルが 80% 超なのに対し、ローカルで動かせるモデルは 32B でも 16% 程度です。7B のエントリはそもそもありません。
このベンチマークの特徴
- aider でのコード編集能力 を測るベンチマーク。単なるコード生成ではなく、指示に従って既存コードを修正する能力を評価している
- 6 言語(C++, Go, Java, JavaScript, Python, Rust)の Exercism 問題 225 問を、人間の介入なしで解けるかを測定
- 商用 API モデルが中心で、ローカル LLM のサイズ別比較をしたい場合は、次の BigCodeBench の方が参考になる
ベンチマーク 2: BigCodeBench
概要
HuggingFace の BigCode コミュニティが運営するコーディング特化ベンチマークです。オープンモデル(ローカルで動かせるモデル)が中心で、パラメータ数別の比較ができます。
見方
| 列名 | 意味 |
|---|---|
| Complete | 詳細なドキュメント(docstring)を与えてコードを補完させるタスクのスコア |
| Instruct | 自然言語の指示だけを与えてコードを生成させるタスクのスコア |
| Average | Complete と Instruct の平均 |
| #Act Params (B) | モデルの実効パラメータ数(Billion 単位) |
どの列を見るべきか
aider のようなツールで使う場合は Instruct が一番参考になります。
- Instruct = 「こういうコード書いて」→ コード生成。aider での使い方そのもの
- Complete = 途中まで書いたコードの続きを補完。GitHub Copilot のインライン補完に近い
このベンチマークから分かること
- 掲載モデルは全て HuggingFace 上のオープンモデル(ローカルで動かせる)
- Instruct の正答率は上位モデルでも 30% 程度
- ランクインしているのは 32B 以上のモデルがほとんど
-
#Act Params (B)を見れば、同じモデルファミリのサイズ別性能差が分かる
ベンチマークから見えた現実
| 観点 | 現実 |
|---|---|
| 7B モデルの立ち位置 | 両ベンチマークとも上位に 7B クラスはほぼ不在。性能的にランク外 |
| 32B でも正答率は低い | aider ベンチで 16%、BigCodeBench の Instruct で 30% 程度 |
| 商用 API との差 | GPT-5 や Claude は 80% 超。ローカル LLM とは桁違いの性能差 |
| メモリの壁 | 32B モデルは 20GB 以上のメモリが必要。8GB 環境では動かせない |
前回 qwen2.5-coder:7b で Python スクリプトにバグが 4 つ混じったのは、ベンチマークの数字を見れば妥当な結果です。7B で完璧なコードを期待する方が無理がある、ということがデータからも裏付けられました。
じゃあローカル LLM は意味がないのか?
ベンチマークの数字だけ見ると絶望的ですが、使い方次第で十分価値はあります。
| 観点 | 商用 API | ローカル LLM |
|---|---|---|
| コード生成品質 | 高い(80% 超) | 低い(たたき台レベル) |
| コスト | 従量課金 | 無料 |
| ネットワーク | 必要 | 不要(オフライン OK) |
| プライバシー | コードが外部に送信される | 完全ローカル |
| 速度 | 高速 | CPU 推論だと遅い |
完璧なコードを求めるなら商用 API、コストゼロ・オフライン・プライバシー重視なら用途を絞ってローカル LLM、という使い分けが現実的です。
まとめ
| 項目 | 内容 |
|---|---|
| aider Leaderboard | 商用モデル 80% 超 vs ローカル 32B で 16%。7B はランク外 |
| BigCodeBench | Instruct 正答率は上位でも 30% 程度。32B 以上が中心 |
| 7B の現実 | ベンチマーク的にもバグ混じりは妥当。たたき台として使うのが正解 |
| ローカル LLM の価値 | 無料・オフライン・プライバシー。用途を絞れば十分役に立つ |
ベンチマークの数字は厳しいですが、「無料でオフラインでコードのたたき台が作れる」という価値は変わりません。数字を理解した上で、期待値を適切に設定して使うのが大事です。