モデル比較

Claude Sonnet 5.5 vs gpt-oss-120b

料金・コンテキスト長・実際の回答で比較(2026年11月時点)

Claude Sonnet 5.5(Anthropic)とgpt-oss-120b(OpenAI)を、FastMetalのゲートウェイで実際に呼び出せる条件で比較します。どちらも同じOpenAI互換エンドポイントとAPIキーから利用でき、切り替えは model の文字列を変えるだけです。

スペックと料金

anthropic logoClaude Sonnet 5.5openai logogpt-oss-120b
提供元AnthropicOpenAI
入力(100万トークンあたり)¥336¥16
出力(100万トークンあたり)¥1,680¥79
想定コスト(入力1,000・出力500トークン × 1,000回)¥1,176¥56
コンテキスト長1,000,000 トークン131,072 トークン
リリース日2026/9/282025/8/5
入力モダリティtext, image, filetext
生成速度 (p50)308 トークン/秒 (n=30)245 トークン/秒 (n=27)
アリーナ 総合#46 · ELO 1,472#220 · ELO 1,352
アリーナ 日本語#31 · ELO 1,465#161 · ELO 1,324
アリーナ コーディング#45 · ELO 1,516#228 · ELO 1,389

料金はFastMetalの単価(税別)です。

順位データ: LMArena leaderboard dataset(lmarena-ai/leaderboard-dataset、CC BY 4.0、2026-11-09時点)。カテゴリ名の対応付けとスコアの丸めはFastMetalによる。

どちらを選ぶべきか

  • 料金重視ならgpt-oss-120b。出力100万トークンあたり¥79で、Claude Sonnet 5.5より95%安くなります。
  • 総合の評価はアリーナ順位でClaude Sonnet 5.5が上です(46位。gpt-oss-120bは220位)。
  • 日本語の評価はアリーナ順位でClaude Sonnet 5.5が上です(31位。gpt-oss-120bは161位)。
  • コーディングの評価はアリーナ順位でClaude Sonnet 5.5が上です(45位。gpt-oss-120bは228位)。
  • 長い文書を扱うならClaude Sonnet 5.5。コンテキスト長は1,000,000トークンで、gpt-oss-120bの131,072トークンより広くとれます。
  • 迷ったら両方を同じキーで試せます。model の文字列を変えるだけで切り替わり、料金はそれぞれの単価で従量課金されます。

同じプロンプトへの実際の回答

FastMetalのゲートウェイが返した回答をそのまま並べています。ベンチマークの数字ではなく、実際の出力です。

このエラーをデバッグして

以下のエラーがPythonアプリケーションで発生しています。原因を特定して修正してください。 Traceback (most recent call last): File "app.py", line 23, in get_user_orders total = sum(order["price"] * order["quantity"] for order in orders) TypeError: unsupport…

Claude Sonnet 5.5

## 原因 `order["price"]` が数値ではなく**文字列(str)**で返ってきていることが原因です。 - `price` カラムが `VARCHAR`/`TEXT` 型になっている - DB ドライバや DB ラッパー (`db.query`) が `DECIMAL`/`NUMERIC` を文字列で返している - CSV や JSON 由来のデータをそのまま保存している などが考えられます。 補足として、純粋な Python 3 では `"abc" * 3` は文字列の繰り返しとして**エラーになりません**。そのため、提示されたメッセージ通りの文言は標準の `str * int` では出にくく、`db.query` が独自の型を返している可能性もあります。実際には `sum()` 内で `int + str` の TypeError になることが多いです。いずれにしても「`price` が数値型でない」という根本原因は同じです。 まず型を確認してください。 ```python print(type(orders[0]["price"]), repr(orders[0]["price"])) print(type(orders[0]["quantity"]), repr(orders[0]["quantity"])) ``` ## 修正案 ### 1. コード側で数値に変換する(金額なので `Decimal` 推奨) ```python from decimal import Decimal def get_user_orders(user_…
応答時間 12.3秒出力 1534 トークン

gpt-oss-120b

**原因** `order["price"]` が **文字列** (`str`) で返ってきているため、数値 (`int`/`float`/`Decimal`) と掛け算しようとしたときに ``` TypeError: unsupported operand type(s) for *: 'str' and 'int' ``` が発生しています。 このケースは主に次のいずれかが原因です。 | 可能性 | 内容 | |--------|------| | ① DBドライバが数値列を文字列として取得している | たとえば `psycopg2` の `cursor_factory=RealDictCursor` でも `numeric` が文字列になることがあります。 | | ② テーブル定義が文字列型 (`VARCHAR`, `CHAR`) になっている | `price` カラムが文字列型で保存されている。 | | ③ `SELECT` 文でキャストせずにそのまま取得している | DB側で数値に変換していない。 | **修正方法**は 2 つの方向があります。 --- ## 1️⃣ Python 側で安全に数値へ変換する(最も手軽) ```python from decimal import Decimal, InvalidOperation def get_user_orders(user_id): # db.query の戻り値は dict のリスト(例: [{"price": "12.34", "quantity": "2"}, ..…
応答時間 7.1秒出力 1587 トークン

コードレビュー

以下のTypeScript関数をレビューして、可読性・パフォーマンス・ベストプラクティスの観点から改善点を提案してください。 async function fetchAllUsers(page: number = 1): Promise<any[]> { let allUsers: any[] = []; let hasMore = true; let currentPage = page; while (hasMo…

Claude Sonnet 5.5

# コードレビュー: `fetchAllUsers` ## 総評 ページネーションを回して全件取得するという意図は明確で、動作としては成立します。ただし、**型安全性・エラーハンドリング・関数の責務・命名**に改善余地があります。 --- ## 1. 可読性 | 問題点 | 詳細 | 改善案 | |---|---|---| | `any` の多用 | 戻り値も `data` も `any` で、型チェックの恩恵がない | `ApiUser` / `User` 型を定義する | | マジックナンバー `100` | `limit=100` と `< 100` の2箇所に重複 | `PAGE_SIZE` 定数にする | | インデックス付き `for` | `data.users[i]` が何度も登場して読みにくい | `filter` + `map`、または `for...of` | | `let user` | 再代入しないのに `let` | `const`(または直接返す) | | 文字列連結 | `+ " " +` は読みにくい | テンプレートリテラル | | 引数名 `page` | 「全件取得」なのにページ指定があり意図が不明瞭 | `startPage` にリネーム、または引数自体を削除 | | フラグ変数 `hasMore` | 制御フローが分散している | `break` / `return` で簡潔にする | --- ## 2. パフォーマンス - **リクエストが逐次実行**: 次ページの有無が前ページの結果に依存するため逐次自体は仕方がない…
応答時間 21.0秒出力 2760 トークン

gpt-oss-120b

## 📋 1. 現行コードの概要と主な課題 | 項目 | 現状 | 問題点・改善余地 | |------|------|-------------------| | **型安全** | `any[]`、`any` で型を放棄 | TypeScript のメリットが失われ、実装ミスがコンパイル時に検出できない | | **可読性** | 変数名が曖昧(`data`、`i`)・文字列結合で名前を組み立てている | 何をしているかが一読で分かりにくい | | **エラーハンドリング** | `fetch` の失敗や `response.ok === false` をチェックしていない | ネットワークエラーで例外がそのままスローされ、呼び出し側が把握しにくい | | **パフォーマンス** | ページ取得を **逐次** に行っている<br>(`while` ループ中で `await`) | ページ数が多いと総待ち時間が `N × latency` になる | | **ミューテーション** | `let` で再代入が多い | 不変性を保つ方がデバッグしやすい | | **ハードコーディング** | `limit=100` がコード中に埋め込まれている | API の変更に脆弱 | | **文字列結合** | `first_name + " " + last_name` | 可読性が低く、`undefined` が入った時に `"undefined"` が出力されるリスク | | **非同期キャンセル** | `AbortController` が未使用 | 長時間待機したままキャ…
応答時間 15.6秒出力 3532 トークン

SQLクエリの最適化

以下のSQLクエリは500万行のテーブルに対して実行すると30秒以上かかります。最適化してください。 SELECT p.product_name, c.category_name, COUNT(o.order_id) as order_count, SUM(o.amount) as total_sales, AVG(r.rating) as avg_rating FROM products p LEFT JOIN…

Claude Sonnet 5.5

# 最適化のポイント PostgreSQLを想定しています。このクエリは遅いだけでなく、**集計結果も誤っている**可能性が高いです。 ## 問題点 ### 1. JOINによる行の膨張(最大の原因、かつ結果が不正) `order_details`と`reviews`を同じ`products`に直接JOINしているため、商品ごとに「注文明細数 × レビュー数」の行が生成されます。 - 注文明細100件、レビュー50件の商品は5,000行になる - `COUNT(o.order_id)`と`SUM(o.amount)`はレビュー数倍に水増しされる - `AVG(r.rating)`も注文数で重み付けされ、正しい平均にならない ### 2. LEFT JOINがWHEREで実質INNER JOINになっている `WHERE o.created_at >= ...`は`o`がNULLの行を除外するため、`orders`へのLEFT JOINは意味を失っています。意図と実際の動作がずれている上、オプティマイザの結合順序の選択も難しくなります。 ### 3. 集計を先にせず、全結合してからGROUP BYしている 巨大な中間結果をGROUP BYしてからソートし、上位50件だけ取り出しています。集計は結合前に済ませ、評価の計算は上位50件に絞ってから行うべきです。 ### 4. `GROUP BY p.product_name, c.category_name` 同名の別商品が1行にマージされます。`p.id`でグループ化すべきです。 ### 5. インデックス不足 `o…
応答時間 24.4秒出力 3370 トークン

gpt-oss-120b

## 1. 現状のボトルネック | 項目 | 理由 | |------|------| | **① LEFT JOIN → INNER JOIN に変えられるケース** | `orders` の `status = '完了'` と `created_at >= …` が必ず満たす行だけを集計したいので、`LEFT JOIN` で結合した後に `WHERE o.created_at …` を書くと、`orders` が **NULL** の行も残ってしまい、不要なレコードが大量に産まれます。| | **② フィルタが JOIN 後に適用されている** | `WHERE o.created_at >= …` が **LEFT JOIN** の後に評価されるため、まず **全行** が `orders` と結合され、その後で絞り込む → 5 M 行 × (order_details の行数) の中間結果が膨大。| | **③ インデックスが足りない** | 現在は `products(id)` と `orders(order_id)` だけ。<br>検索条件・結合キーに使っているカラムは全部 **インデックス対象外** なので、フルテーブルスキャンやハッシュジョインが走ります。| | **④ GROUP BY に文字列を直接使っている** | `p.product_name` と `c.category_name` で GROUP BY すると、文字列比較が必要になる上、同名の商品が別 ID で存在したときに正しく集計できません。`p.id` で集計した方がインデックスを活かしやす…
応答時間 13.3秒出力 2901 トークン

他のプロンプトでも比較する →

よくある質問

Claude Sonnet 5.5とgpt-oss-120b、料金はどちらが安いですか?
出力100万トークンあたりClaude Sonnet 5.5は¥1,680、gpt-oss-120bは¥79で、gpt-oss-120bの方が安くなります(FastMetalの円建て単価・税別)。
Claude Sonnet 5.5とgpt-oss-120bのコンテキスト長の違いは?
Claude Sonnet 5.5は1,000,000トークン、gpt-oss-120bは131,072トークンです。
Claude Sonnet 5.5とgpt-oss-120b、評価が高いのはどちらですか?
公開アリーナの順位ではClaude Sonnet 5.5が上です(Claude Sonnet 5.5 31位、gpt-oss-120b 161位)。順位はリーダーボードの更新で変わります。
Claude Sonnet 5.5とgpt-oss-120bを同じAPIキーで使えますか?
はい。FastMetalのOpenAI互換エンドポイントで、model に "anthropic-claude-sonnet-5-5" または "gpt-oss-120b" を指定するだけで切り替えられます。料金はそれぞれの単価で、同じ前払い残高から従量課金されます。

どちらも同じAPIキーで試せます

アカウントを作成してクレジットを追加すれば、Claude Sonnet 5.5とgpt-oss-120bをブラウザのチャットとAPIの両方から呼び出せます。月額料金はありません。

Claude Sonnet 5.5の他の比較

gpt-oss-120bの他の比較