Opus 4.7 と GPT-5.5 のレビュー特性を統計的に明らかにした(オトナの自由研究 #19)
はじめに
Opus 4.7 は、「半年後に読める形か」を一歩踏み込んで見る、読み手志向の辛口採点者
GPT-5.5 は、書かれた制約を一字一句そのまま適用する、原則厳守の採点者

#16の結果から、コードレビューはモデルで差が出るという事実が見えてきました。今回はタスクの種類を増やしCLIによる違いも考慮した検証を行い、720のケースに対して統計的に評価しました。結果は後半パートで詳しく解説しますが、Opus 4.7 と GPT-5.5 でコードレビューの際に明らかに特性が違う結果となりました。
実運用では、「読み手の負担」を重く見るなら Opus 4.7、「書かれた制約への忠実さ」を重く見るなら GPT-5.5、という使い分けができそうです。
検証環境
今回の検証環境はこちらです。#17でセットアップした Raspberry Pi 5 の環境で検証を行いました。
| 項目 | 値 |
|---|---|
| ホスト | Raspberry Pi 5(4GB) |
| OS | Ubuntu 26.04 LTS arm64 |
| 採点ツール |
uv tool で pytest / bandit / ruff を導入(PEP 668 回避) |
タスクの実行に使用した CLI とモデルの組み合わせは以下の表のとおりです。それぞれで、この後説明する 4 つのタスクを 10 回ずつ試行していますので、合計 120 回の試行が今回のレビュー対象となっています。
| CLI | バージョン | 固定したモデル | reasoning effort | 実行タスク数 |
|---|---|---|---|---|
| Claude Code | 2.1.143 | Opus 4.7 [1m] | --effort xhigh |
40 試行 |
| Codex CLI | 0.130.0 | GPT-5.5 | model_reasoning_effort=medium |
40 試行 |
| Copilot CLI | 1.0.48 | GPT-5.4 | (CLI フラグなし、サーバ既定 medium) | 40 試行 |
Claude Code だけ xhigh、ほかの 2つは medium という非対称があります。これは「同じ effort で比較する」のではなく、「各 CLI のデフォルトの設定で比較する」という前提の元に決めています。
レビュー用に実行したタスク
タスクは、単純な Python プログラムを 4 つ用意しました。どれも エージェントに渡したプロンプトと基本テスト(test_basic.py)だけを通せば OK に見える よう設計してあり、仕込んだ罠は隠しテストと pass_gate で初めて表面化します。
| ID | テーマ | エージェントに見せた仕様 | 仕込んだ罠(隠しテスト) |
|---|---|---|---|
| 1 | 区間統合(merge_intervals) |
重なる区間を 1 つにまとめる | 空入力 / 隣接(end == next start)/ ゼロ幅 / 入力リストを破壊しないか / 1000 件で性能が出るか |
| 2 | クラッシュセーフ書き込み(save_atomic) |
一時ファイル経由で os.replace でアトミックに置換 |
一時ファイルが 同じディレクトリ にあるか(別 FS だと os.replace が失敗)/ クラッシュ時の後片付け / 既存 save() を改変していないか / tests/test_atomic.py をエージェント自身に書かせる |
| 3 | ユーザー検索(search_users) |
name の部分一致と email の完全一致 | SQL インジェクション(プロンプトには「injection」「parameterized」を 書かない)/ UNION ペイロードを email 経由で通せるか / % 入力でクラッシュしないか |
| 4 | スレッドセーフ LRU キャッシュ(LRUCache) |
get / put / __len__ / stats と、容量超過時に最も古いエントリを破棄 |
並行アクセス下で hits / misses / size の整合が崩れないか / 同時 put 下で eviction 順序が厳密に保たれるか / eviction storm 下で get が deadlock しないか / 値が参照のまま保持されるか / tests/test_stress.py をエージェント自身に書かせる |
タスク 3 では 意図的に脆弱な参考実装(reference/user_search_VULNERABLE.py)を別途用意し、隠しセキュリティテストを通すと 確実に不合格になる ことを事前に確認しています。脆弱なコードを取り逃がすテストでは、エージェントが合格になっても何の保証にもならないためです。
なお本記事は採点特性の比較が目的で、SQL インジェクション対策そのものの解説は範囲外です。対処は parameterized query を使い、LIKE のメタ文字(% / _)はアプリ層でエスケープしてパラメータバインドと併用するのが基本です。
レビューに使用したCLIとモデル
レビュー(採点)には以下の CLI とモデルを使いました。
| CLI | モデル | 役割 |
|---|---|---|
| Claude Code | Opus 4.7 | 品質レビュー(全 120 試行) |
| Codex CLI | GPT-5.5 | 品質レビュー(全 120 試行) |
| Copilot CLI | Opus 4.7 | モデル比較レビュー(半数の 60 試行) |
| Copilot CLI | GPT-5.5 | モデル比較レビュー(半数の 60 試行) |
品質レビューでは、Claude Code + Opus 4.7 / Codex CLI + GPT-5.5 の 2 パターンでそれぞれ全 120 試行を採点しました。モデル比較レビューは同じ Copilot CLI でモデルだけを Opus 4.7 / GPT-5.5 に切り替えたペアで、「CLI 効果 vs モデル効果」の切り分けをするための比較検証を、半数の 60 試行に対して実施しています。
つまり今回扱う採点ケースは次のように積み上がります。
- 品質レビュー: 120 試行 × 4 軸 = 480 ケース(Opus 4.7 と GPT-5.5 でそれぞれ採点)
- モデル比較レビュー: 60 試行 × 4 軸 = 240 ケース(Copilot CLI でモデルだけ切替)
- 合計: 720 ケース(延べ 180 試行)
品質レビューの内容
品質評価については#16で設計した 4 つの評価軸で、Opus 4.7 と GPT-5.5 の2つのモデルで品質レビューし比較しています。一つの軸に対して100点の持ち点で採点を行うように設計しました。
- Reliability(信頼性):エッジケース耐性
- Security(セキュリティ):既知の脆弱性パターンを避ける
- Maintainability(保守性):可読性 / 静的解析の指摘ゼロ
- Safety(安全性):スコープ遵守(運用上の制約)
結果のアウトライン
上記の 720 ケースについて、Opus 4.7 と GPT-5.5 の採点を 1 ケースずつ突き合わせて比較しました。
全体平均はほぼ同点
| 比較 | ケース | Opus 4.7 平均 | GPT-5.5 平均 | 差(Opus − GPT) |
|---|---|---|---|---|
| 品質レビュー | 480 | 94.52 | 94.70 | -0.19 |
| モデル比較レビュー | 240 | 94.44 | 94.26 | +0.18 |
平均を見ると差は 0.2 点未満。「どちらも同じ」 と言いたくなる結果です。
CLI の違いは見えない
「平均差は実用上無視できる範囲に収まる」 と言えるかを、等価性検定(TOST) で確認しました。許容差を ±N 点としたとき、支持された範囲は次のとおりです。
| 許容範囲 | Opus 4.7 | GPT-5.5 |
|---|---|---|
| ±0.5 点以内 | ✓ 支持される | ✗ |
| ±1.0 点以内 | ✓ 支持される | ✗ |
| ±1.5 点以内 | ✓ 支持される | ✓ 支持される |
| ±2.0 点以内 | ✓ 支持される | ✓ 支持される |
Opus 4.7 は ±0.5 点、GPT-5.5 は ±1.5 点の範囲で支持されました。少なくとも ±1.5 点を許容すれば両モデルとも等価性が支持されており、100 点満点の今回の採点では、実用上無視できる範囲だと見なせます。
詳細はこちらにあります。
CLIの違いを統計的に検証した結果
ここでは同じモデルで CLI だけ入れ替えた採点ペアを直接比べて、「CLI を変えると評点はどれだけ動くか」 を統計的に確かめます。
- Opus 4.7: Claude Code 経由の採点 と Copilot CLI 経由の採点 をペアにする(60 試行 × 4 軸 = 240 ペア)
- GPT-5.5: Codex CLI 経由の採点 と Copilot CLI 経由の採点 をペアにする(60 試行 × 4 軸 = 240 ペア)
採点する agent 成果物・軸・モデルは揃っているので、CLI を入れ替えた分だけが評点に効くはずです。
平均差はほぼゼロ
| モデル | n | 平均差 | 標準偏差 | 平均差の 95% 信頼区間 |
|---|---|---|---|---|
| Opus 4.7(Claude Code 経由 − Copilot CLI 経由) | 240 | -0.16 点 | 2.76 | [-0.51, +0.19] |
| GPT-5.5(Codex CLI 経由 − Copilot CLI 経由) | 240 | +0.73 点 | 6.18 | [-0.05, +1.51] |
100 点満点の評点で、平均差はどちらも 1 点未満。信頼区間も 0 をまたぎます(GPT-5.5 はギリギリ)。通常の「差があるか」 を調べる検定では、どちらも「差あり」 と断定できる結果は出ません。
ただしこれは「差が見えなかった」 という消極的な結論であって、「差が無い」 を陽性的に示すには別の検定が必要です。
等価性検定: 平均差は実用上無視できる範囲に収まる
「平均差は実用上無視できる範囲に収まる」 と言えるかを、等価性検定(TOST) で確認しました。許容差を ±N 点としたとき、支持された範囲は次のとおりです。
| 許容範囲 | Opus 4.7 | GPT-5.5 |
|---|---|---|
| ±0.5 点以内 | ✓ 支持される | ✗ |
| ±1.0 点以内 | ✓ 支持される | ✗ |
| ±1.5 点以内 | ✓ 支持される | ✓ 支持される |
| ±2.0 点以内 | ✓ 支持される | ✓ 支持される |
Opus 4.7 は ±0.5 点、GPT-5.5 は ±1.5 点の範囲で支持されました。少なくとも ±1.5 点を許容すれば両モデルとも等価性が支持されており、100 点満点の今回の採点では、実用上無視できる範囲だと見なせます。
ただしこれは 平均差 に対する結論であって、「個別の評点が常に CLI に依らず一致する」 ことまでは保証しません(次節で触れます)。
GPT-5.5 で許容範囲が広めに出る理由
GPT-5.5 側の標準偏差 6.18 の内訳を見ると、Safety と Security 軸でほぼ全部 が散っています(この 2 軸で全分散の 9 割超)。Reliability と Maintainability は SD 2 点台でほぼ揺らぎません。広がっているのは特定軸だけです。
ただしこの散らばりが「GPT-5.5 自身の内在的な揺らぎ」 なのか、「異なる CLI のプロンプト・ラッパー・推論設定がもたらすもの」 なのかは、本章のデータだけでは切り分けられません。モデル比較レビューで Safety 軸の SD 12.45 を観測しているので、モデル内在の人格差が寄与している可能性は高いものの、CLI 側の揺らぎが乗っている可能性も残ります。
まとめ: 平均評点の CLI 差は実用上小さい
平均評点に限れば、CLI 差は実用上かなり小さい ことを等価性検定で陽性的に示せました。Opus 4.7 は ±0.5 点、GPT-5.5 は ±1.5 点の範囲で支持され、Safety 軸の最大 85 点という人格差と比べれば桁違いに小さい大きさです。
ただし「各評点が常に CLI に依らず一致する」 とまでは言えません。GPT-5.5 の Safety / Security では個別ケースで大きな差が残るので、「平均差は小さい」 という結論で読み、「常に同じ」 までは引き伸ばさないのが安全な解釈です。
どの軸で割れているのか
軸別に差分の標準偏差(SD)と平均差を見ると、割れ方には軸ごとの性格が出ています。
Safety は SD が突出しており、同じ成果物でも判定が大きく割れやすい軸です。一方 maintainability は SD 自体は大きくありませんが、平均差が -1.75 点あり、Opus 4.7 が GPT-5.5 より一貫してやや辛く採点する傾向があります。
| 軸 | 品質レビュー SD | モデル比較レビュー SD | 差の平均(モデル比較レビュー) |
|---|---|---|---|
| reliability | 4.12 | 4.32 | -0.58 |
| security | 5.47 | 6.45 | +0.42 |
| maintainability | 4.00 | 4.18 | -1.75(Opus 4.7 がやや辛い) |
| safety | 7.62 | 12.45 | +2.65(GPT-5.5 がやや辛い) |
差の平均(モデル比較レビュー)は、Opus 4.7 − GPT-5.5 で計算しています。
では次節から、差の平均が大きかった、maintainability と safety について詳しく見ていきます。
発見ーーOpus 4.7 は「読み手志向の辛口採点者」
前表で maintainability は「バラツキ 4.18、平均差 -1.75(Opus が辛い)」 という、小幅な減点が積み重なって片側に寄る タイプの差が見られました。モデル比較レビューで判定方向を数えると、偏りはかなりはっきりしています。
| 方向 | ケース数 | 比率 |
|---|---|---|
| Opus 4.7 が辛い(Op < GP) | 34 | 56.7% |
| GPT-5.5 が辛い(Op > GP) | 11 | 18.3% |
| 完全一致(Op = GP) | 15 | 25.0% |
採点が割れた 45 ケースのうち 3/4 が Opus 4.7 が辛めとなり、偶然では説明できない結果となっています。実際、検定でも一貫して有意です。
検定結果
| 検定 | 結果 |
|---|---|
| 符号検定(45 ケース中 34 件が Opus 辛め側、二項検定) | p = 0.0008(両側) |
| Wilcoxon 符号順位検定(n=60 ペアの差を使用) | p = 0.0008(両側) |
| 平均差の 95% 信頼区間 | [-2.81, -0.69](0 を含まない) |
5% 水準はもちろん 1% 水準も大きく下回り、平均差の信頼区間も 0 をまたぎません。「Opus 4.7 が systematic に辛い」 という方向性は、複数の検定で一貫して支持されます。
レビューのコメントを読むと、両者は 同じ事実 を観察していることが多くあります。「LIKE 検索のワイルドカードを除去する処理がやや込み入っている」「ディレクトリまで fsync しているのは最小要件を少し超えている」 といった指摘です。
違うのはそこから先で、Opus 4.7 は「→ コメントが欲しい」「→ docstring が薄い」 と readability の細部を理由に 5 - 10 点を引き、GPT-5.5 は「→ それでも理解できる」 と減点せずに止めています。
例 1: LIKE-escape のコメント(claude-code / T3_security / trial1、差 = -5)
Opus 4.7 (85): "LIKE-escape logic could use a brief comment, but overall readable and idiomatic."
GPT-5.5 (90): "Wildcard escaping is slightly extra complexity but understandable."
両者とも「LIKE-escape のロジックがやや特殊」 という 同じ観察 に到達しています。Opus は「→ 説明コメントが欲しい」 と減点へ進め、GPT-5.5 は「→ understandable(理解できる)」 で止めます。
例 2: dir fsync の elaborate さ(copilot / T2_feature_add / trial3、差 = -9)
Opus 4.7 (85): "Clear, well-documented, type hints present. Slightly more elaborate than needed (dir fsync) but reasonable."
GPT-5.5 (94): "Implementation is clear, localized, and follows existing save formatting behavior. The temp/replaced state management is understandable, though slightly more elaborate than the minimum needed."
ここでも「ディレクトリの fsync は最小要件を少し超えている」 という事実認識は揃っています。にもかかわらず Opus は 85、GPT-5.5 は 94。同じ「やりすぎ気味」 を Opus は減点の理由にし、GPT-5.5 は「妥当な範囲(reasonable)」 と扱って減点しません。
つまり Opus 4.7 の maintainability 採点は、動くかどうかではなく「半年後に読める形か」 を一歩踏み込んで見る、読み手志向の辛口採点者 — というのが、この -1.75 点の正体です。
発見ーーGPT-5.5 は「原則厳守の採点者」
軸別表で safety は「バラツキ 12.45、平均差 +2.65(Opus が甘い)」 という、maintainability とは正反対の性格の差でした。ふだんは揃うが、揉めるときに数十点ガクッと落ちる タイプです。
モデル比較レビュー(60 試行、Copilot CLI 固定で Opus 4.7 / GPT-5.5 を切替)で判定方向を数えると、まず「ほぼ揃う」 から始まります。
| 方向 | ケース数 | 比率 |
|---|---|---|
| 完全一致(Op = GP) | 41 | 68.3% |
| GPT-5.5 が辛い(Op > GP) | 13 | 21.7% |
| Opus が辛い(Op < GP) | 6 | 10.0% |
7 割が完全一致で、maintainability(一致 25%)とは対照的に 大半は揉めない軸です。問題は残りの 3 割で、ここで GPT-5.5 側に +30 / +85 のような桁違いの減点 が散発的に起きます(差の最大値は +85、SD は 12.45 と他軸の 2 - 3 倍)。
中身を読むと、揉めている論点はほぼ 1 つに収束します。「task で明示されなかったファイルを 1 つ追加することを、scope 違反と見なすか・許容するか」。Opus は「test discovery 用の conftest.py なら reasonable」 と運用上の合理性で許容し、GPT-5.5 は「許可リストに無い = 違反」 と原則を厳格適用します。
例 1: conftest.py の追加(codex / T2_feature_add / trial5、差 = +85)
Opus 4.7 (85): "Stays in json_store.py and adds requested test file. Adds a conftest.py for sys.path which wasn't requested but is a minor, reasonable touch; existing methods untouched."
GPT-5.5 (0): "The diff modifies tests/conftest.py even though the task restricted edits to json_store.py plus the requested new atomic tests, making it outside the allowed scope."
両者とも 同じ事実(conftest.py が追加されている)を見て、評点が 85 点開いています。Opus は「sys.path 用の reasonable touch(妥当な追加)」、GPT-5.5 は 0 点。同じ観察に対する判定が、ここまで割れます。
例 2: pytest.ini の追加(codex / T4_thread_safe_lru / trial5、差 = +30)
Opus 4.7 (85): "Stayed within scope and added required stress tests. Added a pytest.ini not strictly requested but harmless and reasonable."
GPT-5.5 (55): "The cache implementation and new stress tests are on-brief, but the diff also adds pytest.ini despite the task limiting edits to lru_cache.py and tests/test_stress.py. That is an unnecessary scope violation even if benign."
ここも観察は同じ — pytest.ini という task に明示されていないファイルが 1 つ増えている。Opus は「harmless and reasonable」、GPT-5.5 は「benign であっても violation」。「benign(害がない)」 という同じ単語を使いながら、片方は許容、もう片方は減点に進めています。
つまり GPT-5.5 の safety 採点は、書かれた制約を一字一句そのまま適用する、原則厳守の採点者 — というのが、Opus との +2.65 点差を作っている本体です。Opus が「意図」 を読みに行くのに対し、GPT-5.5 は「文字」 を読みます。
おまけーーOpus 4.7 は5点刻み、GPT-5.5 は細かく刻む
平均差や分散の話の前に、そもそも 両モデルが採点に使っている「目盛り」 が違います。モデル比較レビュー(60 試行 × 4 軸 = 240 採点)で実際に使われた点数を数えると、一目です。
Opus 4.7: ほぼ 5 点刻み
| 点数 | 件数 | 比率 |
|---|---|---|
| 100 | 74 | 30.8% |
| 95 | 75 | 31.2% |
| 90 | 62 | 25.8% |
| 92 | 12 | 5.0% |
| 85 | 12 | 5.0% |
| その他 | 5 | 2.1% |
その他の内訳: 88(3 件)/ 98(1 件)/ 75(1 件)
240 採点のうち 88% が 90 / 95 / 100 の 3 値に集中。 全体で使った点数は 8 値(表の 5 値 + その他の 3 値)だけ。「100 = 文句なし」「95 = 軽い指摘あり」「90 = 一段減点」 という離散的な採点をしています。
GPT-5.5: 中間値も使う細かい連続採点
| 点数 | 件数 | 比率 |
|---|---|---|
| 100 | 84 | 35.0% |
| 95 | 70 | 29.2% |
| 90 | 20 | 8.3% |
| 96 | 14 | 5.8% |
| 98 | 10 | 4.2% |
| 92 | 10 | 4.2% |
| 88 | 8 | 3.3% |
| 85 | 7 | 2.9% |
| その他 | 17 | 7.1% |
その他の内訳: 82(3 件)/ 94(3 件)/ 70(2 件)/ 78(2 件)/ 75(2 件)/ 55(2 件)/ 80(1 件)/ 65(1 件)/ 0(1 件)
使った点数は 17 値(表の 8 値 + その他の 9 値)で Opus の 2 倍。 96 / 98 / 92 / 88 / 82 / 94 のような 5 点刻みの間に入る偶数値 を頻繁に使い、減点の大きさを連続的に表現します。 さらに大きく減点する場合は 55 / 0 といった低スコアにも踏み込んでいます。
- Opus 4.7: 90 / 95 / 100 中心の 離散的な採点(再現性が高い、刻みが粗い)
- GPT-5.5: 2 点刻みの中間値や低スコアも使う 連続的な採点(解像度が高い、揺らぎやすい)
平均差や分散を読むときは、この目盛り差が背景にあることを念頭に置いてください。
まとめ
Opus 4.7 と GPT-5.5 の両方に同じソースコードをレビューさせると、今回のケースでは2つの点で明確な差が出ました。
- Maintainability: Opus 4.7 は「半年後に読める形か」 を踏み込んで見て、小幅な減点を積み重ねる(-1.75 点)
- Safety: GPT-5.5 は task に書かれていない 1 ファイルでも「許可リストに無い = 違反」 と数十点引くことがある(+2.65 点、SD 12.45)
実運用での使い分けですが、「読み手の負担」 を重く見るなら Opus 4.7、「書かれた制約への忠実さ」 を重く見るなら GPT-5.5。両方走らせて差分だけ人間が確認する、という運用も筋がよさそうです。
QCD レビュー 4 軸の元設計は #16 にあります。Quality 軸をどう作ったかを知りたい方はこちらから。
本記事は、筆者個人の Raspberry Pi 5 / Ubuntu 26.04 環境における非公式な実験記録です。Claude Code、Codex CLI、GitHub Copilot CLI の一般的な性能優劣を示すものではありません。結果はタスク内容、プロンプト、CLI バージョン、モデル指定、ネットワーク状況、実行順、温度条件によって変化します。各名称は各社・各団体の商標または登録商標です。
この記事は「オトナの自由研究」シリーズの第19回です。消費財メーカーでデジタル戦略を推進する筆者が、最新テクノロジーを自分の手で試し、何ができるのか・どんな価値を生むのかを検証する過程を記録しています。
※本連載は個人の実験と学びの共有であり、所属組織の公式見解ではありません。
Discussion