ゆるテックノート

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

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

歴史の積み重ね ⏳

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

主な積み重なり

  • Mozilla:Netscape Navigatorの名残。互換表示を狙い多くのブラウザが先頭に付与。
  • Gecko:Firefox系のレンダリングエンジン名。実装を示すため付加。
  • KHTML / AppleWebKit:Konqueror由来のエンジン。SafariやChrome系はWebKit/Blinkでもこの名を残す。
  • Chrome / Safari / Edg:各ブラウザが自分のブランドを追加。EdgeはChromium以降 Edg/ を採用。

例:ChromeのUA(簡略)

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

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

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

過去の事情

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

現代のリスク

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

UA削減とUser-Agent Client Hints 🔒

プライバシー配慮とメンテ性向上のため、UAを短くし、必要な情報は段階的に提供する流れが進んでいます。

UA削減(User-Agent Reduction)

  • ChromeはUAから詳細なOSバージョンや機種情報を段階的に削除する計画を進行中。
  • SafariやFirefoxも追従し、将来的には細かな差分に頼るUA判定が困難になる。

User-Agent Client Hints

  • ブラウザが必要な情報のみをヘッダー(Sec-CH-UAなど)で宣言的に提供する仕組み。
  • サーバーはAccept-CHで必要なヒントを要求し、ブラウザは許可された範囲で返す。
  • 目的の情報を明示的にやりとりするため、不要な指紋情報の流出を抑えられる。

実務のすすめ 🛠️

UA文字列頼みの分岐は避け、標準的な方法で機能検出・トラッキングするのが安全です。

推奨アプローチ

  • フロントは機能検出(feature detection)を優先し、UAスニッフィングは最後の手段。
  • 分析系はClient Hintsやサーバーログで十分な指標を得られないか検討する。
  • 独自のUA分岐コードは削減計画に合わせて段階的に廃止し、互換テストを自動化する。