UserAgentからOS/ブラウザなどの調べかたのまとめ

WEBサイトにアクセスしてくる利用者の情報をUserAgentから調べることが出来るが、どんな情報がわかるか調べてみた。より詳しい情報は参考に使ったサイトを参照で。

# はじめに

GoogleがChromeにおいてユーザーエージェント文字列を段階的に廃止することを発表しています。
段階的にUserAgentが削除版UA文字列に置き換わっていきChrome 113で完全に削減版の UA 文字列となってしまいます。

削除版のUA文字列は以下の通りです。
[User-Agent Reduction
](https://www.chromium.org/updates/ua-reduction/)

```
# Desktop (user on Windows 8.1, for example)
# 旧 UA文字列
Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.1234.56 Safari/537.36

# 最終削除版 UA文字列
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36

# Mobile (user on Samsung Galaxy, for example)
# 旧 UA文字列
Mozilla/5.0 (Linux; Android 9; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.1234.56 Mobile Safari/537.36
# 最終削除版 UA文字列
Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Mobile Safari/537.36

# Tablet (user on Samsung Galaxy, for example)
# 旧 UA文字列
Mozilla/5.0 (Linux; Android 9; SM-T810) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.1234.56 Safari/537.36
# 最終削除版 UA文字列
Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36
```


[GoogleがChromeバージョン100のβ版を公開　ユーザーエージェントからの移行が始まる](https://www.itmedia.co.jp/pcuser/articles/2203/08/news196.html)
[Chrome の User-Agent 文字列削減のオリジン トライアルと今後の計画について](https://developers-jp.googleblog.com/2021/09/chrome-user-agent.html)



# UserAgentについて

### UserAgent（ユーザーエージェント)とは

[UserAgent](https://www.weblio.jp/content/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88)とは主にWebサイトにアクセスするためのプログラムのことをいう。
Webサイトにアクセスする際、HTTPヘッダーに送信するソフトウェアやOS等の情報をUserAgentとして送信する。

サイトの利用者から正しく閲覧できないという問合せで、使っているブラウザが「Yahoo」と言われて、検索エンジンの間違いだと思い込んでいたら、Android版の[Yahoo!ブラウザー](https://play.google.com/store/apps/details?id=jp.co.yahoo.android.ybrowser&hl=ja)のことだったりすることもあるので、UserAgentからブラウザ等を判断することが役に立つ。


### 自分のブラウザのUserAgentを調べるのに使ったサイト
* [確認君](http://www.ugtop.com/spill.shtml)
* [IPひろばの環境変数チェック](http://www.iphiroba.jp/env.php)
* [WhatIsMyBrowser.com](https://www.whatismybrowser.com/)

### 色々なUserAgent情報が載っているサイト

* [UA list: browsers, email clients](https://udger.com/resources/ua-list)
* [WhatIsMyBrowser.com Browse our User agent Catalog](https://www.whatismybrowser.com/developers/tools/user-agent-parser/browse)
* [fragment database ユーザーエージェント一覧（iPhone、iPad、Mac）](http://www13.plala.or.jp/bigdata/user_agent.html)

### UserAgentの記述ルール

```
User-Agent: <product> / <product-version> <comment>

WEBブラウザの一般的な書式:
User-Agent: Mozilla/<version> (<system-information>) <platform> (<platform-details>) <extensions>
```

UserAgentの書き方は厳格に定義されているようではないようだが、
大体のブラウザが上記のルールにしたがっている感じのようだ。


[RFC 1945](https://tools.ietf.org/html/rfc1945#section-10.15)には以下の記載がある。

```
User-Agent = "User-Agent" ":" 1*( product | comment ) 
```

このうちproduct は、[section-3.7](https://tools.ietf.org/html/rfc1945#section-3.7)に以下の記載があり、

```
product = token ["/" product-version]
```

`` CERN-LineMode/2.15 `` の用に　product名の後にスラッシュをいれてバージョンを記載するようになっている。　

あとは[user-agent strings | archive.mozilla.org](https://www-archive.mozilla.org/build/revised-user-agent-strings.html)と、[User-Agent - HTTP | MDN](https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/User-Agent)に記載がある。


アプリケーション固有の値は次々に出てくると思うので、UserAgentから情報収集、判定するプログラムを作る場合は、アプリケーションごとに判定が必要そう。

#### Mozilla 4 or Mozilla 5
多くのブラウザのUserAgentの先頭には下記の通りMoziila/4 or 5のバージョンが記載されている。

```
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; NP06; rv:11.0) like Gecko
```

これは、元々 Mozilla 互換のブラウザという意味のようだ。
Wikipediaの[Mozilla](https://ja.wikipedia.org/wiki/Mozilla)によると
最初、ネットスケープブラウザが、```Mozilla/バージョン名```とつけて、
いくつかのサイトが「Mozilla」を検出したブラウザのみ動作する仕組みにしたおかげで、
競合ブラウザ（IE等）も「Mozilla」とつけるように偽装し始めた経緯が今まで残っているせいらしい。



[ユーザー エージェント文字列を理解する](https://msdn.microsoft.com/ja-jp/library/ms537503)によると「歴史的な経緯から、Internet Explorer は自身を Mozilla 4.0 ブラウザとして識別します。」とのこと。IE8以前がMozilla/4、IE 9以降がMozilla/5となっている。

[Mozilla 4.0 vs. 5.0](http://www.dslreports.com/forum/r10269271-Mozilla-4-0-vs-5-0)でv4がNetscape Communicator、v5が GeckoベースのFirefox, Netscape 6/7という情報もあった。

Mozilla 4と5しかないのかといえば、Netscape6より前の物についてはMozilla/4.5やMozilla/3.01などが存在する。2000年リリースのNetscape6以降はMozilla/5になる。
[userAgent（ユーザーエージェント一覧）](http://www.openspc2.org/userAgent/)

また、2011年リリースのIE９からMozilla/5に変わっている。これは、Wikipediaによると Internet Explorer 以外のウェブ ブラウザーとの相互運用性が向上したことを示すため Mozilla/4.0 から Mozilla/5.0 に変更されたらしい。
[Internet Explorer 9 - Wikipedia](https://ja.wikipedia.org/wiki/Internet_Explorer_9)

Mozilla４、５の数字自体にはあまり意味がなく、Netscapeに他のブラウザが合わせていた経緯があって最終的に５に落ち着いたというだけのような気がする。


#### Gecko 

Firefox(Mozilla)関連のブラウザには「[Gecko](https://developer.mozilla.org/ja/docs/Gecko_user_agent_string_reference)」の文字列が入っているが、IEなど他のブラウザにも「like Gecko」といった文字列が入っている。

Microsoft Edgeのブラウザなんて、「Gecko」も「Chrome」も「Safari」も入っている。

```
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.<OS build number>
```

### ブラウザ戦争とUserAgent

どうして、UserAgentにMozillaなどの文字がつくようになったかの歴史が書かれている記事があった。

[世界中を巻き込んだブラウザ戦争と「ユーザーエージェント文字列」をめぐる複雑怪奇な変遷とは？
](https://gigazine.net/news/20180311-history-of-user-agent-string/)
あとその元記事も
[History of the browser user-agent string
](https://webaim.org/blog/user-agent-string-history/)
上記のサイトに書かれていることを順番にいうと、下記のリストの通り。
[History of the user-agent string](https://humanwhocodes.com/blog/2010/01/12/history-of-the-user-agent-string/)も一部参考にした。

<table>
<tr>
<th>できごと</th>
<th>user-agent string</th>
</tr>
<tr>
<td>「NCSA Mosaic」のブラウザが出来る。</td>
<td>NCSA_Mosaic/2.0 (Windows 3.1)</td>
</tr>
<tr>
<td>「Mosaic Killer」の略称を持つ「Mozilla」というブラウザが登場する。</td>
<td> 
</td>
</tr>
<tr>
<td>「Mosaic」から異議申し立てがあったため、「Mozilla」を「Netscape」に改める。 </td>
<td>Mozilla/1.0 (Win3.1)　</td>
</tr>
<tr>
<td>「Netscape」はフレームに対応していた為、フレーム対応のサイトが「Netscape」のみに制限するようになる。</td>
<td> </td>
</tr>
<tr>
<td>「Internet Explorer」が「Netscape」に偽装するようになる。</td>
<td> Mozilla/1.22 (compatible; MSIE 2.0; Windows 95)</td>
</tr>
<tr>
<td>「Netscape」は「Mozilla」に生まれ変わり、「Gecko」のレンダリングエンジンを採用する。</td>
<td>Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) Gecko/20020826</td>
</tr>
<tr>
<td>「Mozilla」は「Firefox」に形を変える。
<br>
「Firefox」の人気が出て、2008年時点のヨーロッパだとシェア20%を超える
</td>
<td>Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE; rv:1.7.5) Gecko/20041108 Firefox/1.0</td>
</tr>
<tr>
<td>「Firefox」以外の「Gecko」を採用するブラウザも「Mozilla」を付けるようになる。</td>
<td>Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7.2) Gecko/20040825 Camino/0.8.1 
<br>
Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.8) Gecko/20071008 SeaMonkey/1.0

</td>
</tr>
<tr>
<td>ブラウザ「Konqueror(KHTML)」が「Mozilla Firefox（Gecko)」を偽装し始める。</td>
<td>
Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko)
</td>
</tr>
<tr>
<td>
Appleが「Konqueror(KHTML)」をベースに「WebKit」のレンダリングエンジンを作成する。
<br>
Appleのブラウザ「Safari」は「WebKit」を採用するが、「KHTML」の記載は残る。</td>
<td>Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5 </td>
</tr>
<tr>
<td>Operaはユーザーが任意でなりすませるようにした</td>
<td>
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.51
<br>
Mozilla/5.0 (Windows NT 6.0; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.51, or Opera/9.51 (Windows NT 5.1; U; en) 
</td>
</tr>
<tr>
<td>「Internet Explorer」が「FireFox」を偽装するようになる。</td>
<td>Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)</td>
</tr>
<tr>
<td>「Google Chrome」が「Safari」の「WebKit」を偽装する。</td>
<td>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13</td>
</tr>
</table>


とややこしいことになっている。
それに今は、「Microsoft Edge」が「Chrome」を偽装するが追加になってくる。


ブラウザの偽装だけでもややこしいのに、「WindowsPhone」のようにOSまで偽装して「Windows」も「Android」も両方入ってしまって、
「Gecko」、「Chrome」、「Safari」、「Edge」も入っているケースが下記の通りになる。

```
Mozilla/5.0 (Windows Phone 10.0; Android 6.0.1; Microsoft; Lumia 640 LTE) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Mobile Safari/537.36 Edge/14.14390
```

※ 偽装とは記事に書かれていたが、単にforkして引き継がれているだけの場合もありえる。UserAgent文字列が成り済まし、もしくは引き継がれるようになったポイントは以下の通り。

* NetscapeからFireFoxに引き継がれる際に``Mozilla``の文字列も引き継がれた。
* Internet Explorerが``Mozilla``や``like Gecko``などの文字列をつけ始める。
* Konquerorも``Mozilla``や``like Gecko``などの文字列をつけ始める。
* KonquerorをForkしてSafari(Webkit)が出来る際に``KHTML``などの文字列も引き継がれる。
* WebKitをGoogle Chromeが採用して``AppleWebKit``や``Safari``など文字列がそのまま引き継がれる。
* ChromeがWebKitからBlinkになっても``AppleWebKit``などの文字列は引き継がれる。
* Chromiumベースに作られたブラウザはさらに``Chrome``の文字列も引き継がれていく。

# OS別のUserAgent

## PC

### Windows

Windowsのバージョンは``Windows NT 6.1``の様な[Windows NT系](https://ja.wikipedia.org/wiki/Windows_NT%E7%B3%BB)のバージョンで表示される。

```
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)
```

* [Wiki Windows NT系](https://ja.wikipedia.org/wiki/Windows_NT%E7%B3%BB)より抜粋

Serverかどうかの区別はできなそうだ。

<table>
<tr>
<th>NT Ver.</th>
<th>プロダクト名</th>
</tr>
<tr>
<td>NT 5.1</td>
<td>Windows XP</td>
</tr>
<tr>
<td>NT 5.2</td>
<td>Windows XP (64ビット)/Windows Server 2003</td>
</tr>
<tr>
<td>NT 6.0</td>
<td>Windows Vista/Windows Server 2008</td>
</tr>

<tr>
<td>NT 6.1</td>
<td>Windows 7/Windows Server 2008 R2 </td>
</tr>
<tr>
<td>NT 6.2</td>
<td>Windows 8/Windows Server 2012</td>
</tr>
<tr>
<td>NT 6.3</td>
<td>Windows 8.1/Windows Server 2012 R2</td>
</tr>
<tr>
<td>NT 10.0</td>
<td>Windows 10/Windows Server 2016、2019</td>
</tr>

</table>

### macOS
「Mac OS X」＋OSのバージョンで判定できる。プロセッサのIntel と PowerPC(PPC)の区別も出来るが、今現在PowerPCはほとんど残っていないと思うのであまり意味なし。
Apple M1チップ搭載のM1 Macの場合も``Intel Mac OS ``表示になるらしいので、CPUの区別は出来なくなる。

* [M1チップ MacのUA](https://qiita.com/basara669/items/bd220d2e78d9ce0fe266)
* [What's the value of navigator.platform on ARM Macs?](https://stackoverflow.com/questions/64853342/whats-the-value-of-navigator-platform-on-arm-macs)


OSのバージョンの表示がFirefoxの場合「10.11」と、その他の場合「10_11」と表記が異なるので注意。

```
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
```
	
```
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:43.0) Gecko/20100101 Firefox/43.0 
```

<table>
<tr>
<th>バージョン</th>
<th>コードネーム</th>
</tr>
<tr>
<td>10.5</td>
<td>Leopard</td>
</tr>
<tr>
<td>10.6</td>
<td>Snow Leopard</td>
</tr>
<tr>
<td>10.7</td>
<td>Lion</td>
</tr>

<tr>
<td>10.8</td>
<td>Mountain Lion</td>
</tr>
<tr>
<td>10.9</td>
<td>Mavericks</td>
</tr>
<tr>
<td>10.10</td>
<td>Yosemite</td>
</tr>
<tr>
<td>10.11</td>
<td>El Capitan</td>
</tr>
<tr>
<td>10.12</td>
<td>Sierra</td>
</tr>
<tr>
<td>10.13</td>
<td>High Sierra</td>
</tr>
<tr>
<td>10.14</td>
<td>Mojave</td>
</tr>
<tr>
<td>10.15</td>
<td>Catalina</td>
</tr>
<tr>
<td>11</td>
<td>Big Sur</td>
</tr>
</table>

各バージョンについての詳細はWikipediaで

* [Wikipedia macOS](https://ja.wikipedia.org/wiki/MacOS)


### Linux

64bitの場合「x86_64」が32bitの場合「i686」、x86_64 環境の i686 Linux デスクトップの場合は、「i686 on x86_64」が入る。
Androidの場合も「Linux」文字列が入るので、「x86_64」、「i686」の有無で判定するか「Android」を除くの条件がいる？
「X11」はGUI環境を提供している「X Window System」のことだと思われる。
「armv7l」のようについている場合は、ARM系CPUを使用していると思われる。Chromecastなど。

```
Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/10.0

Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.0 Safari/537.36 CrKey/1.27.96538
```

Chrome OSの場合、CrOSが含まれる。

```
Mozilla/5.0 (X11; CrOS x86_64 7520.63.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
```

OSのディストリビューションの名前が入る場合が多い。「Mint」、「Ubuntu」など

```
# Ubuntu
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0

# Mint Linux
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.1) Gecko/20090716 Linux Mint/7 (Gloria) Firefox/3.5.1

# Fedora
Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.10) Gecko/2009042708 Fedora/3.0.10-1.fc10 Firefox/3.0.10

# Gentoo
Mozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9.0.11) Gecko/2009070611 Gentoo Firefox/3.0.11

# Arch Linux
Mozilla/5.0 (X11; Arch Linux; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0
```


### その他

#### BSD系OS

```
# FreeBSD
Mozilla/5.0 (X11; FreeBSD amd64; rv:41.0) Gecko/20100101 Firefox/41.0

# OpenBSD
Mozilla/5.0 (X11; U; OpenBSD amd64; en-US; rv:1.9.0.1) Gecko/2008081402 Firefox/3.0.1

# NetBSD
Mozilla/5.0 (X11; NetBSD amd64; rv:16.0) Gecko/20121102 Firefox/16.0
```

####  ゲーム機 (Wii/PS4/PSVita/Switch/3DS/XBox)

```
# Wii
Mozilla/5.0 (Nintendo WiiU) AppleWebKit/536.28
(KHTML, like Gecko) NX/*** NintendoBrowser/***.US

# PlayStation 4
Mozilla/5.0 (PlayStation 4 1.52) AppleWebKit/536.26 (KHTML, like Gecko)

# PlayStation 5
Mozilla/5.0 (PlayStation 5/SmartTV) AppleWebKit/605.1.15 (KHTML, like Gecko)

Mozilla/5.0 (PlayStation 5 3.03/SmartTV) AppleWebKit/605.1.15 (KHTML, like Gecko)


# PS Vita 
Mozilla/5.0 (PlayStation Vita 1.50) AppleWebKit/531.22.8 (KHTML, like Gecko) Silk/3.2

# Nintendo Switch
Mozilla/5.0 (Nintendo Switch; ShareApplet) AppleWebKit/601.6 (KHTML, like Gecko) NF/4.0.0.5.9 NintendoBrowser/5.1.0.13341

# Comparable to the Wii U browser
Mozilla/5.0 (Nintendo WiiU) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.4.2.11 NintendoBrowser/4.3.0.11224.US

# 3DS
Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.0.5.20 Mobile NintendoBrowser/1.8.10156.US

# XBox One
Mozilla/5.0 (Windows NT 10.0; Win64; x64; Xbox; Xbox One) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10553
```

* [PlayStation](http://www.jp.playstation.com/ps3/pdf/Web_Content-Guidelines_j250.pdf)
* [User Agent Strings of Playstation 5](https://www.reddit.com/r/PS5/comments/j621au/user_agent_strings_of_playstation_5/)
* [Nintendo Switch](https://www.reddit.com/r/NintendoSwitch/comments/5xav81/the_user_agent_string_of_the_internal_browser_is/)
* [User-Agent of Microsoft Edge on Xbox One with Windows 10](https://www.ctrl.blog/entry/xbox-edge-user-agent.html)


#### Oculus Go

```
Mozilla/5.0 (Linux; Android 7.1.1; Pacific Build/N9F27L)AppleWebKit/537.36 (KHTML, like Gecko) OculusBrowser/4.0.0.17 SamsungBrowser/4.0 Chrome/61.0.3163.109 Mobile VR Safari/537.36
```

* [The basics of using Oculus Browser](https://developer.oculus.com/documentation/vrweb/latest/concepts/carmel-getting-started/)


#### Amazon Fire TV

```

# Android WebView (android.webkit.WebView)	
Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; AFTB Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30

# Amazon WebView (com.amazon.android.webkit.AmazonWebView)
Mozilla/5.0 (Linux; Android 4.2.2; AFTB Build/JDQ39) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.173 Mobile Safari/537.22

# Amazon ウェブアプリプラットフォーム
Mozilla/5.0 (Linux; Android 4.2.2; AFTB Build/JDQ39) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.173 Mobile Safari/537.22 cordova-amazon-fireos/3.4.0 AmazonWebAppPlatform/3.4.0;2.0

```

開発者向けのページには「アプリやウェブページは、ユーザーエージェント文字列を読み取ることでFire TVを検出し、それぞれに応じたユーザーエクスペリエンスを提供できます。」と書かれているので、Fire TVを検出してもらうためにユーザーエージェント文字列の指定がある事がわかる。

* [Fire TVのユーザーエージェント文字列](https://developer.amazon.com/ja/docs/fire-tv/user-agent-strings.html)

#### Apple TV

```
AppleTV6,2/11.1

AppleTV3,1/6.0.1 (10A831)
```

* [51Degrees User Agent Analysis - June 2018](https://51degrees.com/blog/51degrees-user-agent-analysis-june-2018)


## スマホ

### iPhone
 iOSのバージョンによる識別になるので、iPhone 5か6かどうかの区別は画面サイズも合わせて比較が必要かも。
「iPhone」の文字列が入っていて、OSのバージョンが「OS 7_0_4」のように含まれる。
iPhone6以降は画面サイズによる違いもなくなるのでiPhone6とiPhoneXを区別することは出来ない。

 ``` 
Mozilla /5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B5110e Safari/601.1 
```



* [Wikipedia iOS (アップル)](https://ja.wikipedia.org/wiki/IOS_(%E3%82%A2%E3%83%83%E3%83%97%E3%83%AB))



iOS版Chromeを区別したい場合は、「CriOS」があるかどうかで判定する。

```
Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3
```

*  [inazumatv.com iOS Chrome を判別したい]
(http://www.inazumatv.com/contents/archives/9875)
*  [Chrome User Agent Strings]
(https://developer.chrome.com/multidevice/user-agent)


PC版サイトを見るときに使用するUserAgentもある。

```
# Safari デスクトップ用サイトを表示
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/10.0 Safari/602.1.31
```

* [iOS 11 Webブラウザのユーザーエージェント (Safari, Google Chrome, LINE など)](https://qiita.com/niwasawa/items/44aaae7a1f942b62b9c1)

iPhone、iPadだと``Mobile/15E148``のように番号がついているが、
これは``ビルド番号（Build Number）``で、iOSのバージョン毎に決まっているらしい。

* [iOS version history](https://en.wikipedia.org/wiki/IOS_version_history)
* [How to Find the Build Number of Mac OS X on a Mac
](https://osxdaily.com/2015/03/23/find-build-number-os-x-mac/)
* [OS X & macOS Build Numbers/Versions
](https://www.tech2max.com/os-x-build-numbers/)

### Android
[Android のユーザーエージェントの検出について]
(http://googlewebmastercentral-ja.blogspot.jp/2011/05/android.html)
によると「Android」と「Mobile」があると、Android版スマホと判定できるようだ。
タブレットなどは「Android」しかない。

```
Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; Nexus One Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
```

Androidのバージョン番号も出力される。``例： Android 2.2.1``

<table>
<tr>
<th>バージョン</th>
<th>コードネーム</th>
</tr>

<tr>
<td>1.5</td>
<td>Cupcake</td>
</tr>

<tr>
<td>1.6</td>
<td>Donut</td>
</tr>

<tr>
<td>2.0/2.1</td>
<td>Eclair</td>
</tr>

<tr>
<td>2.2</td>
<td>Froyo</td>
</tr>

<tr>
<td>2.3/2.4</td>
<td>Gingerbread</td>
</tr>

<tr>
<td>3.0/3.1/3.2</td>
<td>Honeycomb</td>
</tr>

<tr>
<td>4.0</td>
<td>Ice Cream Sandwich</td>
</tr>

<tr>
<td>4.1/4.2/4.3</td>
<td>Jelly Bean</td>
</tr>

<tr>
<td>4.4</td>
<td>KitKat</td>
</tr>

<tr>
<td>5.0</td>
<td>Lollipop</td>
</tr>

<tr>
<td>6.0</td>
<td>Marshmallow</td>
</tr>

<tr>
<td>7.0-7.1</td>
<td>Nougat</td>
</tr>

<tr>
<td>8.0-8.1</td>
<td>Oreo</td>
</tr>

<tr>
<td>9.0</td>
<td>Pie</td>
</tr>
</table>

詳細はWikipediaで

* [Wikipedia Androidのバージョン履歴](https://ja.wikipedia.org/wiki/Android%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E5%B1%A5%E6%AD%B4)



機種によってデバイス名が付与される。``例：Nexus One``

* [AUのUserAgent一覧](http://www.au.kddi.com/developer/android/kishu/ua/)
* [SoftbankのUserAgent検索ページ](https://www.support.softbankmobile.co.jp/partner/smp_info/smp_info_search_t.cfm)
* [docomoの端末スペック→ブラウザでUserAgent表示](http://spec.nttdocomo.co.jp/spmss/)

Android ChromeのPC版サイトを見るを指定した場合のUserAgentもある

```
Mozilla/5.0 (X11; Linux x86_64)  AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.105 Safari/537.36
```

* [Android版ChromeでPC版サイトを見る方法](https://anlovegeek.net/android-chrome-pc/)

### Windows Phone
Windows Phoneの場合は、「Windows Phone」が付与される。「Android」も入っているのがややこしい。

```
Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; DEVICE INFO) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Mobile Safari/537.36 Edge/12.<OS build number>
```

* [Microsoft ユーザー エージェント文字列の変更]
(https://msdn.microsoft.com/ja-jp/library/hh869301(v=vs.85).aspx)


Windows Phone 8.1だとIE 11、Windows Phone 10の場合はEdgeが入るようだ

```
Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 1320) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537
```

* [しばやん雑記 Windows Phone 8.1 Update で Internet Explorer 11 の User-Agent が大きく変わっていた件]
(http://blog.shibayan.jp/entry/20140805/1407230070)

### Firefox OS

Firefox OSの場合は、「Mobile」、「Gecko」、「Firefox」が出力されるが、Androidと区別するには「Android」が含まれないという条件を入れる必要があるか。

```
Mozilla/5.0 (Mobile; LGL25; rv:32.0) Gecko/32.0 Firefox/32.0
```

Firefox OSはテレビでも使われているがそのときはMobileは付かない。``Viera``などが付く。

```
Mozilla/5.0 (FreeBSD; Viera; rv:34.0) Gecko/20100101 Firefox/34.0
```

* [MDN Gecko ユーザエージェント文字列リファレンス]
(https://developer.mozilla.org/ja/docs/Gecko_user_agent_string_reference)


### BlackBerry

BlackBerryの場合は時期によっていくつかのパターンがある。
なお、２０１８年発売のBlackBerry EvolveからはAndroid搭載になっているそうだ。

```
Mozilla/5.0 (BB10; <Device Model>) AppleWebKit/<WebKit Version> (KHTML, like Gecko) Version/<BB Version #> Mobile Safari/<WebKit Version>

Mozilla/5.0 (BlackBerry; U; BlackBerry 9320; en-GB) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.1.0.398 Mobile Safari/534.11+

Mozilla/5.0 (Linux; Android 8.1.0; BBF100-6 Build/OPM1.171019.019) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.158 Mobile Safari/537.36
```

* [The BlackBerry 10 User Agent String Has Arrived!]
(http://devblog.blackberry.com/2012/08/blackberry-10-user-agent-string/)

## タブレット

### iPad

``iPad``の文字以外はiPhoneとほぼ同じ。iPad、iPad miniとの区別はUserAgentだけでは判断できないと思われる、

```
Mozilla/5.0 (iPad; CPU OS 10_0_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A403 Safari/602.1
```

### Androidタブレット

``Android``があって``Mobile``が入っていない。
Galaxy TAB P1000などのようにタブレットと言われているが``Mobile``が入るケースもある。

```
Mozilla/5.0 (Linux; Android 5.0.2; SM-T530 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.83 Safari/537.36
```

* [タブレット端末ユーザーにはフルサイズのウェブを表示しましょう](https://webmaster-ja.googleblog.com/2012/11/giving-tablet-users-full-sized-web.html)


### Kindle Fire OS

Kindle Fire OSはAndroidベースのタブレットなので、AndroidがUserAgentに付いている。
Kindleかどうかは、 ``Silk``か``Kindle``がの文字列があるかで判定できるか。``Mobile``の文字列が付いているが、タブレットなので、タブレットかどうかの区別をしたい場合は、``Silk``か``Kindle``の判定を優先するか。

```
Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Kindle Fire Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
```

```
Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Silk/1.0.146.3-Gen4_12000410) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Silk-Accelerated=true
```

* [Fireタブレットのユーザーエージェント文字列](https://developer.amazon.com/ja/docs/fire-tablets/ft-user-agent-strings.html)

### Windowsタブレット

WindowsタブレットはノートPCとUserAgentからは区別が付きにくい。
タッチ対応の場合は``Touch``が入っている。またARM系CPUを採用していたらタブレットと判断することが出来ないかという話もあったが、機能面でもWindowsタブレットとタッチ対応ノートPCは似通っているので区別する必要性自体が無いかもしれない。``Tablet PC x.0``が入るケースがあるが、これはノートPCでも入る場合があるようだ。

```
Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko

Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch)

Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Tablet PC 2.0; GWX:QUALIFIED; rv:11.0) like Gecko
```

* [User Agent for Microsoft Tablets](https://social.msdn.microsoft.com/Forums/ja-JP/b3d397bb-23b4-4dfb-a1cb-f3cab54f37d5/user-agent-for-microsoft-tablets?forum=tabletandtouch)
* [ユーザー エージェント文字列の変更](https://msdn.microsoft.com/ja-jp/windows/hh869301(v=vs.80))
* [IE の UserAgent まとめ](https://garafu.blogspot.com/2013/06/ie-useragent.html)

## フィーチャーフォン

携帯電話、ガラパゴスケータイ、ガラケーと呼ばれていたもの。

### docomo
docomoは以下の通り「DoCoMo」が先頭に入っている。

```
DoCoMo/2.0 F2051(c100;TB;serXXXXXXXXXXXXXXX;iccxxxxxxxxxxxxxxxxxxxx)
```

* [docomo ユーザエージェント]  (https://www.nttdocomo.co.jp/service/developer/make/content/browser/html/useragent/)

### au
AUは以下の通り先頭に「KDDI」が入っている。

```
KDDI-[機種名] UP.Browser/[ブラウザバージョン] (GUI) [サーバ名]/[サーババージョン]
```

* [【EZweb 全般】EZweb コンテンツ制作ガイド PDF]
(http://www.au.kddi.com/ezfactory/web/pdf/contents_guide.pdf)

### SoftBank
SoftBankは以下の通り先頭に「Vodafone」か「SoftBank」が入っている。

```
Vodafone/1.0/V904SH/SHJ001/SN  Browser/VF-NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1
```
```
SoftBank/1.0/910T/TJ001/SN Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1
```



* [SoftBank WEB & NETWORK ユーザエージェント]
(http://creation.mb.softbank.jp/mc/tech/tech_web/web_useragent.html)

# ブラウザ別のUserAgent

### Internet Explorer


IE 10以前の場合は、「MSIE」の右側のバージョン表示で判定する。

```
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)   
```

IE 11から「MSIE」が入らなくなる。「Trident/7.0」で判定するか。

```
Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; rv:11.0) like Gecko
```

互換表示の場合、MSIE x.0 と Trident/x.0 が同時に存在する。
ノートPCの場合、Tablet PC x.0 が存在する。
タッチ対応の場合、Touch が存在する。
参考
[IE の UserAgent まとめ (2)](http://garafu.blogspot.jp/2015/01/ie-useragent-2.html)


「WOW64」が入っている場合は、64 ビット プロセッサ上で 32 ビット バージョンの Internet Explorer が動いているとかわかる。
参考
[ユーザー エージェント文字列を理解する](https://msdn.microsoft.com/ja-jp/library/ms537503)


「.NET Framework」 がインストールされている場合、 ".NET CLR" およびバージョン番号が UserAgent 文字列に追加される。``.NET CLR 3.0.``とある場合は、.NET Framework 3.0が入っている。

```
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727; .NET CLR 3.0.04425.00)
```

参考
[.NET Framework 3.0 がインストールされているかどうかを確認する](https://msdn.microsoft.com/ja-jp/library/ms749404(v=vs.110).aspx)



### Microsoft Edge

Edgeが入っているので判定。「Chrome」、「Safari」、「Gecko」も入っているので注意。
UserAgentに出力されるEdgeのバージョンはEdge本体ではなく、EdgeHTMLのバージョン。

```
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.<OS build number>
```

* [Microsoft ユーザー エージェント文字列の変更](https://msdn.microsoft.com/ja-jp/library/hh869301(v=vs.85).aspx)
* [What's the latest version of Edge?](https://www.whatismybrowser.com/guides/the-latest-version/edge)

### ChromiumベースのMicrosoft Edge(MSEdge)

「Chromium」ベースで再構築となるMicrosoft Edge(MSEdge)は従来のUserAgentにあった「Edge」では無く、「Edg」となる。

```
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.48 Safari/537.36 Edg/74.1.96.24

```


ChromiumベースのEdgeのCanary ChannelのmacOS版も出ている。

```
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3794.0 Safari/537.36 Edg/76.0.161.0 
```

* [Microsoft Edge Insider](https://www.microsoftedgeinsider.com/en-us/)


* [2019-04-09のJS: ChromiumベースのMicrosoft Edge プレビュー版公開、`request`モジュールがメンテンスモードに移行の予定](https://jser.info/2019/04/09/chromiummicrosoft-edge-request/)


### Chrome

Microsoft EdgeやOperaにも「Chrome」が入っているので「Chrome」があるだけで判定出来ない。

```
Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36
```

iOS版ChromeのエンジンははBlinkではなく、SafariのWebkitと同じなので実質Safari。
ChromeもChromiumもChromeCanaryもUserAgentは同じ、バージョンが違うだけ。
ChromeのバージョンはMAJOR.MINOR.BUILD.PATCH形式。２番目のMINORバージョンは常に０で初期のバージョン以外は使われていないぽい。

* [Version Numbers - The Chromium Projects
](https://www.chromium.org/developers/version-numbers)
* [Google Chromeのバージョンの変遷](https://ja.wikipedia.org/wiki/Template:Google_Chrome%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%81%AE%E5%A4%89%E9%81%B7)


### Firefox
「rv:geckoversion」はGecko のリリースバージョン。
「Firefox/firefoxversion」の形式でバージョンが入っている。
 Geckoの右側の「20100101」は固定文字列

```
Mozilla/5.0 (platform; rv:geckoversion) Gecko/20100101 Firefox/firefoxversion
```

* [MDN Gecko ユーザエージェント文字列リファレンス]
(https://developer.mozilla.org/ja/docs/Gecko_user_agent_string_reference)



### Safari

Microsoft EdgeやChromeにも「Safari」が入っているので「Safari」があるだけで判定出来ない。
Version/Safariバージョン
Safari/WebKitバージョン

```
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/8.0.8 Safari/600.8.9
```



### Opera
バージョン15以降からChroniumベースのブラウザに変わっている。他にもOperaMini、OperaTouchなどがある。

```
Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36 OPR/32.0.1948.25

# Chrominumになる前の古い形式
Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.18
```

* [Opera - Wikipedia](https://ja.wikipedia.org/wiki/Opera)


### Vivaldi
Operaの元CEOなどにより開発されたChrominumベースのブラウザ。日本人の利用が多い。
Vivaldi 2.10から、``Vivaldi``の文字列があることで正しく表示されないウェブサイトがあるため``Vivaldi``の文字列が追加されなくなり、Chromeと同じUserAgentになった。

```
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.88 Safari/537.36 Vivaldi/2.4.1488.36

# Vivaldi 2.10
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.94 Safari/537.36
```
* [Vivaldi (ウェブブラウザ) - Wikipedia](https://ja.wikipedia.org/wiki/Vivaldi_(%E3%82%A6%E3%82%A7%E3%83%96%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6))
* [Vivaldi 2.10: No strings attached](https://vivaldi.com/press/releases/vivaldi-2-10-no-strings-attached/)
* [ユーザーエージェント(UserAgent)は権力によって悪用されている](https://qiita.com/NumLocker/items/61da0ce5bc65cbb3c7ff)


### SRware Iron

ドイツのSRware社のブラウザ。ChromiumベースなのでほぼChromeだが、利用者情報の送信機能がないなど個人情報周りで気をつかっている。

```
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3250.0 Iron Safari/537.36
```

* [SRWare Iron](https://www.srware.net/en/software_srware_iron.php)

### Sleipnir

日本のフェンリル社のブラウザ。

```
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36 Sleipnir/6.1.0
```

* [sleipnir](https://www.fenrir-inc.com/jp/sleipnir/)

### Xiaomi MIUI Browser 

Xiaomiに搭載されているブラウザ。モバイル向けのブラウザとしてシェアのばしているらしい。

```
Mozilla/5.0 (Linux; U; Android 7.1.2; zh-cn; MI 5C Build/N2G47J) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.146 Mobile Safari/537.36 XiaoMi/MiuiBrowser/9.1.3
```

* [Mi Browser vs Google Chrome: Which One Should You Use](https://www.guidingtech.com/mi-browser-vs-chrome-difference/)

### Brave
プライバシーを重視して、個人情報を収集するような広告をブロックし、その代わりプライバシーに配慮した別の広告を入れたり、閲覧すると仮想通貨BATが貰える仕組みがある特徴的なブラウザ。
以前は“Brave/Version”も出力されていたようだが、現在はChromeと同じUserAgentが出力される。

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

* [Brave Browser](https://brave.com/)
* [A way to have a unique User Agent while still looking like Chrome](https://community.brave.com/t/a-way-to-have-a-unique-user-agent-while-still-looking-like-chrome/41425)
* [Brave should have its own User-Agent, but here is how you detect it anyway
](https://www.ctrl.blog/entry/brave-user-agent-detection.html)

###  Samsung Internet

Samsung が Galaxy向けに搭載しているブラウザ。Gear VRなどでも使われている。Chromiumベース。日本でも上位６位のシェアを持っている。

```
Mozilla/5.0 (Linux; Android 5.0.2; SAMSUNG SM-G925F Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/4.0 Chrome/44.0.2403.133 Mobile Safari/537.36
```

* [Samsung Internet User-Agent String Format](https://developer.samsung.com/technical-doc/view.do?v=T000000203)
* [Samsung_Internet_for_Android](https://en.wikipedia.org/wiki/Samsung_Internet_for_Android)
* [Browser Market Share Japan](http://gs.statcounter.com/browser-market-share/all/japan)

###  UCBrowser

中国、東南アジア、インドで主に使われているブラウザ。人口の多い地域で使われているからか、FireFoxについで全世界で上位４位のシェアを持っている。

```
Mozilla/5.0 (Linux; U; Android 5.1; en-US; Aqua Joy Build/LMY47D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/11.2.5.932 U3/0.8.0 Mobile Safari/534.30
```

* [Browser Market Share Worldwide
](http://gs.statcounter.com/browser-market-share)


### Androidの標準ブラウザ
かつてAndroid端末にプレインストールされていたブラウザ。Chromeとは違う。
Android 4.4以下、およびAndroid 5.0以降の一部の端末に搭載されている。
現在、開発は終了している。

Chromeの文字が入るケースと

```

Mozilla/5.0 (Linux; Android 4.2.2; ja-jp; SC-04E Build/JDQ39) AppleWebkit/535.19 (KHTML,like Gecko) Version/1.0 Chrome/18.0.1025.308 Mobile Safari/535.19
```

Chromeの文字が入らないケース

```

Mozilla 5.0 (Linux; U; Android 4.0.4; ja-jp; SC-06D Build/IMM76D) AppleWebkit/534.30 (KHTML,like Gecko) Version/4.0 Mobile Safari/534.030
```

があるらしい。Chrome　と区別する必要がある場合はちょっとややこしい。

* [[Android] GALAXY S4の標準ブラウザのUAに『Chrome』と書かれている件について](https://www.rainorshine.asia/2013/06/03/post2422.html)
* [[javascript]useragentを使ってAndroid標準ブラウザ判定](https://qiita.com/fujimu/items/a0501acc7d9b93cf6d3b)
* [Androidブラウザ](https://ja.wikipedia.org/wiki/Android%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6)

### Tor Browser

通信経路を秘匿化する「Tor」が組み込まれた[Tor Browser](https://www.torproject.org/projects/torbrowser.html.en)はFireFoxベースに作られているので、UserAgentもFireFoxと同じに見える。

```
Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0 

```

UserAgentは固定のようなので、OSやブラウザのバージョンを判別することは出来ない。
以前は別のUserAgentが使われていたがどの様な頻度で変わっているかは不明。
個人特定が出来ないようにUserAgentは一本化されているようなので、プラグインとか使ってUserAgentをカスタマイズしないほうが良いみたい。

* [どこからアクセスしているかを隠して匿名化できるブラウザ「Tor Browser」
](https://gigazine.net/news/20141017-tor-browser-4/)
* [Random user agent in Tor Browser](https://tor.stackexchange.com/questions/1377/random-user-agent-in-tor-browser)
* [Tor browser user-agent strings](https://tor.stackexchange.com/questions/4890/tor-browser-user-agent-strings)
* [Tor Browser 8.0 wrong user-agent](https://trac.torproject.org/projects/tor/ticket/27495)



### アプリ等のブラウザ


YahooのAndroid用ブラウザ。iOS版は提供終了。

```

Mozilla/5.0 (Linux; U; Android 4.2.2; ja-jp; SH-07E Build/S5310) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 YJApp-ANDROID jp.co.yahoo.android.yjtop/2.3.16

```
http://himenaotaro.hatenablog.com/entry/20151011/1444564265
https://promo-ybrowser.yahoo.co.jp/


モバイル関連のブラウザは「Mobile」がついているだろうと思っていると、
Opera Miniのように、Mobileがついていないものがあるので、

```

User-Agent: Opera/9.80 (Android; Opera Mini/8.0.1807/36.1609; U; en) Presto/2.12.423 Version/12.16

```

モバイルか否かの判定はUserAgentじゃなくて解像度で判断してしまったほうが良いのかもしれない。

https://dev.opera.com/articles/opera-mini-request-headers/

### Facebookアプリ

facebookアプリからアクセスする場合は、“FBAN”とか”FBIOS”の文字列が入ってくる。

```
Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13F69 [FBAN/FBIOS;FBAV/59.0.0.51.142;FBBV/33266808;FBRV/0;FBDV/iPhone7,1;FBMD/iPhone;FBSN/iPhone OS;FBSV/9.3.2;FBSS/3;FBCR/Telkomsel;FBID/phone;FBLC/en_US;FBOP/5]

```

* [Facebookアプリをユーザーエージェントで判別しフッターを非表示にする](https://sutaba-mac.site/toggle-footer-from-fbapp-access/)

### iOSアプリ(CFNetwork)

iOSアプリ経由でWEBページにアクセスすると、標準ブラウザとは別のUserAgentが記録される

```

CFNetwork/609 Darwin/13.0.0

```

* [CFNetwork | Apple Developer Documentation](https://developer.apple.com/reference/cfnetwork)
* [CFNetworkとDarwinの組み合わせからiPhoneとiOSの分布を調べる方法
](http://blog.ch3cooh.jp/entry/20121030/1351575057)

### Androidアプリ(HttpURLConnection)
Androidのアプリ経由でアクセスする場合のUserAgentもある。

```
Dalvik/1.4.0 (Linux; U; Android 2.3.2; Nexus S Build/GRH78C)
```

* [モバイルアプリのユーザーエージェント設計のベストプラクティス | Developer IO
](https://dev.classmethod.jp/smartphone/user-agent-best-practice/)




### 海外のブラウザ
特定の国で使われているブラウザなどもある。

#### ベトナム
ベトナムでは「Cốc Cốc」というブラウザのシェアがNo2となっている。

```
Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) coc_coc_browser/49.0 Chrome/43.0.2357.126_coc_coc Safari/537.36
```

* [ベトナムでシェア2位のブラウザ＆検索エンジンCốc Cốcがたった1年でFirefoxを抜いた理由](https://www.sekai-lab.com/times/?p=3429)
* [coccoc.com](https://coccoc.com/)

#### インドネシア

2016年時点ではインドネシアでは「UC Browser」がよく使われていたが、2019年時点では減少している。

```
Mozilla/5.0 (Linux; U; Android 5.1; en-US; Aqua Joy Build/LMY47D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/11.2.5.932 U3/0.8.0 Mobile Safari/534.30
```

* [Browser Market Share Indonesia](https://gs.statcounter.com/browser-market-share/all/indonesia/#monthly-201304-201904)
* [インドネシアの特殊なブラウザ事情(Opera Mini,UC Browser Mini)](https://qiita.com/takanamito/items/8c2b6bc24ea01381f1b5)

#### 中国

中国は「UC Browser」は多いが、インドの方が多かったりする。
他に「QQ Browser」というブラウザも多く使われている。

```
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Zune 4.7; QQBrowser/7.7.24562.400; rv:11.0) like Gecko
```

他にも「Sogou Explorer」というChromiumベースのブラウザも使われている。

```
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0ozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0)
```

* [Browser Market Share China](https://gs.statcounter.com/browser-market-share/all/china#monthly-201304-201904)

#### インド
インドではシェアを減らしつつあるが、「UC Browser」がよく使われている。
またKai OSというフィーチャーフォン向けOSが２〜5%の範囲でシェアを保っている。

```
Mozilla/5.0 (Mobile; LYF/F90M/LYF-F90M-000-02-21-131117; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0
```

KaiOSはFirefoxOSの後継のB2G OSからフォークされたOS。

* [Browser Market Share India](http://gs.statcounter.com/browser-market-share/all/india)
* [2018年7月第3週　KaiOSって知っていますか？](https://gihyo.jp/lifestyle/clip/01/awt/201807/19)

#### ロシア
ロシアではYandex Browserが多く使われている。

```
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 YaBrowser/18.9.1.954 Yowser/2.5 Safari/537.36
```

Yandex BrowserはロシアのYandex社のChromiumベースのブラウザ。

* [Browser Market Share Russian Federation](http://gs.statcounter.com/browser-market-share/all/russian-federation)

#### 韓国
韓国はSamsung製のスマホやSmartTVのおかげか「Samsung Internet」が第3位になっている。

```
Mozilla/5.0 (Linux; Android 9; SAMSUNG SM-G960F Build/PPR1.180610.011) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/9.2 Chrome/67.0.3396.87 Mobile Safari/537.36
```

また、第5位に「Whale Browser」が上がってきている。「Whale」はNaver製のブラウザ。whalestoreという独自のストアを持っている。

```
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Whale/0.7.33.5 Safari/537.36
```

* [Browser Market Share Republic Of Korea](https://gs.statcounter.com/browser-market-share/all/south-korea)

#### シンガポール
シンガポールだとPuffin Browserのシェアが約3%ある。
Puffin Browserは帯域幅の使用を減らし高速に実行させるために一部の処理をクラウドサーバー上で行なっている。そのサーバーの一つがシンガポールにあるらしいがそれと関係ある？

```
Mozilla/5.0 (Linux; Android 8.0.0; moto g(6) play Build/OPP27.91-87; pt-br) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36 Puffin/7.5.3.20547AP
```

* [Browser Market Share Singapore](https://gs.statcounter.com/browser-market-share/all/singapore)
* [Puffin Browser - Wikipedia](https://ja.wikipedia.org/wiki/Puffin_Browser)
* [Puffin Browserという幻のブラウザが存在する](http://www.yosinex.top/entry/puffin-flash-browser)

#### アフリカ
アフリカはOpera（Mini）が多い。特にチャドの42%、ナイジェリアの36%など。
アフリカで利用が多いのはOpera Miniにデータ圧縮機能がある為だとか。
南アフリカだと１GBあたりへ平均$7.19と高額なモバイルデータ料金を払っている為、データ通信量の圧縮機能が費用の節約の為の解決策になっているらしい。
低価格なAndroidスマホにOperaが初期インストールされているからという説もある。

2021年時点のOperaは10%と減っている。

```
Mozilla/5.0 (Linux; U; Android 5.1.1; en-US; ONE A2003 Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 OPR/15.0.2125.101257 Mobile Safari/537.36
```

* [Opera is leading the digital revolution in Africa with nearly 120 million users](https://blogs.opera.com/mobile/2019/08/opera-is-leading-the-digital-revolution-in-africa/)
* [【ブラウザ戦争】VPN搭載で便利すぎるブラウザ「Opera」アフリカ大陸から大逆襲](https://thebridge.jp/2019/02/opera-browser-vpn-coming-to-android-pickupnews)
* [Browser Market Share Africa
](https://gs.statcounter.com/browser-market-share/all/africa)


### その他のブラウザ

他にも色々ブラウザがたくさんあるので、全部書くのは難しい。

Wikipediaにあるものだと２００種類以上ある。（各言語版によっても異なる）

* [ウェブブラウザの一覧](https://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A7%E3%83%96%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%81%AE%E4%B8%80%E8%A6%A7)
* [List of web browsers](https://en.wikipedia.org/wiki/List_of_web_browsers)


2017年のシェアが高い順で見ていくと
[Browser Market Share Worldwide](http://gs.statcounter.com/browser-market-share/)

UC BrowserのシェアがChrome、Safariの次に高いのが目を引く。

| Browser| Market Share Perc. (Sept 2016 - Sept 2017) |
|:-----------|------------:|
|Chrome|52.73|
|Safari|14.2|
|UC Browser|8.27|
|Firefox|6.54|
|IE|4.28|
|Opera|4.26|
|Samsung Internet|3.28|
|Android|2.81|
|Edge|1.72|
|IEMobile|0.41|
|Yandex Browser|0.27|
|BlackBerry|0.16|
|Coc Coc|0.16|
|QQ Browser|0.09|



# アプリケーション別のUserAgent

## Vendor fragment

 メーカー製のPCの場合、「MASP」や「MDDR」の様な文字列が付与される場合がある。これはメーカーによって値が異なる。

```
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MASP)
```


<table>
<tr>
<th>Fragment</th>
<th>Description & opinion</th>
</tr>
<tr>
<td>MDDR / MDDRJS　/ MDDC / MDDCJS / MDDS / MDDSJS</td>
<td> Dell </td>
</tr>
<tr>
<td>MAAR / MAARJS</td>
<td> Acer </td>
</tr>
<tr>
<td>MASP / MASPJS / MASA / MASAJS</td>
<td> Sony </td>
</tr>

<tr>
<td> MAAU / NP06 / NP07 / NP08 / NP09 / ASJB / ASU2 / ASU2JS</td>
<td> Asus </td>
</tr>
<tr>
<td>MASM / MASMJS</td>
<td> Samsung </td>
</tr>
<tr>
<td>MALC / MALCJS / MALN / MALNJS / LCJB / LEN2 </td>
<td> Lenovo </td>
</tr>

</table>

量が多いので詳細は参考サイトで

* [Unknown user agent fragments]
(https://www.whatismybrowser.com/developers/guides/unknown-user-agent-fragments)

## WebView

スマホアプリの　WebViewを使っている場合のUserAgent。

### ChromeベースのWebViewの場合

Lollipop以上の場合は「vw」があるかとか。
 

Old WebView 

```
Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; Build/KLP) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30
```



KitCat〜Lollipopの場合

```
Mozilla/5.0 (Linux; Android 4.4; Nexus 5 Build/_BuildID_) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36
```

Lollipop以上の場合

```
Mozilla/5.0 (Linux; Android 5.1.1; Nexus 5 Build/LMY48B; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.65 Mobile Safari/537.36
```

[Chrome User Agent Strings](https://developer.chrome.com/multidevice/user-agent)

### iOSのWebView

アプリによってカスタマイズされているケースがあるが、通常はSafariでアクセスした場合と同じになる。

* [iOS 13以降 iPadのUserAgentに注意 (WKWebView)](https://qiita.com/ShingoFukuyama/items/ef573a8e3e23ef12542e)

* [2021年版 主要なアプリ内ブラウザのUserAgentを調べてみた & 判定を実装してみた
](https://zenn.dev/kecy/articles/f51851e42c4243)


## クローラーなど

### Google 

```
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
```
ニュース用、画像用、モバイル用など他にも色々ある。[Google クローラ](https://support.google.com/webmasters/answer/1061943?hl=ja)

### Yahoo

```
Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)
```

用途によって色々ある。

* [Why is Slurp crawling my page?]
(https://help.yahoo.com/kb/search/SLN22600.html?impressions=true)
* [Yahoo!ディスプレイアドネットワーク（YDN）のクローラーについて](https://help.marketing.yahoo.co.jp/ja/?p=1483)
* [スポンサードサーチのクローラーについて](https://help.marketing.yahoo.co.jp/ja/?p=6495)

### Bing

```
Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
```

他にも何種類かある。

* [Which Crawlers Does Bing Use? - Bing Webmaster Tools](https://www.bing.com/webmaster/help/which-crawlers-does-bing-use-8c184ec0)


### Baidu

```
Mozilla/5.0 (Linux;u;Android 4.2.2;zh-cn;) AppleWebKit/534.46 (KHTML,likeGecko) Version/5.1 Mobile Safari/10600.6.3 (compatible; Baiduspider/2.0;+http://www.baidu.com/search/spider.html)
```

* [百度蜘蛛的 User Agent](https://blog.wpjam.com/m/baiduspider-user-agent/)
* [FAQs of Baiduspider](https://help.baidu.com/question?prod_id=99&class=0&id=3001)

### DuckDuckGo

```
DuckDuckBot/1.0; (+http://duckduckgo.com/duckduckbot.html)  
```

* [DuckDuckGo Bot](https://duckduckgo.com/duckduckbot)
* [List of All User Agents for Top Search Engines](https://perishablepress.com/list-all-user-agents-top-search-engines/)

### 脆弱性スキャナなど怪しいアクセス

何も公開していないはずのサイトでも海外から謎のアクセスが来ていたりするが、脆弱性スキャナーや攻撃ツールだったりすることが多いようだ。UserAgentからどんなツールかわかる場合もある。

```
# ZmEu 脆弱性スキャナの一種 phpMyAdminなどへの攻撃を目的としてスキャン
ZmEu
# Jorgee　PHPの脆弱性をスキャン
Mozilla/5.0 Jorgee
# NYU (New York University Information Technology)
NYU
# muhstik-scan
Mozilla/5.0 muhstik-scan, muhstik/1.0
# Indy-Library
Mozilla/3.0 (compatible; Indy Library)
# zgrab
Mozilla/5.0 zgrab/0.x
# masscan
masscan/1.0 (https://github.com/robertdavidgraham/masscan)
# sysscan
sysscan/1.0 (https://github.com/robertdavidgraham/sysscan)
```

* [ハニーポットでよく見るユーザーエージェントについて調べた](https://k-anz.hatenablog.com/entry/user-agent/)
* [phpMyAdminを狙った攻撃観察](https://ozuma.hatenablog.jp/entry/20130916/1379332757)

通常のブラウザに偽装している場合も多いので、UserAgentだけで判断すると言うのは難しいが、やたらOSのバージョンやブラウザのバージョンが最新のものと比べて古かったりして怪しいアクセスもある。
また、`` Python-urllib/3.6 `` の様に使っているプログラム自体のUserAgentを返す場合もある。

UserAgentで判断することの有効性について研究もされているようだ。
* [マルウェア通信検知手法における User-Agentの有効性の一考察(pdf)](https://www.iwsec.org/mws/2015/pdf/IPSJCSS2015032.pdf)




### その他クローラー


AppleもSiriとSpotlightなどに活用するためにクローラーが存在するようだ。

```
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5 (Applebot/0.1)
```

* [Applebot について](https://support.apple.com/ja-jp/HT204683)
* [Apple独自のWebクローラー「Applebot」、公式に認める](https://www.itmedia.co.jp/news/articles/1505/07/news090.html)

企業や、特定の団体によるクローラーもある。
[ICC-Crawler](http://ucri.nict.go.jp/icccrawler.html)（NICT-情報通信研究機構のクローラー）

```
ICC-Crawler/2.0 (Mozilla-compatible; ; http://ucri.nict.go.jp/en/icccrawler.html) 
```


死活監視サービスPingdom

```
HTTP/1.1 Pingdom.com_bot_version_1.4_(http://www.pingdom.com/)
```

企業がやっているサービスの場合は大体、URLが付いている感じ



Alexaのクローラー

```
ia_archiver
```

Webサイトのアクセスランキング情報を提供しているAlexaのクローラー。
かつて``Wayback Machine``という世界中のWebサイトを保存しているサイトにデータを提供していたらしい。

* [Alexa（アレクサ）の クローラーのユーザーエージェント について :技術クリップ](https://aruo.net/arbk/blog/article/these_are_the_useragent_of_alexa_crawlers)
* [Wayback Machine（ウェイバックマシン）とは？過去公開されていたページをもう1度確認できる便利サービス](https://ferret-plus.com/7925)

その他、参考
[検索エンジンのロボットとユーザーエージェント、クローラー・Bot - Google、Yahoo、Bing、Baidu](http://memorva.jp/memo/website/search_engine_robot_agent.php)



# プログラム言語別のUserAgent

プログラムでHTTP通信をする時、プログラム言語で使用しているモジュールがデフォルトで出力するUserAgentがある場合もある。
プログラム言語によってUserAgentが異なると言うより、ライブラリ毎に異なってくる。
動作確認には[Play With Docker](https://labs.play-with-docker.com/)が使い捨てで環境構築できるので便利だった。

実際に試したサンプルは下記に乗せていく予定。

* [Play with Dockerを使って、色んなプログラム言語でhttp通信してみる](https://qiita.com/nightyknite/items/8e3c0944b6d9b8ef1933)

### C/C++ 

```
＃ QWebKitの場合
Mozilla/5.0 (Symbian; U; N8-00; fi-FI) AppleWebKit/534.3 (KHTML, like Gecko) Qt/4.7.4 Mobile Safari/534.3
```

プログラム言語固有のUserAgentというのがあるわけではないので、ライブラリ次第。
アプリケーションフレームワークの[Qt](https://ja.wikipedia.org/wiki/Qt)の場合、QWebKitはSymbian端末としてUserAgentが出力されるとのこと。

* [How to set user agent in Qt application](https://wiki.qt.io/How_to_set_user_agent_in_Qt_application)




### Perl

```
libwww-perl/5.805

```

[perl+apache - LWPを責めないで](http://blog.livedoor.jp/dankogai/archives/50806567.html)の記載を参考。

### Perl6


```
# LWP::Simpleの場合
LWP::Simple/0.100 Perl6/rakudo
```

* [Getting started with Rakudo Perl 6 in a Docker container](http://perl6maven.com/rakudo-perl6-with-docker)
* [LWP::Simple - a simple web client in Perl 6](http://perl6maven.com/simple-web-client)


### Ruby

```
# net/httpを使った場合
Ruby

# httpclientを使った場合
HTTPClient/1.0 (2.8.3, ruby 2.3.7 (2018-03-28))

# faradayを使った場合
Faraday v0.15.4
```

net/httpで接続した場合、「Ruby」とだけ出力された。

### Crystal

```
# http/clientを使った場合
Crystal
```

* [Ruby のように書きやすく C のように速いプログラミング言語「Crystal」](https://inside.dmm.com/entry/2018/05/30/crystal-lang)
* [HTTP::Client](https://crystal-lang.org/api/0.24.1/HTTP/Client.html)

### Python

```
# urllibを使った場合
Python-urllib/3.6

# requestsを使った場合
python-requests/2.18.4
```

### PHP

file_get_contents、curlでアクセスした場合、特に指定しなければUserAgentは出力されない。

### C# 

C#でアクセスした場合、特に指定しなければUserAgentは出力されない。

[HTTPクライアント](https://qiita.com/aosho235/items/1ad9ee05b1be62ca2c59)を全て確認はしていない。
VB.net、F#も同じと思われる。
.NetじゃなくてMonoベースのC#でも、同じく特に指定しなければUserAgentは出力されなかった。

* [monoが動くDockerイメージを作る記事を書いたら非常につまらなかったので、C#アプリをDockerで動かしてみた【KSP-DMP】](https://qiita.com/wilfrem/items/8bbeaad0880041497512)
* [Reading a web page in C#](http://zetcode.com/articles/csharpreadwebpage/)


### VBA/VBScript

```
# MSXML2.XMLHTTPの場合
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)

# WinHttp.WinHttpRequest.5.1の場合
Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)
```

VBA/VBScriptも使用するオブジェクトによって異なってくる。

* [MicrosoftのXMLHTTPオブジェクトを使用して他のWebページのデータを取得する](https://codezine.jp/article/detail/37)
* [POSTメソッド投げて、画像を取得するのは簡単だった](https://qiita.com/numa08/items/dfe1b65cf6c5d1720565)


### Javascript(NodeJS)

Javascript(NodeJS)でアクセスした場合、特に指定しなければUserAgentは出力されない。

なお、NodeJSのソフトウェアフレームワークであるElectornを使用した場合のUserAgentは以下のものが出力される

```
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) electron/1.0.0 Chrome/53.0.2785.113 Electron/1.4.3 Safari/537.36
```

### Javascript(Ajax)

Javascript(Ajax）でアクセスした場合は、実行したブラウザのUserAgentが出力される。
XHRでもFetchAPIの場合もどちらでも同じ。

### Java 

```
Java/1.8.0_66	
# HttpClientの場合
Java-http-client/11.0.3
# okHttp
okhttp/3.12.1	
```

### Kotlin

```
# khttpを使った場合
khttp/1.0.0-SNAPSHOT
```
AndroidじゃないKotlinで試した。

* [初心者向け IDEを使わないgradleとkotlin](https://qiita.com/naniwaKun/items/089143386d0ede044ec4)
* [khttp: HTTP without the bullshit](https://khttp.readthedocs.io/en/latest/)

### Groovy

```
# groovysh new URL("http://xxxx").getText() の場合
Java/1.8.0_181
````

Java上で動いているだけあって、Javaの場合と同じか。

* [groovy/docker-groovy](https://github.com/groovy/docker-groovy)
* [Groovy built-in REST/HTTP client?](https://stackoverflow.com/questions/25692515/groovy-built-in-rest-http-client)

### Processing

```
# loadStrings()を使った場合
Java/1.8.0_202
```

ProcessingはJavaとしてコンパイルされて実行するらしい。

* [Processing-Wikipedia](https://ja.wikipedia.org/wiki/Processing)
* [loadStrings()](https://processing.org/reference/loadStrings_.html)
* [プログラミング初心者でも大丈夫！Processingでデジタルアートを作ろう](https://liginc.co.jp/186614)


### Scala 

```
Dispatch/0.11.1-SNAPSHOT
```

[Scala HTTP 通信](https://www.qoosky.io/techs/7dee6e2914)を参考にDispatchを使った場合



### CFML(ColdFusion/Lucee/Railo/OpenBD)

```
# ColdFusionの場合
ColdFusion

# Luceeの場合
Lucee (CFML Engine)

# Railoの場合
Railo (CFML Engine)

# OpenBDの場合
BlueDragon
```

CFML系言語で一まとめ。
[cfdocs](https://cfdocs.org/cfhttp)のオンライン実行環境にて確認
[cfdocs](https://cfdocs.org/cfhttp)にはOpenBDの環境がない為、実際には確認できず。
[OpenBDのマニュアル](http://openbd.org/manual/?/tag/CFHTTP)には初期値が「BlueDragon」と記載あり。

* [Adobe ColdFusion](https://www.adobe.com/jp/products/coldfusion-family.html)
* [Start With Lucee](https://lucee.org/)
* [Railo](https://en.wikipedia.org/wiki/Railo)
* [OpenBD Java CFML Engine](http://openbd.org/)




### Go(Golang)

```
# net/httpの場合
Go-http-client/1.1
```

### Rust


```
# reqwestの場合
reqwest/0.9.17

# curl-rustの場合は無し

```

[curl-rust](https://github.com/alexcrichton/curl-rust)を使った場合、特に指定しなければUserAgentは出力されない。
[Mac に homebrew で Rust 開発環境を作る](https://qiita.com/a-suenami/items/dd858d803407df27ddba)を参考に環境構築。


### Elixir

特に指定しなければUserAgentは出力されないようだ。
[Play With Docker](https://labs.play-with-docker.com/)上で、[対話環境IEx](https://employment.en-japan.com/engineerhub/entry/2017/06/12/110000)を作って、[httpcクライアント](https://virviil.github.io/2018/04/06/elixir-do-you-have-http-requests-you-are-doing-them-wrong/)を実行してみた。HTTPoisonは試してない。

### Erlang

特に指定しなければUserAgentは出力されない。
ElixirはErlang上で動いているし、同じhttpcクライアントを使っているので同じ結果になるか。

* [単純なHTTPリクエストにはhttpcを使おう](https://qiita.com/melpon/items/e55a67ebd992c3662bbf)



### Clojure

```
# dakrone/clj-http の場合
Apache-HttpClient/4.5.5 (Java/11.0.1)
```
homebrewでLeiningenをインストールして、[dakrone/clj-http](https://github.com/dakrone/clj-http)を試した。Java上で動いているからJavaのバージョンが出ているのか。他のライブラリだと違う？

### Common Lisp

```
# drakma:http-requestの場合
Drakma/1.3.11 (SBCL 1.2.6; Linux; 4.4.0-96-generic; http://weitz.de/drakma/)
```

[Play With Docker](https://labs.play-with-docker.com/)上で、
[CommonLispの実行環境をDockerで構築してみた](https://light-of-moe.ddo.jp/~sakura/diary/?p=138)を参考に環境を作って、[Common Lisp入門してwebスクレイピングやろうとしてる](https://qiita.com/hasewogamer/items/3cbb9e7da522af4a7c4d)を試してみた。

### Racket

```
Racket/7.4 (net/http-client)
```

* [Racket](https://ja.wikipedia.org/wiki/Racket)
* [jackfirth/racket](https://hub.docker.com/r/jackfirth/racket)



### OCaml

```
# Cohttpを使った場合
ocaml-cohttp/1.2.0
```

* [OCamlで公共スポーツ施設の空き状況をスクレイピングするスクリプトを書いてみた](https://tech.recruit-mp.co.jp/server-side/post-14623/)
* [How do I make a simple GET request in OCaml?](https://stackoverflow.com/questions/36070455/how-do-i-make-a-simple-get-request-in-ocaml)

### D言語(DLang)

```
# std.net.curlを使った場合
Phobos-std.net.curl/2.080 (libcurl/7.47.0)
```

[Play With Docker](https://labs.play-with-docker.com/)上で、
[DockerとD言語のイメージ](https://kubo39.hatenablog.com/archive/category/Docker)で環境を作って
[std.net.curl](https://dlang.org/phobos/std_net_curl.html#.get)のhttp getの例を試してみた。

### V言語(VLang)

```
v
```

小文字の``v``とだけ出る。

* [V プログラミング言語](https://qiita.com/RkEclair/items/be3d4d9198cab32aed64)


### Lua

```
# LuaSocket
LuaSocket 3.0-rc1
```

* [DockerのAlpineコンテナにLapis(Lua + OpenResty)環境を構築する](http://kyamawork.info/post/0010/)
* [LuaSocketでHTTPクライアント](http://d.hatena.ne.jp/kitfactory/20100508/1273298359)

### Julia

HTTP packageを使った場合、UserAgentは返さなかった。

* [How To Make REST API Calls In Julia](https://codehandbook.org/make-rest-api-calls-julia/)
* [HTTP.jl Documentation](https://juliaweb.github.io/HTTP.jl/dev/)
* [Juliaで楽しくWebスクレイピング！](https://qiita.com/nezuq/items/58ad2431654b5a494543)
* [julia - Docker Hub](https://hub.docker.com/_/julia)

### Nim

```
Nim httpclient/0.19.4
```
標準ライブラリの httpclientを使った。

* [Nimをインストールしてみる](https://qiita.com/nemui-fujiu/items/8b541fb9b1f4654938f7)
* [Nim 言語で画像収集クローラーを作ってみた](https://enomotodev.hatenablog.com/entry/2017/10/12/002255)


### PowerShell

```

# Windows版の場合
Mozilla/5.0 (Windows NT; Windows NT 6.1; ja-JP) WindowsPowerShell/4.0

# Mac版の場合
Mozilla/5.0 (Windows NT; Darwin 17.4.0 Darwin Kernel Version 17.4.0: Sun Dec 17 09:19:54 PST 2017; root:xnu-4570.41.2~1/RELEASE_X86_64; ja-JP) WindowsPowerShell/6.0.0

# Linux版の場合
Mozilla/5.0+(Linux;+Linux+3.10.0-693.5.2.el7.x86_64+#1+SMP+Fri+Oct+20+20:32:50+UTC+2017;+ja-JP)+PowerShell/6.1.0

```

Mac版でも、Windows NTの文字が入ってくる。

###  Google Apps Script 

```
Mozilla/5.0 (compatible; GoogleDocs; script; +http://docs.google.com)

Mozilla/5.0 (compatible; Google-Apps-Script)

Mozilla/5.0 (compatible; GoogleApps script;+http://script.google.com/bot.html)
```

Google Apps Scriptの場合は、ローカルからアクセスするわけでは無いのでbotに近い扱いになるのか。

* [UrlFetch with custom user-agent string?](https://stackoverflow.com/questions/15067462/urlfetch-with-custom-user-agent-string)
* [Pseudo Browser with Google Spreadsheet](https://gist.github.com/tanaikech/a290509e3d3f6997d248b88763fc69b9)
* [[Google Apps Script]UrlFetchApp.fetchからのアクセス情報](https://www.ka-net.org/blog/?p=4370)


### Elm 

```
elm/0.19.0
```

動作未検証で詳しくは不明。Elm Reactor上で下記リンクのUserAgentが発生するようだが。

* [elm init, make, install and stuff inside reactor fail with HTTP PROBLEM](https://stackoverflow.com/questions/53788322/elm-init-make-install-and-stuff-inside-reactor-fail-with-http-problem)

### Dart

```
Dart/2.0 (dart:io)
```

動作未検証で詳しくは不明。dart:io websocket使用時に下記リンクのUserAgentが発生するようだが。

* [Add option to set User Agent for Websocket #32008](https://github.com/dart-lang/sdk/issues/32008)

### Haskell 

```
The Haskell Stack
```

動作未検証で詳しくは不明。Stackを使用している場合、```The Haskell Stack```が追加されるようになったようだが、元々はUserAgentは付与されていなかったらしい？

* [Stack 1.7.1 がリリースされました。](https://haskell.e-bigmoon.com/posts/2018/05-04-stack171.html)
* [Specify User-Agent to get over my company's firewall #3628](https://github.com/commercialhaskell/stack/issues/3628)

### R言語

```
# httrを使った場合
curl/7.19.6 Rcurl/1.95.4.1 httr/0.3
```

* [Failing to set the user agent via httr::user_agent
](https://stackoverflow.com/questions/23545748/failing-to-set-the-user-agent-via-httruser-agent)

### Delphi

```
Embarcadero RESTClient/<version>
```

RAD Studio上で使う場合は上記の値が初期値となるらしい。

* [REST.Client.TRESTClient.UserAgent
](http://docwiki.embarcadero.com/Libraries/Rio/en/REST.Client.TRESTClient.UserAgent)
* [Web.HTTPApp.TWebRequest.UserAgent](http://docwiki.embarcadero.com/Libraries/Rio/ja/Web.HTTPApp.TWebRequest.UserAgent)

### Prolog

```
SWI-Prolog
```

SWI-Prologを使う場合は上記の値となるらしい。

* [SWI-Prolog の http クライアントの使い方 (Get)](https://qiita.com/ekzemplaro/items/93df2414bbca2bd80bde)


### MATLAB

```
MATLAB R2012b
```

MATLABの RESTful Web サービスのWebアクセス関数だと```'MATLAB ' version```となるらしい。

* [URL の内容を文字ベクトルにダウンロード (非推奨) - MATLAB urlread](https://jp.mathworks.com/help/matlab/ref/urlread.html#btga382-1_sep_shared-UserAgent)
* [RESTful Web サービスのパラメーターの指定 - MATLAB weboptions](https://jp.mathworks.com/help/matlab/ref/weboptions.html#d117e1486346)

### Deno

```
Deno/0.42.0
```

プログラム言語とはちょっと意味合いが違うが、
``# deno http://ifconfig.io/ua`` した場合のエラーメッセージから、上記のUserAgentを使っていると判別できる。

* [Denoの登場でNode.jsの時代は終わるのか？](https://qiita.com/so99ynoodles/items/c3ba2a528052827e3b3c) 

## 各種ツール

#### wget

``` 
Wget/1.16.3 (darwin15.0.0)
```

#### curl

```
curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5
```

### Git

GitもHTTPアクセスするのでUserAgentがついている。変更可能。

```
git/2.0.0 
```

* [Gitの内側-環境変数](https://git-scm.com/book/ja/v2/Git%E3%81%AE%E5%86%85%E5%81%B4-%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0)

#### ShortLinkTranslate

トレンドマイクロ社のウイルスバスターに搭載されているTrendツールバーの「Webページ内のリンクの安全性を表示」機能が有効だと記録されるらしい。

```
ShortLinkTranslate
```

[ShortLinkTranslateというユーザエージェントのアクセスログ](http://kazukichi.jp/?p=787)


#### Microsoft Office Protocol Discovery

IEに表示された情報をExcelにコピー＆ペーストすると出力されるらしい。

```
Microsoft Office Protocol Discovery
```

* [大量の404アクセス。Microsoft Office Protocol Discovery](https://ao-system.net/note/20)


#### ahrefs

SEOツール

```
Mozilla/5.0 (compatible; AhrefsBot/5.2; +http://ahrefs.com/robot/)
````

[SEOの被リンク分析・競合調査ツール | Ahrefs(エイチレフス)](http://ahrefs.jp/)


#### semrush
SEOツール

```
Mozilla/5.0 (compatible; SemrushBot/1.2~bl; +http://www.semrush.com/bot.html) 
```

[キーワード調査や競合調査を強力サポート!!】Semrushを活用しよう！](https://www.seostyle.net/seoblog/analysis/semrush.html)


### 自動テストツール

#### Selenium 
実行しているブラウザと同じ
```
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
```

#### PlayWright
初期設定だとSafariと同じ
```
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.4 Safari/605.1.15
```
#### Puppeteer
Chromeで実行の場合、Chromeではなく、HeadlessChromeの文字列が差し込まれる
```
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/109.0.5412.0 Safari/537.36
```



# その他

## 自分のUserAgentを調べるAPI

ブラウザではなくて、プログラムやツール等でUserAgentをチェックしたい時は、
Javascriptや「[あなたの情報（確認くん）](https://www.ugtop.com/spill.shtml)」で確認というわけにはいかないので、UserAgentだけ返すAPIが欲しい。
調べたら[ifconfig.io](https://ifconfig.io/)というのがあったので、

```
curl ifconfig.io/ua 
wget http://ifconfig.io/ua -O -
```
とかで試せた。

```
curl ifconfig.io/all.json
```

と打つとIPアドレスなど他の情報も取得できる。


同様のサービスは複数ある。

```
# inet-ip.info
curl inet-ip.info/json

# ifconfig.me
curl ifconfig.me/json

# httpbin.org
curl httpbin.org/user-agent
```

* [How to Find Your Public IP Address on Linux Command Line](https://www.putorius.net/find-public-ip-address-linux-command-line.html)


## Mobile、Tablet、PC判定

UserAgentからMobile、Tablet、PCかどうか判定したいという要望があると思うが、方法として思いつくのは下記のようなパターン。

```js

if (navigator.userAgent.match(/(iPhone|iPod|Android.*Mobile)/i)) {
  // iPhone、iPod、Android(Mobileを含む)
  console.log("Mobile");
} else if (navigator.userAgent.match(/(iPad|(?!(Android.*Mobile)+)Android)/i)) {
  // iPad、Android(Mobileを含まない)
  console.log("Tablet");
} else {
  // それ以外はPC
  console.log("PC");
}
```

ただ、この場合、Kindle FireにはMobileの文字列が入っているので、Mobileとして判定されてしまう。KindleをTabletと判定したい場合、「Silk」、または「Kindle」の文字列が入ってくるのでこれを条件に入れる必要がある。
WindowsPhoneはAndroidとMobileの文字列があるのでMobileで判定される。
Androidタブレットの中にはGalaxy TAB P1000などのようにMobileが入るものも一部存在する。
スマホでもKaiOSやFireFoxOSの場合はAndroidの文字列は含まれないのでFireFoxとMobileが含まれる条件を入れる必要が出てくる。
WindowsタブレットとTouch機能付きのノートPCと区別は多分出来ない。


* [User Agent Strings and Detection - Amazon Silk](https://docs.aws.amazon.com/silk/latest/developerguide/user-agent.html)


## User-Agent parser

User-Agentから情報を取り出すものをUser-Agent parserと言うらしい。
いい感じにUserAgentからOSやブラウザなどの端末情報を抽出したい場合、結構やっている人たちがいるので、GoogleとかGithubとかでUser Agent parserで検索すると色々見つかる。

## UserAgentにUnicode（全角文字、絵文字）を使う

以下のようにUserAgentに全角文字や、絵文字を設定をするのはやめたほうがよい。

```
もじら/5.0 (😀🙈😱)
```


一般的なサイトはUserAgentにUnicode文字などの文字列が入っていることを想定していないので、誤作動してしまう可能性がある。
[RFC 2616 (HTTP 1.1)](https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html)では、header contentsは``TEXT``であることになっているが、TEXTの定義とは何かの問題がある。
UserAgentを送信するクライアント側はASCII文字のみ送信するようににして、UserAgentを受信するWebサーバー側はUnicode文字が混入することを考慮して設計するのが安全。

* [Can I use Unicode characters in HTTP headers?](https://stackoverflow.com/questions/7567154/can-i-use-unicode-characters-in-http-headers)
* [Is a unicode user agent legal inside an HTTP header?
](https://stackoverflow.com/questions/10384741/is-a-unicode-user-agent-legal-inside-an-http-header)
* [Shared Techniques wiki for the W3C Mobile Web Initative Best Practices
User-Agent String](https://www.w3.org/2005/MWI/BPWG/techs/User-Agent_String.html)
* [U+001DなどUnicode(ASCII,C0)制御文字がHeaderに含まれるとaborting requestするので除去する](https://qiita.com/khsk/items/3c98174bc6cb9b596e61)


## UserAgentは最大何桁ぐらいまであるか。

UserAgentをデーターベースに格納する場合は最大桁数が気になるところだが、
特に決まりはなさそう。それらしい情報は見つからなかった。
多くのUserAgentは大体100桁前後が多いようだ。

ASP.NETは下記の参考URLによるとUserAgentの文字数制限が512文字となっているようなので、512桁と考えるのが良いのか。

* [ASP.NET が認識できる User-Agent の長さが 512 文字に拡張されました](https://blogs.msdn.microsoft.com/d99/2010/02/16/asp-net-user-agent-512/)

Amazon MWSは500文字以上は拒否すると記載がある。

* [Amazon MWS Developer Guide » Creating your User-Agent Header](https://docs.developer.amazonservices.com/en_UK/dev_guide/DG_UserAgentHeader.html)

Internet Explorer 7のUserAgentのカスタマイズについては最大200文字を推奨となっている。

* [Stage 4: Customizing the Browser  User Agent String](https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-it-pro/internet-explorer-7/bb496341(v=technet.10)?redirectedfrom=MSDN)

E-Commerce製品のMagentoはデータベースにUserAgentを保存するのにVARCHAR(255)を推奨している。

* [Saving User Device and Browser Data
](https://docs.magento.com/mbi/data-analyst/analysis/track-usr-dev-browser.html)

ただものすごく長いものもあるかもしれない。
心配ならば、WebサーバーのHTTP headerの制限値までというという考えも。
Apache 8K、Nginx 4K-8K、IIS 8K-16K、Tomcat 8K-48K
下記の参考URLによると8000文字以上のケースはあったらしい。
あまり長いのはマトモな目的では無いと思うので無視した方が良いかもしれない。

* [How big can a user agent string get?
](https://stackoverflow.com/questions/654921/how-big-can-a-user-agent-string-get)
* [What is the maximum size of HTTP header values?
](https://www.tutorialspoint.com/What-is-the-maximum-size-of-HTTP-header-values)

## UserAgentとセキュリティ

UserAgentの出力する文字列はブラウザ側が好きなように決められるし、書き換えることも簡単に出来るので、
例えば、[あなたの情報（確認くん）](https://www.ugtop.com/spill.shtml)のように、UserAgentを画面に出力する機能があった場合、

```
UserAgent:　<script>alert(1)</script>
```
のような文字列がセットされていた場合、正しくエスケープして表示しないと、任意の処理が実行されてしまう。

* [Cross-Site-Scripting — Reflected (User-Agent)](https://hackbotone.medium.com/cross-site-scripting-reflected-user-agent-209b1505319f)



## Google ChromeがUserAgent文字列の非推奨・凍結を計画

``Google Chrome``の開発チームは1月14日、UA文字列を``非推奨``とし、``凍結``する計画を明らかにしたとのこと。

| Milestone      |    Stable date |    Action    |
|:-----------------|:------------------|:------------------|
| M81　             |  2020年3月中旬 | ``navigator.userAgent``の非推奨    |
| M83           |     2020年6月上旬 | ブラウザーのバージョンを凍結、OSバージョンを統合 |
| M85             |   2020年9月中旬 | desktop、mobileの其々の文字列を統一          |

UA文字列が無くなるわけではなく、凍結なので直ちに影響はなさそう。

UserAgentの代わりとして[User-Agent Client Hints(UA-CH）](https://wicg.github.io/ua-client-hints/)の仕様が策定中とのこと。

|  values   |  for example   |    
|:-----------------|:------------------|
| brand　 | "cURL", "Edge", "The World’s Best Web Browser"| 
| major version| "72", "3", or "28"| 
| full version  | "72.0.3245.12", "3.14159", or "297.70E04154A"|
| platform brand and version  | "Windows NT 6.0", "iOS 15", or "AmazingOS 17G"|
| platform architecture   | "ARM64", or "ia32"|
| model  | "", or "Pixel 2 XL"|
| mobileness  | ?0 or ?1|

header情報に以下のような文字列が設定される？

```
  Sec-CH-UA: "Examplary Browser 73.3R8.2H.1"
  Sec-CH-Platform: "Windows 10"
```

``Sec-CH-UA``については、Chromeの``Experimental Web Platform features``を有効にすることで確認できる。``Sec-CH-Platform``はWebサーバー側でレスポンスヘッダーの指定が必要。詳細は以下で試している。

* [User-Agent Client Hints(UA-CH)を取得する](https://qiita.com/nightyknite/items/257251b9692dff1b62be)

Chromeの対応について、Edge、Firefox、Safari(一部対応済）などのブラウザベンダーも概ね支持をしているとのことだが、
UA文字列を送信するのは、ブラウザだけでは無いし、Botや各種httpClientがどう対応していくのか。
UserAgentを分析に使っているサービスには影響が大きそう。

UserAgentを使って、モバイルかどうか判定することが当面は出来そうだが、今後はどうなるか。
[ダイナミック レンダリングを実装する](https://developers.google.com/search/docs/guides/dynamic-rendering?hl=ja)に書かれているように、ユーザー エージェント（モバイル、タブレット、パソコン）の種類に応じて異なるバージョンのページを提供する手法についてGoogleは否定的では無かったので今後はどうなっていくのか。

* [Intent to Deprecate and Freeze: The User-Agent string](https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/-2JIRNMWJ7s/yHe4tQNLCgAJ)
* [Freeze the User Agent string](https://www.chromestatus.com/feature/5704553745874944)
* [ユーザーエージェント（UA）文字列は時代遅れ？ ～「Google Chrome」で凍結・非推奨に](https://forest.watch.impress.co.jp/docs/serial/yajiuma/1229968.html)
* [Google、ChromeでUser Agent文字列を凍結する計画](https://it.srad.jp/story/20/01/17/154233/)
* [Google Chrome、ユーザーエージェントを廃止する計画を発表](https://news.mynavi.jp/article/20200117-955292/)
* [GoogleはChromeでユーザーエージェント文字列を段階的に廃止する方針](https://gigazine.net/news/20200115-chrome-phase-out-user-agent-strings/)
* [User-Agent がオワコンになりそう](https://qiita.com/il-m-yamagishi/items/331270e654530a358481)