モバイル系ブラウザのUA文字列

何の役に立つか自分でもさっぱりわからないと思いながら、ここ1年半ほどGoogle Spreadsheetsにブラウザのアップデート情報を記録している。

できるだけ情報を入れてるけど、抜けも結構ある。ChromeはStable Channelが入ったマシンがないので細かい情報はないし、Firefox ESRとかは要らんだろうと思って入れてない。

さて、もともとデスクトップだけだったんだけど、最近Chrome for AndroidOpera Beta(Chromiumベース)が出たので追加し始めた。Opera Betaには chrome://versionみたいなのがなくてしんどい……

それで、UA文字列にバリエーションがけっこうあって複雑だなあと思ったので、ちょっと書いてく。

スマートフォンとタブレット

まず、スマートフォンとタブレットでUA文字列が少し違う。

Chrome for Android, Firefox for Android

Android版Chromeだと、スマートフォンにはMobileというトークンが入る。タブレットでは取れる。

Android版Firefoxだと、スマートフォンMobile, タブレットにはTabletというトークンが入る。ネットブック的なAndroid端末(あるんだ)だとトークンがなくなるらしい。

iPhone, iPad

iOSのSafariだとプラットフォームトークンがそれぞれiPhone,iPad,iPodになる。

Mobileというのもあるけれど、こちらはどのSafariにもあって、文字列の後にMobile/XXXXXと、ビルド番号がついている。タブレットとモバイルを区別するものとして設けられているわけではない。

Windows Phone 8, Windows 8/RT

IE10は、Windows Phone 8とWindows 8/RTとOSが違うけど、UA文字列の構成はそんなに変わらない。Windows Phone 8のIE10ではIEMobileがつく。あと、Windows Phoneってプラットフォームトークンもある。

一方タブレットなんだけれど、Windows 8/RTのIE10ではタブレットとデスクトップを区別するトークンがUA文字列にない。Windows 8世代の製品はデスクトップでもタブレットでもタッチインターフェースを備えるから、区別っていう概念がないんだろう。

ただ、タッチインターフェースを備えている場合、Touchというトークンがつく。これはWindows Phone 8でもつく。ただ、タッチを備えていてもWindows 7のIE10にはつかない。

「デスクトップ版」のUA

これで終わりかとおもいきや、もう一つ種類がある。「デスクトップ版」のUA文字列というもの。モバイルなのになんだそれ。まあデスクトップセントリックなサイトが多すすぎる一方でしょうもないスマートフォン版のサイトも多いんだろうけれども……

Chrome, Firefox

AndroidChrome, Firefoxには “Request Desktop Site” なんてメニュー項目がある。これを選択すると、UA文字列がデスクトップのものになる。

Nexus 7でChrome BetaとAuroraのUA文字列をそれぞれチェックしてみた。まずはChrome Beta。

// Default
Mozilla/5.0 (Linux; Android 4.2.2; Nexus 7 Build/JDQ39) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.40 Safari/537.31

// "Desktop"
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.40 Safari/537.31

続いてAurora。

// Default
Mozilla/5.0 (Android; Tablet; rv:21.0) Gecko/21.0 Firefox/21.0

// "Desktop"
Mozilla/5.0 (X11; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0

Opera Beta

Opera Betaでは設定からMobile/Desktopを選べるようになっている。これグローバルに変わるんだよね、ちょっと面倒だと思うけど……
UAはこちら。

// Default
Mozilla/5.0 (Linux; Android 4.2.2; Nexus 7 Build/JDQ39) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.123 Safari/537.22 OPR/14.0.1025.53463

// "Desktop"
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.123 Safari/537.22 OPR/14.0.1025.53463

結構すっきりしていたOperaUAChromiumベースになったせいでだいぶカオスに……
あとOperaの識別子がOPRになっている。これまでのOperaと区別するせいかな。

どうでもいいけど、「Chrome/Chromium/WebKitベースのOpera」とか「新しいOpera」とか長いので、CrOperaもしくはCrOpと読んでいる。くろぺら、くろっぷ。

ええっと、共通して言えるのは、どれもLinux版のUAになる。まあAndroidだから、そうか。

Opera Beta (Off-Road mode)

さて、Opera BetaはさらにもうひとつUAが文字列がある。Opera Betaにある “Off-Road mode” を選択すると、Opera Miniレンダリングに切り替わるので、それでUAが変わる。

Opera/9.80 (Android; Opera Mini/14.0.1025/29.3054; U; en) Presto/2.8.119 Version/11.1010

バージョンは14になったけど、UA文字列はほとんどOpera Miniと同じ。

Opera/9.80 (Android; Opera Mini/7.5.32193/29.3054; U; en)
Presto/2.8.119 Version/11.10

これを見るにPrestoベースのままだけど、WebKitベースのものに置き換わるという話があるので、このモードのUA文字列もじきに変わるのかな。

番外編:Firefox OS

ちなみに、Firefox OSは今のところえらくすっきりしている。

Mozilla/5.0 (Mobile; rv:18.0) Gecko/18.0 Firefox/18.0

タブレットの展開は発表されてないけれど、もし出たらMobileTabletになるのかな。

ただ、ちょっとそれも怪しい。というのもUA文字列でスマートフォンの検出をするときにはiPhoneとかAndroid+Mobileで引っ掛けているので、これだとFirefox OSではスマートフォン版Webサイトに飛ばない。

実はもともとAndroidを含んでいたんだけど、Android端末固有のメッセージを出すためにこのトークンが使われていたりしていて、それではFirefox OSで困るので Androidを外す決定がされていた。ただサイト互換性的なところが多いので、いま頑張ってエヴァンジェライズしてるところらしい。入れないと困るけど、入れても困ると。


いやはやカオスだ。とはいえFeature Detectionだけではというケースも往々にしてあるし、サイトのエミュレーションをする時はUA文字列判定のほうが楽なこともあったりするので、UA文字列に頼るなともいいづらい。面倒だなあ。

あんまそういうのに拘らないサイト、拘らない空気作りをしていきたいよ。