# タイヤ適合カタログ

## 目的と格納単位

車両・ホイールごとのタイヤ適合を、寸法の根拠と確認状況を添えて記録する。1製品ファイルは「メーカー・銘柄・サイズ・ロードインデックス・速度記号・荷重規格」の組を表す。同一銘柄でもサイズ等が異なれば別ファイルとする。複数の車両やホイールとの組み合わせは、同じファイルの `fitments` に追加する。

```text
data/tires/
  tire.schema.json                       # JSON Schema Draft 2020-12
  products/<メーカーの英小文字>/<id>.json # タイヤ1種類につき1ファイル
scripts/validate_tire_catalog.py         # 全件検証
tests/test_tire_catalog.py               # 検証のテスト
```

`id` は小文字・数字・ハイフンで作り、ファイル名と一致させる。個々の JSON の `$schema` は、ファイルから見た相対パス `../../tire.schema.json` とする。標準の乗用車用ラジアルタイヤのサイズ表記を対象とし、対応していない表記を追加する場合はスキーマと検証を拡張する。

## 記録する情報

- `size` は呼び幅、偏平率、構造、リム径、ロードインデックス、速度記号、荷重規格を記録する。荷重規格を確認できない場合は `unknown` とする。
- `specifications` は情報元が掲載する外径・総幅・標準リム幅・適用リム幅・概算重量・製造国と、それらの情報元 ID を記録する。メーカー情報を優先し、他の資料による値は情報元を区別する。確認できない数値・製造国・適用リム幅は `null` とする。メーカーが日本企業であることから製造国を推定しない。
- `sources` に情報元 URL、種別、確認日、補足を記録する。複数の URL を登録できる。URL が不明な会話の申告は `type: user_statement`、`url: null` とし、説明文と確認できない事項を残す。その他の種別は URL が必須。各仕様と適合情報は `source_ids` で参照する。確認日は情報の取得日であり、現在の販売・在庫を保証しない。
- `fitments` は車両名、ホイール仕様、総合判定、リム幅・車体・ブレーキ・荷重と空気圧の確認状況、根拠、注記を記録する。車両やホイールの寸法が不明な場合は `null` にする。会話から得たホイール仕様など URL のない事実は注記に所有者申告と明記し、メーカー URL がその事実の証拠であるかのように扱わない。

### 適合状態

| フィールド | 値 | 意味 |
| --- | --- | --- |
| `status` | `candidate` | 候補。車両への装着は未確認 |
| `status` | `confirmed` | 当該車両・ホイール・タイヤの組み合わせで必要な確認が揃い、その根拠を記録済み |
| `status` | `not_compatible` | 確認済みの不適合、またはメーカー公表の適用リム幅・径の範囲外 |
| `status` | `unknown` | 判定材料が不足 |
| `tire_to_rim` | `within_manufacturer_range` / `outside_manufacturer_range` | タイヤメーカーの適用リム幅とホイール幅・径を照合した結果 |
| `tire_to_rim` | `unknown` | 適用リム幅やホイール寸法などが不明 |
| `vehicle_clearance`, `brake_clearance`, `load_and_pressure` | `confirmed` / `not_compatible` / `unverified` | 各確認事項の状態 |

リム幅の範囲内だけでは実車適合とはしない。`confirmed` にする前に車体・ブレーキのクリアランス、荷重と空気圧に加え、ホイールの穴数・PCD・ハブ径・取付座面、タイヤ外径なども個別に確認し、対象の組み合わせを裏付ける資料を `sources` と注記に残す。記録時の判断を検証する仕組みであり、実際の装着や保安基準適合を自動判定するものではない。XL タイヤの負荷能力は空気圧と合わせて確認する。

## 初期データと未確定資料

これまでの候補から、YOKOHAMA iceGUARD 6・7・8、BRIDGESTONE BLIZZAK WZ-1、DUNLOP WINTER MAXX ICE Pro と DSX-2 の計11種類を登録した。DSX-2 は価格比較サイトの掲載仕様と、ユーザーが共有した出品者の使用申告を分けて記録する。出品元 URL や側面の LI・速度記号は未確認。車両への適合は本人の実車確認が必要。OZ Racing Superturismo のリム幅とオフセットは未確認。ICE Pro と DSX-2 の適用リム幅を確認できなかったものは `null` としている。

### GC8 の15インチ候補の比較

外径の差は、205/50R16 の呼び寸法から計算した 611.4 mm との差。各製品のメーカー公表値・掲載値との比較であり、装着時の実測値ではない。

| サイズ・製品例 | 外径 | 差 | CP-F 7J / 7.5J についての情報 |
| --- | ---: | ---: | --- |
| 195/55R15 iceGUARD 7 | 595 mm | −16.4 mm | 適用リム幅 5.5〜7J。7.5Jは範囲外 |
| 195/60R15 iceGUARD 7 | 615 mm | +3.6 mm | 適用リム幅 5.5〜7J。7J 4本の候補 |
| 205/55R15 iceGUARD 5 PLUS | 607 mm | −4.4 mm | 海外向け旧製品の適用リム幅 5.5〜7.5J。国内新品在庫は未確認 |
| 205/60R15 iceGUARD 7 | 627 mm | +15.6 mm | 適用リム幅 5.5〜7.5J。両方の幅に対応するが外径が大きい |
| 195/65R15 DSX-2 | 633 mm | +21.6 mm | 出品者が7J・7.5Jの混合セットをGC8の4pot/2pot車で使用したと申告。メーカー適用リム幅は未確認 |
| 195/65R15 iceGUARD 8 | 635 mm | +23.6 mm | 適用リム幅 5.5〜7J。外径が大きく、7.5Jは範囲外 |
| 195/65R15 WINTER MAXX ICE Pro | 640 mm | +28.6 mm | 適用リム幅は未確認。外径が大きい |
| 205/65R15 iceGUARD 8 | 647 mm | +35.6 mm | 適用リム幅 5.5〜7.5J。外径が大きい |

各行はそれぞれの製品例であり、同一サイズの外径やリム幅は製品により異なる。出品者による使用報告は装着可能性の参考であり、同型のタイヤやホイールであっても所有車での適合保証にならない。195/60R15 を含め、荷重・空気圧、車体とブレーキのクリアランス等は要確認。4WD の前後には同銘柄・同サイズ・同程度に摩耗したタイヤを揃える。

GC8オーナーとして共有された [X投稿](https://x.com/GC8_umineko/status/2119292497750904856) は、冬タイヤ交換の投稿と添付写真に `255/35R18 90Q` の表示がある資料として保留する。写真だけではタイヤ銘柄・取付車両・ホイール幅やオフセットを特定できないため、既存製品の適合根拠には使用しない。銘柄と対象車両を確認できた場合に該当製品へ情報元として追加する。

## 追加・検証方法

1. メーカー・銘柄・サイズなどが最も近い JSON をコピーし、`id` とファイル名を変更する。
2. `size`、`specifications`、`sources` を資料に基づいて更新し、不明値を推定しない。
3. 各 `fitments` の対象、判定、根拠を更新する。未確認の組み合わせは `candidate` または `unknown` とする。
4. 以下を実行する。Python 3 と `jsonschema`（4系）が必要。

```sh
python3 -m pip install 'jsonschema>=4.18,<5'
python3 scripts/validate_tire_catalog.py
python3 -m unittest discover -s tests -p 'test_tire_catalog.py'
```

検証は JSON Schema の形式に加え、ファイル名と ID、製品 ID と製品組み合わせの重複、サイズ表記と数値の一致、参照先の存在、リム幅範囲と判定の整合、`confirmed` に必要な確認項目を確認する。URL の接続可否や根拠の内容が主張を裏付けているかは自動検証しない。

## 現行スタッドレスの銘柄別一覧と比較画面

比較画面のページタイトルと見出しは「Imprezaタイヤ比較」とする。

2026-11-08 から、日本メーカーの乗用車・SUV用スタッドレス・夏タイヤ・オールシーズンタイヤを対象とした銘柄別データを追加する。ユーザーの追加要望に合わせ、**銘柄1型番を1 JSON**とし、同じ銘柄のサイズを `sizes` 配列に記録する。従来の車両適合・出品事例を記録した `products` は別のデータとして保持し、統合や削除はしない。

- 正本は `data/tires/models/<メーカー>/<id>.json`。共通型は `data/tires/tire-model.schema.json`。各サイズに情報源URL、メーカー表記、呼び幅・偏平率・ホイール径、ロードインデックス／速度記号を保持する。
- メーカー公表値が取得できた場合、サイズ別の外径・総幅・標準リム幅・適用リム幅・商品コードを保存する。未取得は `null`。サイズ表記は通常の `R`・`ZR`、ランフラットの `RF`、`P`・`LT`・`HL` 接頭辞、および `35X12.50R20` のハイフローテーション、`195R16C`・`7.00R16` の偏平率がない旧式表記に対応する。インチ幅の表記はmm換算し、偏平率は `null` とする。旧式表記の外径はメーカー値がない場合 `null` とし、推測しない。それ以外の表記は現在の集計には含めない。
- モデルの公式紹介と、各サイズを列挙した根拠は分けて扱う。DUNLOP WINTER MAXX 02・03・SJ8+はメーカーサイズ表を取得できず、SUBARUの銘柄紹介と販売店のサイズ一覧を記録する。販売店の一覧は02が更新日不明、03とSJ8+が2025年更新であり、現行サイズ・在庫の確認にはならない。
- TOYO、YOKOHAMA、BRIDGESTONE、DUNLOPの収集済み情報は網羅性未確認であり、サイトにサイズ表が残ることだけでは各サイズの生産・販売継続を断定しない。FALKENの国内向け現行スタッドレス一覧は未確認。各サイズの製造国は未確認であり、日本メーカー製と日本製を同一視しない。
- メーカー一覧ページの抽出には `web-info-fetch` を用い、収集スクリプトは `scripts/collect_toyo_tire_models.py`、`scripts/collect_additional_winter_tires.py`、`scripts/collect_dunlop_listings.py`、`scripts/collect_dunlop_retail_sizes.py`。以前の調査台帳に保存した公式資料からの取込は `scripts/import_existing_tire_sources.py`。公式APIが403を返すなど未取得資料がある。取得時は公開元に過度の負荷をかけず、失敗を記録する。
- BLIZZAK RFT はメーカーがランフラットタイヤの標準装着車種専用と明記しているため、画面の銘柄欄にも「標準装着車種専用」と表示する。サイズ一致のみで他車に装着可能と扱わない。
- 資料は `car-general / japanese-tire-model-catalog` 調査台帳に保存する。元資料と抽出テキストを保持し、再利用した既存資料の取得日を引き継ぐ。スクリプトにより取得したスナップショットは連絡先に見える文字列をマスクする。

`python3 scripts/validate_tire_models.py` は銘柄Schema、JSONキーとIDの重複、サイズ表記と幅・偏平率・ホイール径の一致、サイズの情報元、リム幅の整合を確認する。テスト用のカタログを `--catalog` で指定できる。`python3 scripts/build_tire_report.py` は検証後、`reports/gc8-winter-tire-comparison.html` を生成する。HTMLはデータを埋め込んだ単独ファイルで、JavaScript無効でも一覧と情報元を表示する。比較表の出典欄には、各モデルの確認日を併記する。この日付は各サイズの販売・在庫を確認した日を意味しない。

画面はタイヤ種別、メーカー、銘柄、ホイール径、タイヤ幅、偏平率、サイズ表記、適用リム幅（7J・7.5J・未確認）をチェックボックスで絞る。銘柄はメーカー名を併記し、選択肢内の検索にも対応する。同一項目の複数選択はOR、異なる項目はAND。適用リム幅はタイヤの公表範囲に基づき、未確認は7Jや7.5Jの選択だけでは含めない。銘柄・サイズの検索、個別サイズの候補内検索、並べ替え、件数表示、リセットに対応する。情報元欄には確認済みのメーカーサイトだけを表示し、サイズの資料がメーカーサイトなら「メーカーサイズ表」、別のメーカー製品紹介のみなら「メーカー製品紹介」と表示する。メーカーサイトが登録されていない場合は「メーカーサイトなし」、サイズの資料がメーカー以外の場合は「このサイズはメーカー未確認」と表示し、資料記載の外径をメーカー値と表記しない。元資料のURLはデータに保持する。初期基準は会話で共有された1号機の純正タイヤ `205/50R16`、呼び寸法で計算した外径611.4mm、幅205mm、ホイール径16インチ。選択したタイヤの呼び寸法から理論外径を再計算し、初期値のホイール幅は未指定。外径差はメーカー掲載外径または呼び寸法での計算値と基準値の差で、画面に根拠を明示する。純正ホイール幅・オフセット、車体やブレーキとの干渉、速度計、荷重、空気圧は未確認であり、この比較表から装着可否を断定しない。

「これまで検討したサイズ」では、15インチの 195/55・195/60・195/65・205/55・205/60・205/65、16インチの 195/55・205/50、17インチの 205/45・215/45 を個別またはまとめて選択できる。サイズを直接選ぶ欄と選択状態は連動し、同一項目内のOR条件として扱う。「まとめて選択」はそれまでのサイズ選択を検討済みサイズに置き換え、メーカーやリム幅などの別条件は維持する。収録データにないサイズも選択肢に残して「収録なし」と表示し、単独選択時は0件とする。これは現在の収録状況であり、市場に製品が存在しないことを意味しない。

表のヘッダは表のスクロール領域内で初期状態から固定し、「ヘッダ固定」の選択欄で解除できる。選択値は `tire_header_fixed=on` / `off` としてURLに保存し、再読み込み・戻る／進むで復元する。値が不正または未指定の場合は固定する。他のクエリとハッシュを保持し、同一オリジンのfileviewerのiframe内では親ウィンドウのURLに保存する。「条件をリセット」は固定を初期状態の有効に戻す。

検索語、サイズ・銘柄の選択肢内の検索語、タイヤ種別・メーカー・銘柄・インチ・幅・偏平率・サイズ・適用リム幅のチェック、および条件欄の開閉、並び順を `tire_` 接頭辞のクエリに同期する。銘柄は安定したモデルIDを `tire_model` に保存する。複数選択は同じキーを繰り返して保持し、未知の選択値や無効な並び替えキーは無視する。再読込・戻る／進むで復元し、サイズの直接選択と検討済みサイズの同じ値は連動する。条件リセットは検索・チェックとヘッダ固定を初期化し、並び順は維持する。該当行が0件のときは条件変更を案内する。

「外径差」は「指定なし」、±0・5・10・15・20・25・30・40・50mm以内から選ぶ。表示前の外径差の絶対値が指定値以下の行を表示し、境界を含む。メーカー掲載外径と呼び寸法による計算外径の表示前の値を使い、外径差が未確認の行は数値条件を指定した場合に除外する。値は `tire_delta_mm` に保存し、再読み込み・戻る／進むで復元する。以前の自由入力で共有された選択肢外の0以上の有限値は「共有URLの値」として復元し、無効な値は無視する。「条件をリセット」で指定なしに戻す。

見出し「条件を選ぶ」と横の矢印を一体のボタンとして、検索・ヘッダ設定・検討済みサイズ・各絞り込み欄をまとめて開閉できる。初期状態は開く。閉じても選択条件と表の絞り込みは維持される。ボタンには `aria-expanded` と `aria-controls` を設定し、矢印の向きと連動する。Enter・Spaceで操作できる。比較表に表示する元データは長い場合は先頭160文字までとする。銘柄欄にモデルJSONへのリンクは表示せず、銘柄の絞り込みには各行に保持したモデルIDを使う。fileviewerのプレビューは1 MBを超えるファイルを切り詰めるため、超過する場合はraw URLを利用する。


2026-11-08: 夏・オールシーズン等を拡張。収集できた公式表の照合は `python3 scripts/audit_new_tire_tables.py` で再生成し、結果は `data/tires/coverage/new-table-audit.json` に保存する。メーカー別の欠落と取得状況は [tire-coverage.md](tire-coverage.md) に記載する。特定の表は表記上の現行性やサイズごとの供給休止・発売予定を判定していない。標準リム幅と適用リム幅が矛盾する行は標準リム幅を `null` にし、元表記を維持する。

ファイルビューアのプレビューは1MBで文書が切れるため、HTMLを `srcdoc` で読み込んだ場合は同じプレビュー枠を `/raw/` の全文に移す。HTMLを単独で開いた場合は従来どおり一覧を描画し、JavaScript無効でも静的な表を見ることができる。ビューアで共有したURLのフィルタ状態は親画面に保持する。

外径差は `±mm以内` に加え `±%以内` の選択式フィルタにも対応する。百分率は表示前の外径差の絶対値 ÷ 選択した基準の理論外径 × 100。mm・%いずれも表示前の同じ外径差を使い、外径差が不明な行は指定中のフィルタに含めない。両方を選ぶ場合はAND条件。既存の `tire_delta_mm` は維持し、%は `tire_delta_pct` に保存する。共有URLの選択肢外の非負有限数も復元できる。リセットは両方を解除する。

基準の幅・偏平率・リム径・ホイール幅をそれぞれ選べる。幅・偏平率・リム径から理論外径 `リム径×25.4 + 幅×偏平率×0.02` を求め、各行の外径差mm・百分率・呼び幅差・リム径差を再計算する。外径差の並べ替え・mm/% フィルタにも丸め前の差を使う。ホイール幅は適用リム幅の範囲内・範囲外・未確認を表示する参考値であり、車体・ブレーキの適合を意味しない。未指定の初期ホイール幅は推測しない。基準は `tire_base_width`、`tire_base_aspect`、`tire_base_rim`、`tire_base_wheel` としてURLに保存し、値のない従来URLは205/50R16・ホイール幅未指定に戻す。リセットは基準も初期化する。オフセットは判定に含めない。JavaScript無効時は初期基準の静的表示となる。

製造国は各 `sizes` の任意項目 `manufacturing_country` として記録する。省略または `null` は不明で、記録する場合は国コード `code`、一次情報が対象とするサイズ・製造時期・個体等の範囲 `scope`、その `source_url` を必須とする。根拠URLはモデルの `sources` にも登録する。日本企業のブランドという理由で日本製と推定せず、モデルや他サイズに国を引き継がない。画面の製造国はチェックボックスで複数選択でき、同一項目はOR、他項目とはAND。未知の行は「不明」で選択でき、クエリ `tire_country` に値を保存し復元する。情報を根拠とともに確認した国のみ選択肢に現れる。

折りたたみ式の種別・製造国・メーカー・銘柄・ホイール径・タイヤ幅・偏平率・適用リム幅・サイズ選択の見出しに「指定なし」または「選択 N 件」を表示する。選択値の重複は1件として数え、選択中は色と文言で区別する。チェック変更・解除・URL復元・全リセットに連動し、標準の `details` / `summary` でキーボード操作できる。

各欄の開閉状態は `tire_group_season`、`tire_group_country`、`tire_group_maker`、`tire_group_model`、`tire_group_rim`、`tire_group_width`、`tire_group_aspect`、`tire_group_rimwidth`、`tire_group_size` にそれぞれ `open` / `closed` で保存する。再読み込み・戻る／進む・同一オリジンの fileviewer でも復元し、他のクエリとハッシュを保持する。パラメータがない場合や値が不正な場合は、種別・製造国・メーカーを開き、その他を閉じる従来の初期状態とする。条件リセットは開閉状態を維持する。

収集途中・未収集・現行性・製造国・実車適合等の注意とメーカー別収集状況へのリンクは、画面右上の「お知らせ」から開くモーダルに表示する。開くと閉じるボタンへフォーカスし、閉じる操作または Escape の後はお知らせボタンに戻す。狭い画面では画面幅内でスクロールでき、JavaScript無効時は注意文をページ内に表示する。

各サイズの任意項目 `availability_note` は、資料が明記する在庫限り・発売予定・パターン等の注記を掲載時点とともに記録し、比較表のサイズ欄に表示する。NITTOの2026年国内向けカタログはメーカー制作と記載された第三者掲載資料として扱い、データのモデル注記に掲載元・年・現行性未確認を記録し、比較表にはメーカー未確認と表示する。オールテレーンだけを根拠にオールシーズンと判定しない。
