ゆるテックノート

ブラウザのUA文字列はなぜ長い?

ブラウザのUser-Agent文字列には古い名残がいくつも積み重なっています。互換性アピールから始まり、いまはプライバシー配慮で「短くする」動きも進んでいます。

歴史の積み重ね

UAはサーバー側がブラウザ判定に使ったため、互換性を示す銘板が増えていきました。

主な積み重なり

  • Mozilla:Netscape Navigatorの名残。互換表示を狙い多くのブラウザが先頭に付与。
  • Gecko:Firefox系のエンジン名。ただし他ブラウザの「like Gecko」は互換性の表記で、Geckoの実装を意味しない。
  • KHTML / AppleWebKit:エンジンの歴史に由来する表記。Blinkを使うChromeにもAppleWebKitが含まれ、文字列だけで現在のエンジンを断定できない。
  • Chrome / Safari / Edg:自分のブランドに加えて互換用の別ブランド名も含む。デスクトップ版EdgeのEdg/と、モバイル版のEdgA/・EdgiOS/などは異なる。

ChromeのUAの例

123は形式説明用のバージョン番号です。最新版の表示ではありません。Safariという文字があっても、この例をSafariと判定してはいけません。

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36

なぜこんなに混在するのか

UAでブラウザ判定するサイトが多く、「対応している」と思わせるため互換表記が増えました。

過去の事情

  • 初期のWebはブラウザ間の互換性差が大きく、サーバーがUAで分岐する実装が一般的だった。
  • ある表記が欠けると「未対応」と誤判定されるため、各ブラウザが互換キーワードを盛り込み続けた。

現代のリスク

  • UAは長く、OSや機種が細かく含まれ、指紋情報として追跡に悪用されやすい。
  • UA分岐はメンテが困難になり、最新ブラウザでの誤判定・機能ブロックを招きやすい。

UA削減とUser-Agent Client Hints

UA削減は単なる文字数の短縮ではなく、OSや機種などの詳細を固定・縮小する取り組みです。ブラウザごとに方針や提供情報が異なります。

UA削減(User-Agent Reduction)

  • Chromeのデスクトップ・Android向けUA削減は2023年に展開された。Windows NT 10.0などの固定表記から、実際のOSバージョンを正確には判定できない。
  • SafariやFirefoxがChromeと同じUA形式やClient Hintsを提供するとは限らない。UA-CHがない環境でも動く処理を用意する。

User-Agent Client Hints

  • 対応ブラウザがHTTPSで情報を構造化して提供する仕組み。ChromiumではSec-CH-UA・Sec-CH-UA-Mobile・Sec-CH-UA-Platformなどの基本情報はAccept-CHなしでも送られる。
  • 追加情報はAccept-CHで要求するが、対応状況・ポリシー等により欠けることがある。ブランド一覧の先頭が本当の製品名とは限らず、未知のブランドや順序変更を許容する。
  • 高精度の情報まで要求すると識別材料が増える。必要な項目だけを使い、UAやClient Hintsを本人確認・アクセス権限の根拠にしない。

実務のすすめ

画面や機能の分岐では、UAから対応を推測するより必要な機能を検出します。値は変更や偽装が可能なので、UAは信頼できる身分証にはなりません。

推奨アプローチ

  • フロントは機能検出(feature detection)を優先し、UAスニッフィングは最後の手段。
  • 分析では取得できない情報を推測で埋めず、目的に必要な情報だけを扱う。
  • 既存のUA分岐を見直し、機能検出と対象ブラウザでのテストを組み合わせる。

公式資料と関連記事

Chromium: UA Reduction / Chrome: UA Client Hints / UA-CH specification / Edge UA guidance / MDN: UA sniffing
ブラウザとWeb標準 / DNSルートサーバー