ウェブ開発テスト用のランダムユーザーエージェントジェネレーター
デバイスタイプ、ブラウザファミリー、オペレーティングシステムでフィルタリングするオプションを使用して、リアルなブラウザユーザーエージェント文字列を生成します。ウェブ開発テストと互換性チェックに最適です。
ランダムユーザーエージェントジェネレーター
ウェブ開発テスト用のランダムでリアルなブラウザユーザーエージェント文字列を生成します。
生成されたユーザーエージェント
ドキュメンテーション
ランダムユーザーエージェントジェネレーター
はじめに
ユーザーエージェント文字列は、ウェブブラウザやその他のアプリケーションがウェブサイトに送信する特定のテキスト識別子です。この文字列は通常、使用されているブラウザ、オペレーティングシステム、デバイスタイプ、レンダリングエンジンに関する情報を含んでいます。ウェブ開発者やテスターにとって、さまざまな現実的なユーザーエージェント文字列にアクセスすることは、異なるプラットフォーム間でのウェブサイトの互換性、レスポンシブデザイン、機能性をテストするために不可欠です。
このランダムユーザーエージェントジェネレーターツールは、選択したパラメータに基づいて本物のようなユーザーエージェント文字列を生成します。デバイスタイプ(デスクトップまたはモバイル)、ブラウザファミリー(Chrome、Firefox、Safari、またはEdge)、オペレーティングシステムによってフィルタリングし、テスト要件に合ったユーザーエージェントを生成できます。このツールは、生成された文字列をワンクリックでコピーできるシンプルなインターフェースを提供し、すぐに新しいランダム文字列を生成します。
ユーザーエージェント構造
ユーザーエージェント文字列は、ブラウザやプラットフォームによって特定のパターンに従いますが、一般的にはいくつかの共通コンポーネントを含んでいます:
- ブラウザ識別子:歴史的な互換性の理由から、通常「Mozilla/5.0」で始まります
- プラットフォーム/OS情報:オペレーティングシステムに関する詳細(Windows、macOS、Android、iOS)
- ブラウザエンジン:レンダリングエンジン(Gecko、WebKit、またはBlinkなど)
- ブラウザの詳細:特定のブラウザ名とバージョン
主要なブラウザの典型的なユーザーエージェント構造の内訳は以下の通りです:
Chrome
1Mozilla/5.0 (platform; details) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/version Safari/537.36
2
Firefox
1Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion
2
Safari
1Mozilla/5.0 (platform) AppleWebKit/webkitversion (KHTML, like Gecko) Version/safariversion Safari/safariversion
2
Edge
1Mozilla/5.0 (platform) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/chromiumversion Safari/537.36 Edg/edgeversion
2
プラットフォームセクションは、デスクトップデバイスとモバイルデバイスの間で大きく異なります:
デスクトップの例:
- Windows:
Windows NT 10.0; Win64; x64
- macOS:
Macintosh; Intel Mac OS X 10_15_7
- Linux:
X11; Linux x86_64
モバイルの例:
- Android:
Linux; Android 12; SM-G998B
- iOS:
iPhone; CPU iPhone OS 15_4 like Mac OS X
デバイスタイプの違い
デスクトップユーザーエージェント
デスクトップユーザーエージェントは、特定のオペレーティングシステム情報、アーキテクチャの詳細(x86_64またはWin64など)、および時折言語の好みを含むことが一般的です。これらはモバイルユーザーエージェントよりもブラウザ間で一貫性がある傾向があります。
モバイルユーザーエージェント
モバイルユーザーエージェントは、デバイスモデル情報、モバイルオペレーティングシステムのバージョンを含み、しばしば最後に「Mobile」という単語が含まれます。iOSデバイスのモバイルSafariは「iPhone」または「iPad」の識別子を含み、Androidデバイスは製造元とモデル番号を含みます。
ブラウザバージョンパターン
各ブラウザは異なるバージョンパターンに従います:
- Chrome:4部構成のバージョン番号を使用(例:96.0.4664.110)
- Firefox:通常は2または3部構成のバージョン番号を使用(例:95.0または95.0.2)
- Safari:単純なバージョン番号のような形式(例:15.2)
- Edge:Chromeに似たバージョン番号を使用しますが、独自のEdgeバージョンがあります(例:96.0.1054.62)
使用例
ランダムユーザーエージェント生成には、ウェブ開発やテストにおいていくつかの重要な用途があります:
-
クロスブラウザ互換性テスト:複数のブラウザをインストールしたり、複数のデバイスを使用したりせずに、ウェブサイトが異なるブラウザでどのように表示され、機能するかをテストします。
-
レスポンシブデザインテスト:ウェブサイトがモバイルデバイスとデスクトップデバイスを正しく検出し、適切なレイアウトを提供することを確認します。
-
機能検出の検証:ウェブサイトの機能検出メカニズムが異なるブラウザの機能に対して正しく機能することを確認します。
-
QAおよび自動テスト:自動テストスクリプトに異なるユーザーエージェントを組み込んで、さまざまなユーザー環境をシミュレートします。
-
パフォーマンステスト:異なるブラウザ環境からアクセスされたときのウェブサイトのパフォーマンスを分析します。
-
ブラウザ特有の問題のデバッグ:特定のブラウザやバージョンでのみ発生するバグを再現し、修正します。
-
APIテスト:異なるクライアントアプリケーションからのリクエストに対して、APIがどのように処理するかをテストします。
代替手段
私たちのランダムユーザーエージェントジェネレーターは多くのテストシナリオに役立ちますが、代替アプローチもあります:
-
ブラウザテストサービス:BrowserStack、Sauce Labs、LambdaTestなどのプラットフォームは、ユーザーエージェントをシミュレートするだけでなく、実際のブラウザインスタンスを提供します。
-
ブラウザ開発者ツール:ほとんどの現代のブラウザは、開発者ツールを通じてユーザーエージェントをオーバーライドすることを許可しており、迅速なテストに便利です。
-
ユーザーエージェントスイッチャー拡張機能:ブラウジング中に事前定義されたユーザーエージェントを切り替えることができるブラウザ拡張機能。
-
仮想マシンまたはコンテナ:異なるオペレーティングシステムとブラウザの実際のインスタンスを実行して、最も正確なテストを行います。
-
ヘッドレスブラウザテスト:PuppeteerやSeleniumなどのツールを使用して、異なるユーザーエージェント設定でプログラム的にブラウザを制御します。
各代替手段にはそれぞれの利点があり、特定のテストニーズやリソースに応じてより適切な場合があります。
歴史
ユーザーエージェント文字列の概念は、World Wide Webの初期の頃にさかのぼります。「ユーザーエージェント」という用語はHTTP仕様から来ており、ウェブサーバーにリクエストを行うクライアントアプリケーションを指します。
初期の頃(1990年代)
最初に広く使用されたブラウザであるNCSA Mosaicは、ブラウザ名とバージョンを識別するシンプルなユーザーエージェント文字列を含んでいました。Netscape Navigatorがリリースされたとき、それも似た形式を使用しました。しかし、ウェブサーバーがブラウザに基づいて異なるコンテンツを配信し始めたため、「ブラウザスニッフィング」と呼ばれる慣行が生まれました。
ブラウザ戦争とユーザーエージェントスプーフィング(1990年代後半)
NetscapeとInternet Explorerの間のブラウザ戦争の間、ウェブサイトは特定のブラウザに最適化されたコンテンツを独占的に提供することが多くありました。互換性を確保するために、ブラウザは他のブラウザとして自分自身を識別する文字列を含めるようになりました。これが、ほとんどの現代のブラウザがユーザーエージェント文字列に「Mozilla」を含める理由です。これは、Netscape Navigatorのコードネームに由来しています。
モバイル革命(2000年代-2010年代)
モバイルデバイスの台頭は、ユーザーエージェント文字列に新たな複雑さをもたらしました。モバイルブラウザは、適切なコンテンツを受け取るためにモバイルであることを識別する必要があり、デバイス識別子やモバイル特有のトークンが追加されました。
現代の課題(2010年代-現在)
ウェブエコシステムがますます複雑になるにつれて、ユーザーエージェント文字列はますます混乱しています。これらは、互換性の理由から複数のブラウザエンジン(「AppleWebKit」と「Gecko」など)への参照を含むようになり、実際に使用されていない場合でもそうなっています。
この複雑さは、ユーザーエージェント文字列を正確に解析する上での課題を引き起こしており、一部のウェブ標準グループは、ユーザーエージェント文字列を非推奨にするか、より構造化されたクライアントヒントに簡素化することを提案しています。しかし、後方互換性の理由から、従来のユーザーエージェント文字列はウェブブラウジングの重要な部分であり続けています。
コード例
さまざまなプログラミング言語でユーザーエージェント文字列を操作する方法の例を以下に示します:
1// JavaScript: ユーザーエージェントからブラウザタイプを検出
2function detectBrowser() {
3 const userAgent = navigator.userAgent;
4
5 if (userAgent.indexOf("Firefox") > -1) {
6 return "Firefox";
7 } else if (userAgent.indexOf("SamsungBrowser") > -1) {
8 return "Samsung Browser";
9 } else if (userAgent.indexOf("Opera") > -1 || userAgent.indexOf("OPR") > -1) {
10 return "Opera";
11 } else if (userAgent.indexOf("Trident") > -1) {
12 return "Internet Explorer";
13 } else if (userAgent.indexOf("Edge") > -1) {
14 return "Edge";
15 } else if (userAgent.indexOf("Chrome") > -1) {
16 return "Chrome";
17 } else if (userAgent.indexOf("Safari") > -1) {
18 return "Safari";
19 } else {
20 return "不明";
21 }
22}
23
24// 使用例
25console.log("あなたは使用しています: " + detectBrowser());
26
1# Python: requestsでカスタムユーザーエージェントを設定
2import requests
3
4def fetch_with_user_agent(url, user_agent):
5 headers = {
6 'User-Agent': user_agent
7 }
8 response = requests.get(url, headers=headers)
9 return response.text
10
11# 使用例
12chrome_ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
13content = fetch_with_user_agent('https://example.com', chrome_ua)
14print(content[:100]) # レスポンスの最初の100文字を表示
15
1<?php
2// PHP: ユーザーエージェントを使用してモバイルデバイスを検出
3function isMobileDevice() {
4 $userAgent = $_SERVER['HTTP_USER_AGENT'];
5 $mobileKeywords = array('Mobile', 'Android', 'iPhone', 'iPad', 'Windows Phone');
6
7 foreach ($mobileKeywords as $keyword) {
8 if (stripos($userAgent, $keyword) !== false) {
9 return true;
10 }
11 }
12 return false;
13}
14
15// 使用例
16if (isMobileDevice()) {
17 echo "あなたはモバイルデバイスを使用しています。";
18} else {
19 echo "あなたはデスクトップデバイスを使用しています。";
20}
21?>
22
1// Java: ランダムユーザーエージェントを生成
2import java.util.Random;
3
4public class UserAgentGenerator {
5 private static final String[] CHROME_VERSIONS = {"96.0.4664.110", "95.0.4638.69", "94.0.4606.81"};
6 private static final String[] OS_VERSIONS = {"Windows NT 10.0; Win64; x64",
7 "Macintosh; Intel Mac OS X 10_15_7",
8 "X11; Linux x86_64"};
9
10 public static String generateRandomChromeUserAgent() {
11 Random random = new Random();
12 String osVersion = OS_VERSIONS[random.nextInt(OS_VERSIONS.length)];
13 String chromeVersion = CHROME_VERSIONS[random.nextInt(CHROME_VERSIONS.length)];
14
15 return "Mozilla/5.0 (" + osVersion + ") AppleWebKit/537.36 (KHTML, like Gecko) " +
16 "Chrome/" + chromeVersion + " Safari/537.36";
17 }
18
19 public static void main(String[] args) {
20 System.out.println(generateRandomChromeUserAgent());
21 }
22}
23
1# Ruby: ユーザーエージェント文字列を解析
2require 'user_agent_parser'
3
4def parse_user_agent(user_agent_string)
5 parser = UserAgentParser::Parser.new
6 client = parser.parse(user_agent_string)
7
8 {
9 browser_name: client.family,
10 browser_version: client.version.to_s,
11 os_name: client.os.family,
12 os_version: client.os.version.to_s,
13 device: client.device.family
14 }
15end
16
17# 使用例
18ua = 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Mobile/15E148 Safari/604.1'
19info = parse_user_agent(ua)
20puts info
21
1// C#: HttpClientでユーザーエージェントを設定
2using System;
3using System.Net.Http;
4using System.Threading.Tasks;
5
6class Program
7{
8 static async Task Main()
9 {
10 // カスタムユーザーエージェントを持つHttpClientを作成
11 using (var httpClient = new HttpClient())
12 {
13 string userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36";
14 httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(userAgent);
15
16 try
17 {
18 // カスタムユーザーエージェントでリクエストを行う
19 HttpResponseMessage response = await httpClient.GetAsync("https://example.com");
20 response.EnsureSuccessStatusCode();
21 string responseBody = await response.Content.ReadAsStringAsync();
22
23 Console.WriteLine($"レスポンスのステータスコード: {response.StatusCode}");
24 Console.WriteLine(responseBody.Substring(0, 100) + "..."); // 最初の100文字
25 }
26 catch (HttpRequestException e)
27 {
28 Console.WriteLine($"リクエストエラー: {e.Message}");
29 }
30 }
31 }
32}
33
1// Go: カスタムユーザーエージェントでHTTPリクエストを作成
2package main
3
4import (
5 "fmt"
6 "io/ioutil"
7 "net/http"
8)
9
10func main() {
11 // 新しいリクエストを作成
12 req, err := http.NewRequest("GET", "https://example.com", nil)
13 if err != nil {
14 fmt.Printf("リクエストの作成エラー: %s\n", err)
15 return
16 }
17
18 // カスタムユーザーエージェントを設定
19 req.Header.Set("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36")
20
21 // リクエストを送信
22 client := &http.Client{}
23 resp, err := client.Do(req)
24 if err != nil {
25 fmt.Printf("リクエスト送信エラー: %s\n", err)
26 return
27 }
28 defer resp.Body.Close()
29
30 // レスポンスを読み取る
31 body, err := ioutil.ReadAll(resp.Body)
32 if err != nil {
33 fmt.Printf("レスポンスの読み取りエラー: %s\n", err)
34 return
35 }
36
37 fmt.Printf("レスポンスのステータス: %s\n", resp.Status)
38 fmt.Printf("レスポンスの本文プレビュー: %s\n", body[:100])
39}
40
一般的なユーザーエージェントパターン
以下は、異なるブラウザとプラットフォームの実際のユーザーエージェント文字列の例です:
デスクトップブラウザ
WindowsのChrome:
1Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36
2
macOSのFirefox:
1Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:95.0) Gecko/20100101 Firefox/95.0
2
macOSのSafari:
1Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.2 Safari/605.1.15
2
WindowsのEdge:
1Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62
2
モバイルブラウザ
AndroidのChrome:
1Mozilla/5.0 (Linux; Android 12; SM-G998B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.104 Mobile Safari/537.36
2
iPhoneのSafari:
1Mozilla/5.0 (iPhone; CPU iPhone OS 15_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.2 Mobile/15E148 Safari/604.1
2
AndroidのFirefox:
1Mozilla/5.0 (Android 12; Mobile; rv:95.0) Gecko/95.0 Firefox/95.0
2
GalaxyのSamsung Internet:
1Mozilla/5.0 (Linux; Android 12; SM-G998B) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/16.0 Chrome/92.0.4515.166 Mobile Safari/537.36
2
参考文献
-
"ユーザーエージェント。" MDN Web Docs, Mozilla, https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/User-Agent
-
"ブラウザユーザーエージェント文字列。" WhatIsMyBrowser.com, https://www.whatismybrowser.com/guides/the-latest-user-agent/
-
"HTTPユーザーエージェントヘッダーの説明。" KeyCDN, https://www.keycdn.com/support/user-agent
-
"クライアントヒント。" MDN Web Docs, Mozilla, https://developer.mozilla.org/ja/docs/Web/HTTP/Client_hints
-
"ユーザーエージェント文字列の歴史。" WebAIM, https://webaim.org/blog/user-agent-string-history/
-
"ユーザーエージェントを使用したブラウザ検出。" Google Developers, https://developer.chrome.com/docs/multidevice/user-agent/
フィードバック
このツールについてフィードバックを提供するためにフィードバックトーストをクリックしてください。
関連ツール
ワークフローに役立つかもしれないさらなるツールを発見する