User Agent 解析
任意の User-Agent 文字列を貼り付けると、ブラウザー、レンダリングエンジン、OS、デバイス種別、CPU アーキテクチャーを解析し、JSON でコピーできます。
User-Agent 文字列を読める情報に変換します。 初期状態ではお使いのブラウザーの User-Agent を読み込みます。別の文字列を貼り付ければ解析結果を確認でき、JSON はバグ報告やテストデータにそのままコピーできます。
任意の User-Agent 文字列を貼り付けると、ブラウザー、レンダリングエンジン、OS、デバイス種別、CPU アーキテクチャーを解析し、JSON でコピーできます。
User-Agent 文字列を読める情報に変換します。 初期状態ではお使いのブラウザーの User-Agent を読み込みます。別の文字列を貼り付ければ解析結果を確認でき、JSON はバグ報告やテストデータにそのままコピーできます。
現代の User-Agent は説明文というより化石の記録です。ほぼすべてのデスクトップブラウザーがいまだに Mozilla/5.0 で始まりますが、このトークンは Netscape がブラウザー戦争に敗れて以来なんの意味も持ちません。それでも残っているのは、初期のサーバーがフレームを配信する前に Mozilla を探していたからで、競合各社は格下げを避けるためにこのトークンを追加しました。あるブラウザーが嘘をついて良い方のページを受け取れば、残りも同じ嘘をつかなければユーザーを失います。
文字列の残りも同じ渦から生まれました。Chrome は 2013 年に WebKit をやめ、KHTML はさらに前に消滅しているのに、いまも AppleWebKit/537.36 (KHTML, like Gecko) を送ります。Edge が Edge/ ではなく Edg/ を付けるのは、旧トークンを部分一致で判定して壊れた代替ページを返すサイトが多すぎたからです。Safari の本当のバージョンは Version/ トークンに隠れ、末尾の Safari/537.36 は凍結されています。解析を具体的なものから順に行わなければならないのはこのためです。Chromium 派生はすべて Chrome を名乗り、WebKit 系はすべて Safari を名乗るので、最初に確信を持って一致したものを採用するしかありません。
この文字列はクライアントが送るヘッダーであり、手がかりではあっても証拠には決してなりません。どんな HTTP クライアントでも任意の値を送れますし、ユーザーは拡張機能や開発者ツールで日常的に偽装します。ログの補助情報として扱い、認可の入力やセキュリティ境界には使わないでください。
誰も嘘をついていない場合でも、値はどんどん粗くなっています。Chrome と Edge はマイナーバージョンを 0.0.0 に凍結し、簡略化したプラットフォーム文字列を報告するようになりました。Windows NT 10.0 は Windows 10 と Windows 11 の両方を指し、macOS は実際のリリースにかかわらず何年も 10_15_7 に固定されています。Firefox も同様に OS 情報を丸めます。バージョン番号が不自然にきれいなら、たいていは凍結された値です。
デバイス判定が最も脆い部分です。文字列にデバイス欄は存在せず、Mobile、iPad、Tablet といったトークンの有無から推測するしかありません。Android タブレットは典型的な落とし穴で、多くは Mobile トークンがないことだけで判別されます。iPadOS は既定設定でデスクトップの Mac として振る舞います。
挙動を変える判定は、ラベルではなく能力を調べてください。if ('share' in navigator) は正しく長持ちしますが、if (isSafari) は別のエンジンが同じ API を実装した瞬間、あるいは Safari が修正を出した瞬間に壊れます。レイアウトについては、CSS メディアクエリのほうが実際のビューポートや入力方式をはるかに正確に表します。
User-Agent がいまも価値を持つのは、アナリティクス、クラッシュの仕分け、バグの再現です。あるスタックトレースが Gecko でしか出ない、あるレイアウト崩れが Samsung Internet に限られる、と分かれば、再現不能な報告が具体的なテストケースに変わります。現代的な後継は User-Agent Client Hints API で、同じ事実を構造化された値として提供し、完全なプラットフォームバージョンのような高エントロピー情報は明示的に要求した場合のみ得られます。