画面のスクショを AI に貼って「規定を守れているか」を聞くと、どこまで当たるのか。自サイト 12 頁の「直す前」の画面を headless Chrome で測って 10 ルールの正解表を作り、同じ描画から等倍に切り出した画像 164 枚だけを GPT(ChatGPT の画面)と Gemini 2.5 Flash(API)に渡して、YES/NO/不明/該当なし で答えさせました。採点は機械です。
先に結論
- 対照(違反と非違反の両方)がある 60 組で GPT 54/60・Gemini 41/60(不明 3)。
- GPT の外れ 6 組は全部 15px の閾値(13.5px を NO と 3 頁・15px を YES と 3 頁=差 1.5px)。目視型(H2 の段の混在・h1 の行数)は 36/36、行長 38em 対 18〜33em(差 5〜20em)は 12/12。
- 44px のタップ領域(5 ルール)は、閾値の判別力を測れなかった。 直す前の版では同じルール内に違反だけ(パンくず 40px)か非違反だけ(フッタ 45px)しか無く、「小さいリンクは違反」と答えれば当たる。最初の集計(96 組で GPT 94%)はこの偏りで持ち上がっていました。
- 同じ画像を GPT に 2 回投げると、15px の答えが YES→NO に変わった。
正解表を先に作る
ルール 10(自サイトの規定を閾値として凍結): R1 本文の最小文字 < 15px/R2 同じ頁の H2 に 2 種以上の大きさ/R3 本文の行長 > 38em/R4 375px で h1 が 5 行以上/R5 375px でラジオ 4 択の高さ > 100px/R6〜R10 375px で目次の summary・目次の項目・フッタの地図・小ナビ・パンくずのリンクが 44px 未満。
7bec67f(直す前)を worktree に建て、CDP で getComputedStyle/getBoundingClientRect を取って各ルールに当てます。R2 は 375/1280 を別に判定するので 12 × 11=132 判定。対象要素が無い頁(該当なし)36 を除いて 96 組。
// shoot_cdp.mjs(抜粋): R1 は main の中の文字(nav・パンくず・form・button・小ナビ・目次・footer は除く)の最小 font-size
const EXCL = 'nav, .crumbs, form, button, .works-nav, .toc-block, footer, .site-header, .site-footer';
const textEls = [...document.querySelectorAll('main *')].filter((e) =>
!['SCRIPT','STYLE','SVG','PATH','NOSCRIPT'].includes(e.tagName) && !e.closest(EXCL) && vis(e) &&
[...e.childNodes].some((n) => n.nodeType === 3 && n.textContent.trim()));
// 44px の 5 ルールの対象
const els = { R6: q('.toc-block summary'), R7: q('.toc-block li a'), R8: q('.site-footer .footer-map a'), R9: q('.works-nav a'), R10: q('.crumbs a') };
画像は同じ描画から Page.captureScreenshot の clip で等倍に切り出します(頁ごとにファーストビュー 2 枚+該当箇所。R2 は H2 を 1 本ずつ・R3 は 1280 だけ・R4〜R10 は 375 だけ=164 枚)。1 回目は iframe で測った座標で切ったため 375px で描画と 300〜700px ずれ、フッタが 6 頁で真っ白でした。測る・撮るを同じ headless Chrome に寄せて撮り直しています。
判定者に渡す
指示は逐語で凍結: 「ルールごとに YES/NO/不明/該当なし で答え、根拠を 1 行。画像が無いルールは該当なし。推測で YES/NO にしない。自由記述は最大 3 件」。
- GPT: 運用者が ChatGPT の画面で 1 頁 1 回(画像 12〜15 枚を一括)。画面のモデル表記は「GPT5.6SOL」(版は未確認)。
- Gemini:
gemini-2.5-flashを API で 1 頁 1 回(温度 0)。画面は 10 枚までしか貼れなかったので API に切り替え。
経路・縮小・温度が違う 2 条件なので、モデルの優劣を比べる設計ではありません。
採点は 4 値の逐語を正規表現で読んで正解表に当てるだけ(R(\d+)(?:((375|1280)))?[::]\s*(YES|NO|不明|該当なし))。人の裁定は入れていません。
結果
判定正解率=対照のある全組を分母にした正解数(TN 込み)。不明は正解に含めない。 YES/NO を回答した組だけの正解率は参考値として併記します(GPT は 60/60 で答えたので両方同じ)。
| モデル | 群 | 組 | 判定可能率 | 正解 | FP 率 | FN 率 |
|---|---|---|---|---|---|---|
| GPT | 対照あり(R1〜R4) | 60 | 100% | 54/60=90% | 7% | 21% |
| GPT | うち目視型(R2・R4) | 36 | 100% | 36/36 | 0% | 0% |
| GPT | うち計測型(R1・R3) | 24 | 100% | 18/24 | 16% | 60% |
| Gemini | 対照あり(R1〜R4) | 60 | 95% | 41/60=68%(YES/NO 時 41/57=72%) | 26% | 36% |
| Gemini | うち目視型 | 36 | 97% | 28/36 | 12% | 44% |
| Gemini | うち計測型 | 24 | 92% | 13/24 | 47% | 20% |
- Gemini の外れ: 行長(R3)で 18〜33em を「超えている」と 6 頁。R2 で FN 4・FP 3。
- 対照なし(R5〜R10・36 組)の参考値: GPT 36/36・Gemini は判定可能 56%・フッタを「ナビ」と読んで FP 5・取り違え 10。当たりの数は閾値の判別を意味しません。
- 自由記述: GPT は 12 頁中 1 件(見出し末尾の 1 字だけが 3 行目に孤立)。Gemini は 3 件 × 12 のうち規定外(印象)が大半。
事前仮説の裁定
- H1「目視型は 2 モデルとも当たる」→ GPT 支持(36/36)・Gemini 不支持(FN 44%)=全体は不支持。
- H2「閾値型は半数以上が不明か誤答」→ 保留。対照のある閾値型は R1・R3 の 24 組だけ(GPT 18/24・Gemini 13/24)。44px は測れておらず、R1 は 2 回で答えが変わった。
- H3「自由記述は規定外が多い」→ GPT は「なし」がほぼ全部で判定できず、Gemini で支持。
仕事分担表(60 組から言える範囲)
| 検査 | 誰に渡すか | 根拠 |
|---|---|---|
| H2 の段の混在・h1 の行数(目視型) | 画像レビュー | GPT 36/36(Gemini 28/36・回答時 28/35) |
| 差が数 em の行長(38 vs 18〜33em) | 画像でも足りた(モデルで割れる) | GPT 12/12・Gemini 6/12 |
| 差が数 px の文字サイズ(15 vs 13.5px) | DOM で測る | 等倍でも GPT 6/12 外れ・2 回で反転 |
| 44px のタップ領域 | 判別力は未判定(採点はできたが対照なし) | 直した後の版で撮り直してから |
| 基準の内側だが読みにくい | 人 | 自由記述に 1 件だけ出た |
画像に渡す前の 3 問
- その検査の正解表に、違反と非違反の両方が入っているか(片方だけなら当たりの数に意味が無い)。
- 閾値との差は何 px(何 em)か。差が 1.5px の検査は等倍でも外れた。
- 同じ画像を 2 回投げて答えが変わらないか。
言えないこと
モデル一般の能力(各 1 回・条件が違う 2 経路・GPT の版未確認)。44px の閾値の判別力(採点はできたが、対照が無いので点数に意味が無い)。縮小した全画面での当たり(等倍だけ渡した)。他のサイト・他のルール。「きれいか」(正解表は規定との差)。
AI の利用について
測る・撮る器・採点器・この記事の下書きには AI(Claude Code)を使っています。判定者の GPT・Gemini は器の作者と別。仮説と 10 ルール・正解表は判定の前に凍結し、採点は逐語の 4 値を機械で当てました。主指標を「対照のある 60 組」に絞ったのは外部の精査(結果を見た後)で、その経緯は本文に書いています。案件の情報は含みません。
関連
- 本家(検証の記録・正解表・24 応答・画像 164 枚の ZIP): https://sumitsuke.jp/via/qiita/lab/screenshot-ai-vs-dom-ten-rules/
- 再現キット(画像・正解表・採点器・Gemini API の器): https://github.com/sumitsuke/screenshot-ai-vs-dom-ten-rules
- 前編=DOM の測定器と 8 項目: https://sumitsuke.jp/via/qiita/lab/readability-dom-eight-items/
- 同じ型の 2 本=「代理指標と成果を分けて検収する」: 転送量が減ったことを速さの証拠にしない/AI に「20〜30% 短くして」と頼むと中央値 −7〜−8%
Sumitsuke は、AI や外注で作ったものの点検と修理、業務自動化、検証を受託しています。「見れば分かる」を数に置き換えて合否を決める検証の設計は → https://sumitsuke.jp/works/verification/
この記事は Zenn にも同じ内容を掲載しています。

