RunToolz iconRunToolz
Welcome to RunToolz!
ブラウザウェブ開発アナリティクス

User Agent文字列:ブラウザフィンガープリントを読む

あの変な文字列が訪問者について何を教えてくれるか、そしてなぜしばしば誤解を招くか。

RunToolz Team2026年1月21日5 min read

すべてのHTTPリクエストにはUser-Agentヘッダーが含まれます。こんな感じ:

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

これはブラウザを識別するはず。実際は歴史的な混乱。

なぜすべてのブラウザが嘘をつくか

そのChromeのuser agentはMozilla、AppleWebKit、KHTML、Safariに言及。Chromeはそれらのどれでもありません。

理由がこちら:ウェブサイトはuser agentをチェックして異なるコンテンツを提供していました。新しいブラウザは認識されないためブロックされました。

だからブラウザは嘘をつき始めました。「Mozillaと互換性がある」が標準になりました。「AppleWebKitと互換性がある」が追加されました。すべてのブラウザが他のすべてのブラウザであると主張します。

実際に試してみませんか?User Agentを解析

実際に学べること

混乱にもかかわらず、user agentはまだ有用な情報を含みます:

ブラウザ名とバージョン: 実際のブラウザは通常最後。「Chrome/120」や「Firefox/121」。

オペレーティングシステム: 「Windows NT 10.0」や「Mac OS X 10_15_7」や「Linux」。

デバイスタイプ: モバイルuser agentにはデバイス名か「Mobile」が含まれます。

ボット識別: Googlebot、Bingbot、その他のクローラーは自己識別します。

一般的な検出パターン

デスクトップChrome:

...Chrome/120.0.0.0 Safari/537.36

Android上のモバイルChrome:

...Android 10; Pixel 4...Chrome/120.0.0.0 Mobile Safari/537.36

iPhone上のSafari:

...iPhone; CPU iPhone OS 17_0 like Mac OS X...Safari/605.1.15

Firefox:

...Firefox/121.0

Edge、Opera、Braveなどは�hromeベースでChromeに似て見えます。

なぜ機能検出の方が良いか

User agent検出は「何のブラウザ?」に答えます。機能検出は「このブラウザはXができる?」に答えます。

// User agent検出(壊れやすい)
if (navigator.userAgent.includes('Chrome')) {
  // Chrome機能を仮定
}

// 機能検出(堅牢)
if ('serviceWorker' in navigator) {
  // service workerを使う
}

ブラウザは変わります。User agent文字列は修正されます。機能検出は関係なく機能します。

User Agentがまだ重要な時

アナリティクス。 オーディエンスを理解:ブラウザ市場シェア、モバイル vs デスクトップ、OS分布。

ボット検出。 クローラーを識別してサーバー動作を調整。

ターゲットテスト。 特定ブラウザでユーザーが報告した問題を再現。

レガシーサポート決定。 0.1%のユーザーがIE11を実行しているなら、サポートをやめるかも。

スプーフィングとプライバシー

User agentは簡単に偽造できます。プライバシー拡張は修正します。一部のブラウザはユーザーが手動で変更できます。

セキュリティのためにuser agentに依存しないでください。ヒントであって、認証ではありません。

ブラウザフィンガープリンティングはuser agentを他のシグナル(画面サイズ、フォント、プラグイン)と組み合わせて追跡。これは議論を呼び、ブラウザによってますますブロックされています。

Client Hints:現代の代替

User-Agent Client Hintsはより新しいアプローチ。サーバーが特定情報を要求:

Sec-CH-UA: "Chromium";v="120", "Google Chrome";v="120"
Sec-CH-UA-Platform: "Windows"
Sec-CH-UA-Mobile: ?0

構造化され、信頼でき、プライバシーを尊重。でも採用はまだ成長中。

パースライブラリ

User agentを正規表現でパースしないでください。エッジケースがあなたを打ち負かします。

パターンデータベースを維持する確立されたライブラリを使いましょう:

  • ua-parser-js(JavaScript)
  • user-agents(Python)
  • DeviceDetector(PHP)

これらは歴史的混乱を処理し、新しいブラウザが現れた時に更新されます。


User agentはアナリティクスと診断に便利ですが、機能決定には信頼できません。ライブラリでパースし、機能には機能検出を優先し、どのユーザーもuser agentを偽造できることを覚えておきましょう。