User-Agent文字列からブラウザー・OS・端末を解析
User-Agentヘッダーは短い一方で、製品トークン、互換性を示す記号、OSの手掛かり、端末情報が1行にまとめられているため、読み取りにくいものです。この解析ツールは、その文字列からブラウザー名とバージョン、OS名とバージョン、実用的な端末カテゴリーを含む予測可能な結果を返します。透明性のある決定論的なパターンルールを使用するため、同じ入力からは常に同じ出力が得られます。ネットワーク通信、乱数、フィンガープリンティング、非公開の情報付加は行いません。
無料で実行
可能な限り完全なヘッダーをご入力ください
HTTPのUser-Agentヘッダーの値を、すべての製品トークンと括弧内のプラットフォーム情報を含めてuser_agentフィールドへ貼り付けてください。完全な文字列があれば、同じレンダリング系統を共有するブラウザーも区別しやすくなります。たとえば、現在のEdge、Opera、Samsung Internet、Chromeの文字列には、いずれもChromeトークンが含まれる場合があります。そのため、この解析ツールは、一般的なChromeの一致を採用する前に、各ブラウザー固有の識別子を確認します。Appleのプラットフォーム要件によってデスクトップ版とは異なる文字列を使うiOS版FirefoxやChromeでも、この判定順序が重要です。先頭と末尾の空白は無視しますが、空文字列や空白だけの値は分類できる情報がないため、不正な入力として拒否します。このツールは端末へ接続せず、IPアドレスを検索せず、Client Hintsを調査せず、ほかの識別子との照合も行いません。バージョンが必要な場合は、「Windows上のChrome」のような短縮表現ではなく、元のヘッダーをご提供ください。短縮された文字列や未知の文字列も受け付けますが、根拠を確認できない項目は推測せず、不明およびnullのバージョンとして返します。
ブラウザーとOSの判定ルールをご確認ください
検出処理では、一般的なUser-Agentトークンに基づく固定の優先順位表を使用します。Edg、OPR、SamsungBrowser、CriOS、FxiOSなどの固有トークンを、Chrome、Firefox、Safariの広いパターンより先に評価します。これにより、互換性のためにChromeという表記を含むChromium系ブラウザーを、単純にChromeと誤判定することを防ぎます。Safariでは、独立したSafariトークンが公開ブラウザーバージョンではなく製品系列を表すため、Versionトークンを使用します。OSについても同様に、デスクトップ版WindowsよりWindows Phone、一般的なLinuxよりAndroid、macOS互換表記よりiOSを先に確認します。Appleのバージョンに含まれるアンダースコアはピリオドへ統一します。Windows NT値は、信頼できる慣用的な対応がある場合に、分かりやすいリリース名へ変換します。従来のヘッダーだけでは両者を確実に区別できないため、Windows NT 10.0は意図的に「10または11」と表示します。これは既知のパターンに基づく規則であり、確率的な推定ではありません。新製品、プライバシー保護で簡略化された文字列、埋め込みWebビュー、メーカー独自派生版では、識別可能な情報が追加されるまで不明または大まかな系列になる場合があります。根拠のない精密さを作るよりも、この保守的な動作の方が安全です。
端末種別は本人確認ではなく実用的な分類としてお使いください
device_typeは、デスクトップ、モバイル、タブレット、ボット、不明という大まかな運用カテゴリーを返します。多くのAndroidタブレットはAndroidを含みながらMobileを意図的に省くため、一般的なモバイル指標より先にタブレットの指標を確認します。認識された電話、iPhone、iPod、Windows Phoneなどのモバイルトークンはモバイルになります。既知のクローラー用語はボットになりますので、ログの集計には便利ですが、多層的な不正利用対策や検証済みクローラーの認証に代わるものではありません。認識できるデスクトップOSまたはブラウザーはデスクトップとなり、ブラウザーとOSの既知の根拠がない文字列は不明になります。これらのカテゴリーは送信元が申告した内容を示すだけで、物理端末を検証した結果ではありません。User-Agent値は変更でき、自動クライアントはブラウザーを模倣でき、最新のプライバシー機能は意図的に詳細を減らします。レポート、ログへの情報追加、互換性の目安、初期表示の選択にはご利用いただけますが、セキュリティ境界、一意な指紋、端末所有の証明には使用しないでください。アクセス、決済、不正対策に関わる場合は、サーバー側の認可と専用のリスク情報を組み合わせてください。
活用例
リクエストログへの情報追加
未加工のヘッダーをブラウザー、OS、端末の一貫した列へ変換し、運用レポートを確認しやすくします。
トラフィックの集計
ヘッダーを外部サービスへ送信せず、アクセスを大まかなブラウザー別および端末別にまとめます。
互換性の初期設定
機能検出を最終判断に保ちながら、適切な初期画面やサポート案内を選択します。
よくある質問
1回の解析料金はいくらですか?
APIリクエスト1回あたり$0.002です。決定論的なブラウザー版は、このページ内でローカル実行することもできます。
Windowsが10または11と表示されるのはなぜですか?
従来のUser-Agent文字列では両方とも通常Windows NT 10.0を示すため、ヘッダーだけで確実に区別できないからです。
セキュリティ判断でUser-Agentを信頼できますか?
信頼できません。クライアントはヘッダーを変更または模倣できます。検証済みの本人情報や認可ではなく、説明用メタデータとしてお扱いください。
ブラウザーを認識できない場合はどうなりますか?
ブラウザーは不明、バージョンはnullになります。OSや端末について認識できる手掛かりがあれば、その情報は引き続き返します。
解析時に外部サービスへ問い合わせますか?
問い合わせません。ローカルの決定論的ルールだけを使い、ネットワーク通信、フィンガープリンティング、IP情報の付加は行いません。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/web/user-agent-parse \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"}'const res = await fetch("https://api.kit.forhosting.com/web/user-agent-parse", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/user-agent-parse",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/user-agent-parse", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/user-agent-parse", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.user_agent_parse",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
timeout_sec | 30 |
max_crawl_pages | 25 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |