FIRST CH TOOLS / 25 USER-AGENT PARSER

User-Agent 解析&デバイス判定

アクセスログの User-Agent 文字列を貼り付けると、ブラウザ名とバージョン・レンダリングエンジン・OS・デバイス種別を表に分解します。トークン1つずつに意味の解説を付け、UAからは分からないこと(凍結された値・偽装・アプリ内ブラウザ)もその場で指摘します。貼り付けた文字列はこの端末から出ません。

User-Agent
ブラウザ
OS
レンダリングエンジン
デバイス種別
解析結果

上にUA文字列を貼り付けると、ここに解析結果が出ます。

補足・UAでは分からないこと
JSON
上にUA文字列を貼り付けると、ここに結果のJSONが出ます。
このブラウザの Client Hints

UA文字列の凍結された部分(Chromeのマイナーバージョン・Androidの機種名・Windows 10/11の区別)は、User-Agent Client Hints から本当の値を取れます。以下はいまお使いのブラウザが自分自身について公開している値で、どこにも送信していません。

How to Use

  1. UAを貼るアクセスログやブラウザの開発者ツールからコピーしたUser-Agent文字列を貼り付けます。User-Agent: というヘッダー名が付いたままでも、前後の引用符が付いていても読み取ります。自分のブラウザを調べるなら「このブラウザのUA」を押してください。
  2. 表を読むブラウザ・OS・エンジン・デバイス種別が上のパネルに出て、詳しい内訳が表に並びます。「UA文字列の内訳」では、Mozilla/5.0like Gecko のような意味を失った語が、なぜ今も残っているのかを1トークンずつ確認できます。
  3. 落とし穴を確かめる「補足」欄に、そのUAから読み取れないことが並びます。Windows 10と11が区別できない、機種名が K に凍結されている、といった判定の限界を先に把握してから実装してください。

About This Tool

User-Agent はブラウザが自分で名乗る自己申告の文字列です。中身は1990年代の互換性競争の堆積物で、ほぼすべてのブラウザが今も Mozilla/5.0 から始まります。Chrome は Safari/537.36 を名乗り、Edge は Chrome/Safari/ の両方を名乗ります。したがって「Safari」や「Chrome」の部分一致で判定すると、ほぼ確実に取り違えます。判定は必ず、より限定的なトークン(Edg/OPR/Chrome/Safari/)から順に試す必要があります。このページの判定も同じ順序で行っています。

いま起きている最大の変化は「UA削減(User-Agent Reduction)」です。Chrome 110(2023年)以降、UA文字列の一部は固定値に凍結されました。ブラウザのマイナーバージョンは 0.0.0 になり、Androidのバージョンと機種名は Android 10; K という架空の値に置き換えられています。macOS は Safari も Chrome も 10_15_7 で凍結しているため、最新のMacでも「macOS 10.15.7」と表示されます。これらはバグではなく、指紋採取(フィンガープリンティング)を防ぐための意図的な仕様です。本当の値が必要なら User-Agent Client Hints を使ってください。

UAでは原理的に区別できない組み合わせがいくつかあります。Windows NT 10.0 は Windows 10 と Windows 11 の両方を指します(区別には Sec-CH-UA-Platform-Version が必要で、14.0.0 以上なら Windows 11)。iPad は既定で「デスクトップ用Webサイトを表示」になっているため、Mac版Safariと完全に同じUAを送ります(区別には navigator.maxTouchPoints > 1 を併用します)。iOS ではすべてのブラウザがWebKitを使う決まりなので、iOS版Chromeも中身はSafariと同じエンジンです。

アプリ内ブラウザ(in-app browser)の見分けは実務でとくに効きます。LINE・Instagram・Facebook・X から開かれたページは、Safari や Chrome ではなくアプリに埋め込まれたWebViewで動いています。ファイルのダウンロード・外部決済へのリダイレクト・一部のストレージAPIが使えないことがあり、「自分の端末では動くのに、SNS経由で来たユーザーだけ動かない」という問い合わせの多くはこれが原因です。このツールは Line/InstagramFBAN・Android WebView の wv などを検出して指摘します。

UAはアクセス制御の根拠にしてはいけません。誰でも1行の設定で任意の文字列を名乗れます。「Googlebot だから通す」という判定は、Googlebot を名乗るだけで突破されます。本物の検索エンジンかどうかは、アクセス元IPの逆引きと再正引き(forward-confirmed reverse DNS)で照合してください。UAは統計・不具合の切り分け・古いブラウザへの案内表示までに留めるのが安全です。

機能の有無で分岐したい場合は、UA判定ではなく機能検出(feature detection)を使ってください。if (window.IntersectionObserver) のように「その機能があるか」を直接確かめるほうが、UAの表記ゆれにも将来のブラウザにも強くなります。UA判定が本当に必要なのは、特定バージョンのバグを回避するときなど、機能検出では表現できない場合に限られます。

URLパラメータで直接呼び出せます: /user-agent/?ua=Mozilla%2F5.0…(値はURLエンコードしてください)/ /user-agent/?ua=me で、そのブラウザ自身のUAを読み込みます。

From AI Agents

この解析ロジックは、MCP(Model Context Protocol)サーバー @first-ch/tools-mcpuser_agent_parse ツールとしても提供しており、ブラウザを使わずAIエージェントから直接呼び出せます。アクセスログの調査では、こちらのほうが速く扱えます。導入方法の詳細は AIエージェントからの使い方 を参照してください。

導入

claude mcp add firstch-tools -- npx -y @first-ch/tools-mcp

呼び出し例

# 1件のUAを解析する
user_agent_parse(ua="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...")

# アクセスログの行をそのまま渡す(User-Agent: が付いていてもよい)
user_agent_parse(ua="User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) ...")

# 複数のUAをまとめて解析し、内訳を集計する
user_agent_parse(uas=["Mozilla/5.0 ...", "Mozilla/5.0 ..."])

Other Tools