モバイル系ブラウザのUA文字列
何の役に立つか自分でもさっぱりわからないと思いながら、ここ1年半ほどGoogle Spreadsheetsにブラウザのアップデート情報を記録している。
できるだけ情報を入れてるけど、抜けも結構ある。ChromeはStable Channelが入ったマシンがないので細かい情報はないし、Firefox ESRとかは要らんだろうと思って入れてない。
さて、もともとデスクトップだけだったんだけど、最近Chrome for AndroidとOpera Beta(Chromiumベース)が出たので追加し始めた。Opera Betaには chrome://versionみたいなのがなくてしんどい……
それで、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
Android版Chrome, 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
結構すっきりしていたOperaのUAがChromiumベースになったせいでだいぶカオスに……
あと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
タブレットの展開は発表されてないけれど、もし出たらMobileがTabletになるのかな。
ただ、ちょっとそれも怪しい。というのもUA文字列でスマートフォンの検出をするときにはiPhoneとかAndroid+Mobileで引っ掛けているので、これだとFirefox OSではスマートフォン版Webサイトに飛ばない。
実はもともとAndroidを含んでいたんだけど、Android端末固有のメッセージを出すためにこのトークンが使われていたりしていて、それではFirefox OSで困るので Androidを外す決定がされていた。ただサイト互換性的なところが多いので、いま頑張ってエヴァンジェライズしてるところらしい。入れないと困るけど、入れても困ると。
いやはやカオスだ。とはいえFeature Detectionだけではというケースも往々にしてあるし、サイトのエミュレーションをする時はUA文字列判定のほうが楽なこともあったりするので、UA文字列に頼るなともいいづらい。面倒だなあ。
あんまそういうのに拘らないサイト、拘らない空気作りをしていきたいよ。