User-Agent パーサー
開発User-Agent 文字列をブラウザ、エンジン、OS、デバイスタイプに分解します。ヒューリスティック、完全クライアント側。
- ブラウザ
- エンジン
- オペレーティングシステム
- デバイスタイプ
- ボット / クローラー
このページの内容
User-Agent パーサーとは?#
User-Agent(UA)文字列は、すべてのブラウザと HTTP クライアントがリクエストに付加する、自身を記述するテキスト行です。また悪名高いほど非構造的な混乱でもあります。ベンダーが歴史的な互換性トークンを次々に積み重ねるため、1 つのモダンな Chrome 文字列は Mozilla、AppleWebKit、KHTML、Gecko、Safari という単語をすべて含みます — どれもブラウザが実際にその何れかであることを意味しません。生の UA を目で読むのは遅くエラーを生むため、ほぼすべての解析ダッシュボード、アクセスログツール、ボット検出レイヤーが最初にパーサに通します。
本ページは任意の UA 文字列を取り、実際に欲しい 5 つの事実に分解します。ブラウザ(名前とバージョン)、エンジン(レンダリングコア)、オペレーティングシステム(OS とバージョン)、デバイスタイプ(デスクトップ、モバイル、タブレット)、そして ボット/クローラーかどうか。完全にブラウザ内で動きます — ログ行から文字列を貼り付けて内訳を読めます。サーバーラウンドトリップはありません。
ブラウザ検出が見かけより難しい理由は順序です。特殊ブラウザは Chrome より前にチェックしなければなりません。これらの UA 文字列はどれも互換性のためにリテラルトークン Chrome を含むためです。Microsoft Edge、Opera、Samsung Internet、Vivaldi、CocCoc はすべて、素朴な if (ua.includes("chrome")) チェックでは Chrome と誤報されます。エンジンも同様です。文字列 AppleWebKit は Blink ブラウザ(Chrome、Edge、Opera)と純粋な WebKit ブラウザ(Safari)の両方に現れるため、エンジンは直接マッチするのではなく、ブラウザファミリーから推論されます。
使い方#
- 上部のこのブラウザを使うをクリックして、このブラウザ自身の
navigator.userAgentを入力欄に読み込みます — 自分のトラフィックがどう見えるかを知る最速の方法です。 - または入力ペインに任意の UA 文字列を貼り付けます — nginx のアクセスログ、バックエンドの
req.headers["user-agent"]、curl リクエスト、何でも。 - 出力ペインの 5 つの行を読みます。
- ブラウザ — ファミリー名とメジャーバージョン(例:
Chrome 120)。 - エンジン — レンダリングエンジン(Blink、WebKit、Gecko、Trident)。
- オペレーティングシステム — 復元できる場合の OS とバージョン(例:
Windows 10/11、iOS 17、Android 14)。 - デバイスタイプ —
iPadトークンや、MobileのないAndroid、iPhoneなどのトークンから推論したデスクトップ、モバイル、タブレット。 - ボット / クローラー —
はい/いいえ、クローラ識別子(bot、crawl、spider、slurp、pingdom、headless、phantomjs、curl、wget、python-requests、axios…)とのマッチでフラグ。
- ブラウザ — ファミリー名とメジャーバージョン(例:
- クリアで両ペインを空にします。
- ステータス行が結果を要約するか、入力が空だったことを報告します。
主な機能#
- 特殊ブラウザ優先の検出。 Edge、Opera、Samsung Internet、Vivaldi、CocCoc、Firefox はすべて Chrome と Safari の前にマッチするため、
Chrome互換トークンに黙って飲み込まれません。 - ファミリーから推論するエンジン。 Blink か WebKit かは、もろい
AppleWebKitへの直接マッチではなく、検出されたブラウザで決まります — だから Safari の文字列が Chrome と報告されません。 - デバイスタイプ分類。 タブレットは
iPadトークンとAndroid ... Mobileの区別でスマートフォンから区別されます。解析ツールが依存するのと同じヒューリスティックです。 - クローラーフラグ。 ボット/クローラー行は、人間向けの指標から除外したい文字列 — 検索クローラー、稼働状況モニタ、ヘッドレスブラウザ、HTTP ライブラリ — をフラグします。
- 100% クライアントサイド。 UA はどこにも送信されません。それはまた、本番ログのトークンをサードパーティの解析 API に漏らさずに貼り付けられることを意味します。
実例#
アクセスログからの典型的な Windows 上の Chrome 文字列を貼り付けます。
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
5 つの行は次のように埋まります。
Browser Chrome 120
Engine Blink
OS Windows 10/11
Device desktop
Bot no
次に Edge の文字列と比較します — 末尾の Edg/120 に注目してください。
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0
最初に Chrome をチェックする素朴なパーサはここで Chrome 120 と報告します — 間違いです。本ページは Chrome/ の前に Edg/ をテストするため、同じ文字列は正しく ブラウザ: Microsoft Edge 120 を導き、エンジンは依然として Blink です(Edge は Chromium ベースのため)。
3 つ目のケースはボットパスを示します。curl/7.81.0 を送るヘルスチェックスクリプトは、Mozilla ラッパーを一切持たなくても ボット: はい とフラグされます。curl がボットマッチャーが走査するライブラリトークンの 1 つだからです。これが、ログを目で追うときに実ユーザートラフィックを自動ノイズから切り分ける行です。
よくある質問#
UA に Chrome という単語が含まれているのに、Edge ブラウザが「Chrome」ではなく「Microsoft Edge」と報告されるのはなぜですか?#
Edge の UA が意図的に Chrome/120.0.0.0 を含むためです。Chrome に配信するために作られたサイトが Edge にも配信するようにするためです。本パーサーは Edg/ トークンを最初に、次に Chrome/ をテストするため、特殊ファミリーが勝ちます。チェックをこの順序で行わないパーサは、すべての Chromium 派生を Chrome と誤報します。
UA 文字列からの OS バージョンを信頼できますか?#
ある程度は。Windows は 10 と 11 を Windows NT 10.0 に畳み込むため、ここでは 10/11 と報告されます。iOS と macOS のバージョンは OS X_x_x トークンから復元できますが、歴史的にリリース時に凍結されます。バージョンを強いヒントとして扱い、保証とはせず、セキュリティの意思決定をこれに掛けないでください。
ボットフラグはトラフィックをブロックするのに十分信頼できますか?#
いいえ — UA ベースのボット検出はログ解析とダッシュボードフィルタリングのための便利機能であり、セキュリティ境界ではありません。悪意のあるクライアントは、完全に人間に見えるものを含め、好きな UA を偽造します。この行で明らかなクローラーとライブラリを見つけ、本当に信頼性が必要なものにはレート制限、認証、行動チェックを使ってください。
パーサーがすべて「不明」と出します。私は何を貼り付けましたか?#
空/空白文字列、あるいはこのパーサーが認識しないクライアント(一部のデスクトップアプリや SDK は独自の識別子を送ります)の UA のいずれかです。前者の場合、ステータス行が入力が空だったと言います。後者の場合、ブラウザと OS は 不明 に落ち、デバイスタイプはデフォルトで デスクトップ になります。生の文字列は入力ペインに保持されるため、検査できます。