UAパーサー
User-Agent文字列をオンラインで解析し、ブラウザ・OS・デバイス情報を識別
解析結果
User-Agentとは?
User-AgentはHTTPリクエストヘッダーの一つで、リクエスト元のブラウザ、オペレーティングシステム、デバイス情報を識別する文字列です。WebサーバーはUA文字列を解析して訪問者のデバイスタイプを判断し、適切なフォーマットのコンテンツを提供します。UA文字列には通常、ブラウザ名とバージョン、レンダリングエンジン、OSなどの情報が含まれます。
使い方
使い方
- 解析したいUser-Agent文字列を入力欄に貼り付けてください
- または「自分のUAを解析」をクリックして、現在のブラウザのUAを自動検出してください
- 解析結果が下に表示され、ブラウザ・システム・デバイスの詳細情報も表示されます
- 「UAをコピー」をクリックして元のUA文字列をコピー
解析の制限
- User-Agent文字列はモダンブラウザで偽装・凍結・削減される場合があるため、解析結果はヒントとして扱ってください。
- 機能の判定には、可能な限りブラウザ名チェックよりも機能検出を優先してください。
利用シーン
仕組み
User-AgentヘッダーはRFC 7231 §5.5.3で製品トークン(product/version)と括弧付きコメントの列として定義されていますが、実際にはすべてのモダンブラウザが`Mozilla/5.0`というリテラルトークンで始まる文字列を送信しています。このプレフィックスは1993年にさかのぼります。当時サイトがMozillaの有無でNCSA Mosaicを検出したため、NetscapeがMozillaを採用し、Internet Explorer 3が互換性のために追加し、それ以降のすべての派生ブラウザ(Safari、Chrome、Edge、Opera)がこの名残を維持しています。OSの位置、エンジンバージョンの場所、複数のブラウザが互換性のために互いをリストする際の優先順位を定める正式な文法は存在しないため、解析はブラウザ・エンジン・OS・デバイスの4つの軸に対して優先順位付きの正規表現リストで行われます。ua-parser-js、bowser、UAParserのLua/Pythonポートなどのオープンソースライブラリはすべて同じパターンファイルを保守しています。2022年以降、ChromeはUA削減を展開しています。ブラウザバージョンはMAJOR.0.0.0に凍結され、プラットフォーム固有のマイナートークンは削除されるため、Windows上のChrome 120.0.0.0として解析されても、実際にはChrome 120のいずれかのビルドがWindows 10または11上で動作していることを意味し、正確なビルド番号はClient Hintsの背後に隠されています。モダンな代替手段はUser-Agent Client Hints(draft-ietf-httpbis-client-hints)であり、リクエストごとにSec-CH-UA、Sec-CH-UA-Mobile、Sec-CH-UA-Platformを公開し、navigator.userAgentData.getHighEntropyValues()を通じて高エントロピー値(モデル、フルバージョン、アーキテクチャ)を提供します。UAパーサーはログ分析やボットの仕分けには引き続き有用ですが、ランタイム分岐には機能検出とClient Hintsを優先すべきです。
- RFC 7231 §5.5.3はUser-Agentを製品トークンとコメントとして定義するが、OSやデバイスの文法は存在しない。すべてのパーサーが独自の正規表現リストを保守
- `Mozilla/5.0`プレフィックスは1993年のMosaic時代からの互換性ハック。Safari、Chrome、Edgeはすべてブラウザ検出サイトを壊さないために維持
- Chrome UA削減(2022〜2023年展開)はマイナーバージョンを0.0.0に凍結し、プラットフォーム文字列を固定。実際のビルド番号はSec-CH-UA-Full-Version-Listに格納
- User-Agent Client HintsはリクエストごとにSec-CH-UA、Sec-CH-UA-Mobile、Sec-CH-UA-Platformを公開。高エントロピーフィールドにはnavigator.userAgentData.getHighEntropyValues(['model','platformVersion','architecture'])が必要
- キーワードによるボット検出(bot、crawler、spider、Googlebot、Bingbot、Baiduspider、YandexBot)は丁寧なクローラーを捕捉できるが、本物のChrome UAをコピーする悪意あるスクラッパーには無効。レート制限と行動シグナルの組み合わせが有効
- モバイル対タブレットはスクリーンサイズではなくトークン(Mobile、Tablet、iPhone、iPad)で判定。MobileトークンのないAndroid UAはほとんどのパーサーでタブレットとして扱われる
- Vary: User-AgentをキーにするキャッシュやCDNは単一リソースを何千ものキャッシュエントリに断片化する可能性がある。Vary: Sec-CH-UA-Mobileを優先するか、低いヒット率を受け入れること
使用例
Chrome ブラウザ
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36iPhone Safari
Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 Version/17.0 Mobile/15E148 Safari/604.1Google ボット
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)よくある質問
User-Agent解析では何を抽出しますか?
ブラウザ名とバージョン(例:「Chrome 124」)、OSとバージョン、デバイスタイプ(デスクトップ/モバイル/タブレット)、CPUアーキテクチャ、レンダリングエンジン(Blink/Gecko/WebKit)、UAが既知のクローラーパターンに一致する場合のボット/クローラー分類などです。
UA解析はどれくらい正確ですか?
一般的でよく知られたブラウザでは良好です。次のような場合に苦戦します。パーサライブラリが更新される前の最新バージョン、検出を回避するためにChrome/Safariを偽装するブラウザ、実在のUAをなりすますボット、UAがエンジン名ではなくホストアプリ名を表示する組み込みWebView。
なぜUser-Agent文字列の有用性が低下しているのですか?
ブラウザベンダー(Chromeが先導)はフィンガープリンティングを制限するためにUA文字列を「凍結」し、代わりにUA Client Hints(Sec-CH-UA-*ヘッダー)を推進しています。数年以内にUA文字列は安定した低エントロピー値を返すようになり、実際のデバイスデータはクライアントヒントに移行します。コードはそれに合わせて移行すべきです。
機能ゲーティングにUA検出を使うべきですか?
ほぼ常に使うべきではありません。UAは偽装可能で、機能サポートは同じブラウザ内でもバージョンによって異なります。`if ('serviceWorker' in navigator)`のようなフィーチャー検出を使ってください。UA検出は分析、サポートチケット、バグ報告の分類には適していますが、どのAPIを呼ぶか決めるのには適しません。
自分のUAを解析できますか?
はい。本ページではトップにブラウザの現在のUAが表示され、各構成要素に分解されます。サーバーに対してブラウザがどのバージョンを報告しているかを正確に知りたい場合に便利です。
ボット検出はどうですか?
パーサは正直に名乗る行儀の良いボット(Googlebot、Bingbot、Slackbot)にフラグを付けます。悪意のあるボットは通常実在のブラウザになりすますため、UAのみのボット検出は弱いです。実際の保護にはレート制限、CAPTCHA、行動シグナルと組み合わせてください。
UAはどこかにアップロードされますか?
いいえ。解析はブラウザ内でJSライブラリ(通常はua-parser-js)を使って実行されます。貼り付けられたUA文字列はサーバーに送信されません。