調べて分かる道具箱

ユーザーエージェントの確認

いま見ているブラウザの名乗り

画面がついたら読みます。JavaScript が動いていないと、ここは空のままです。

読んでいるのは navigator.userAgent の1行だけです。この文字列も、下に貼り付けた文字列も、お使いのブラウザの中だけで処理します。

サーバーのログや、開発者ツールに出ていた名乗りを、そのまま貼り付けられます。貼り付けた文字列は、この画面の中だけで読みます。

見本を入れる

文字が1つも入っていません。ブラウザの名乗りを貼り付けるか、下の見本から選んでください。

整理された形で聞く方法もあります

長い1本の文字列とは別に、navigator.userAgentData という、項目ごとに分けて答える仕組みがあります。ただしこれはChromium の系統にしかありません。 Firefox と Safari には無いので、 そこでは下に「ありません」と出ます。

この仕組みがあるか
画面がついたら聞きます
名乗っている名前
画面がついたら聞きます
スマホかどうか
画面がついたら聞きます
OS の名前
画面がついたら聞きます

よくある質問

貼り付けた名乗りは、どこかに送られていますか?

送っていません。読むのも数えるのも全部あなたのブラウザの中で終わり、結果を外へ出す処理は1行も書いていません。サーバーのログに残っていた名乗りには、その人が使っている機械のことが書かれています。他人のものを貼る場所だからこそ、送らない作りにしてあります。確かめ方もあります。キーボードのF12(または右クリックから「検証」)で開発者ツールを開き、「ネットワーク」を選んだまま貼り付けてください。新しい通信が1本も増えないはずです。

「Safari」と書いてあるのに Safari ではない、とはどういうことですか?

ChromeもEdgeも、名乗りの中にSafariという語を入れているからです。MDNはこれを「互換性のために足している語」と説明していて、「ChromeはChromeとSafariの両方を名乗る」「Safariを見分けるには、Safariがあって、なおかつChromeが無いことを見る必要がある」と書いています。なぜその語だったのかまでは書かれていないので、このページでも理由は書きません。分かっているのは、いま入っていることと、だから語の有無では見分けられないことの2つです。ここでは語を探すのではなく、名前の並びを決まった順に見ています。

Androidの「10」と「K」は本当の値ではないのですか?

はい、どちらもChromeが置いた固定の文字です。Chrome 110(2023年2月)から、Androidの版はどの端末でも10、機種の名前はKの1文字になりました。Kという機種は存在しません。もとはPixel 7のような名前がそこに入っていました。追跡の手がかりを減らすためだとGoogleが書いています。ややこしいのは、本当にAndroid 10の端末もあることです。この文字列だけでは、どちらなのか見分けられません。

なぜMacは、新しくても10.15と名乗るのですか?

止められているからです。WebKit(Safariの中身)に「macOSが知らせる版を10.15の系列までに制限する」という記録が残っていて、理由は「世の中にはUAを見て判定するひどいコードがあるので、落ち着くまでは今の版のまま名乗ることにしよう」というものでした。あとから「UAなどからmacOSの中身が分かってしまうのを減らすのが長い目での狙い」とも書き足されています。Firefoxも87から同じように10.15で止めています。判定するコードのひどさが、番号を止めさせた形です。

では、ブラウザの種類はどうやって調べればいいのですか?

種類を調べないのが今の作法です。知りたいのはたいてい「そのブラウザの名前」ではなく「使いたい機能が動くか」なので、その機能があるかを直接調べます。MDNも、名乗りを読み取るやり方は「確実にやるのがとても難しく、しばしばバグの原因になる」と書いて、機能があるかを調べるほうを勧めています。このサイトの「あなたのブラウザは何ができるか」が、実際にそれをやっているページです。

名乗りを書き換えることはできますか?

できます。ブラウザの拡張機能で別のブラウザのふりをさせられますし、プログラムから通信するときは好きな文字列を書けます。MDNも「ブラウザやユーザーエージェントは、日常的に別のブラウザのふりをしたり、複数のブラウザの情報を混ぜたりする」と書いています。だからこのページは「このUAは○○です」とは書きません。書いてあるのは「そう名乗っている」というところまでです。

ブラウザは、行き先のサーバーに自分の名前を書いた1行を送っています。 それを読んで、そこから分かることと分からないことを並べます。貼り付けた名乗りも読めます。

この1行の一部は、わざと同じ文字に揃えてあります

ここがこのページのいちばん大事なところです。名乗りに書いてある値のうち、いくつかは端末を調べて書いたものではなく、あらかじめ決まった文字です。 端末ごとに変わると、それが人を見分ける手がかりになってしまうので、わざと同じ文字に揃えて、見分けられないようにした結果です。

だから、書いてある値をそのまま読むと間違えます。「Android 10 の端末から来ました」も、「この人は macOS 10.15 を使っています」も、 いまはどちらも成り立ちません。それが本当の値なのか、消した跡に置いてある文字なのかは、受け取った側には区別が付きません。

Chrome は、Android の版を 10、機種の名前を K にしました

K という名前の機種はありません。もとはPixel 7のような機種の名前がそこに入っていましたが、 Chrome 110(2023年2月)から、版は 10、機種は K の1文字に置き換わりました。 Google は理由を「完全な名乗りは、毎回のリクエストでブラウザの細かい情報を渡してしまい、 サイトをまたいだ追跡を成り立たせている大きな原因になっている」と書いています。

置き換えは版と機種だけではありません。版の細かい番号も、いつも 0.0.0 になります。 MDN によれば143.0.12.45 は143.0.0.0と書かれます。 名乗りの末尾に並んでいる 0 は、値ではなく消した跡です。

Windows も同じで、Chrome が使う固定の文字列はWindows NT 10.0; Win64; x64 です。この文字列から Windows 10 と Windows 11 を見分けることはできません。

Mac が 10.15 で止まっているのは、判定するコードがひどかったからです

これがいちばん面白いところです。新しい Mac でも、名乗りの中の macOS の版は10.15 のままです。WebKit(Safari の中身)に「macOS が知らせる版を 10.15 の系列までに制限する」(新しいタブで開きます)という記録が残っていて、そこに書かれた理由がこれです。

「世の中はまだ macOS 11.0 を名乗りに入れる準備ができていないらしい。 ウェブに転がっている、うんざりするような UA 判定のコードのせいだ。 当分は今の版のまま名乗ることにしよう。」

つまり、版を上げると、それを読み取っている側のコードが困るので、 上げるのをやめた、という話です。 あとから同じ記録に「長い目での狙いは、名乗りなどから macOS の中身が分かってしまうのを減らすことだ」とも書き足されました。Firefox も 87 から同じように 10.15 で止めています。名乗りを読み取る人が多すぎて、名乗るほうが数字を止めたわけです。

どのブラウザも、先頭で「Mozilla」と名乗ります

上の欄に何を入れても、たいていMozilla/5.0から始まります。 Chrome でも Safari でも Edge でもそうです。 これはMozilla と関わりがあるという意味ではありません。 MDN は「Mozilla に合わせてあることを示すためのしるしで、歴史的な事情から、 いまはほとんどのブラウザがこれを送っている」と書いています。

同じことがSafari の語にも起きています。 上の見本を見比べると分かりますが、Chrome の名乗りにも Safari が入っています。 Edge にいたっては、Chrome の名乗りの後ろに1つ足しただけの形です。 だから「Safari の語がある=Safari」も「Chrome の語がある=Chrome」も成り立ちません。 MDN も「Safari を見分けるには、Safari があって、なおかつ Chrome が無いことを見る必要がある」(新しいタブで開きます)と書いています。

like Geckoも同じ種類の語です。Gecko は、Firefox がページを絵にするときに使う部分(描画エンジン)の名前で、「Gecko のように動く」と書いてあるだけですが、 これを Gecko と読み違えるコードがあります。 MDN が「Gecko かどうかは、Gecko と rv: の両方があるかで見よ」とわざわざ書いているのは、そのためです。 このページの読み取りも、その通りに作ってあります。

MDN は、Chrome が「互換性のために」KHTML, like Gecko や Safariといった語を足している、と書いています。なぜその語でなければならなかったのかまでは書かれていません。 もっともらしい昔話はいくつも見つかりますが、出どころで確かめられなかったので、ここには書きません。 分かっているのは、いまその語が入っていることと、だから語の有無で見分けられないことの2つです。

だから「名乗りで判定しない」が、いまの作法です

MDN は、名乗りを読み取って動きを変えるやり方について「確実にやるのがとても難しく、しばしばバグの原因になる」と書いています。 書き換えられるうえに、上で見たとおり正直に書いてある部分のほうが少なくなってきたからです。

代わりにするのは、使いたい機能が、そのブラウザにあるかを直接調べることです。 名前を当ててから「たぶん動くはず」と決めるのではなく、動くかどうかをその場で聞くほうが、名前を知る必要すらありません。

それを実際にやっているのが、このサイトのあなたのブラウザは何ができるかです。 名乗りを1文字も見ずに、40個近い機能について「あるか・ないか」を並べます。このページと向かい合わせの関係になっているので、続けて見てみてください。

貼り付けた名乗りは、お使いのブラウザの中だけで処理します

サーバーのログに残っていた名乗りを調べたい人のために、貼り付けても読めるようにしてあります。 名乗りには、その人が使っている機械のことが書かれています。他人のものを貼る場所だからこそ、送らない作りにしました。

信じてもらう必要はありません。開発者ツールの「ネットワーク」を開いたまま貼り付ければ、 通信が1本も増えないことを自分で確かめられます。 読んだものを保存もしていないので、ページを閉じれば消えます。

ひとつ約束していないことがあります。 このページは「この名乗りは○○です」とは決して書きません。 名乗りは書き換えられるので、断定した時点で嘘になりえます。「そう名乗っています」までが、この文字列から言えることのすべてです。

見本に使っている名乗り

上のボタンで入る5本は、自分で作ったものではありません。 MDN と Chrome の資料に例として載っているものを、そのまま置いています。 それらしい文字列を自分で組み立てると、実際には存在しない名乗りを「これが Chrome です」と教えることになるからです。

  • Android の Chrome ── 版が 10、機種が K。どちらも固定の値で、本当の端末の話ではありません。
  • Mac の Chrome ── Safari の語が入っていますが Chrome です。macOS の版も止められています。
  • Mac の Safari ── 本物の Safari。版は Version のほうに書かれています。
  • Windows の Edge ── Mac の Chrome の名乗りと、後ろの1つと OS 以外が同じです。
  • Mac の Firefox ── Safari の語も KHTML もありません。20100101 は日付ではなく固定の文字です。

出どころ: Android の版と機種を固定した件はGoogle「Prepare for Chrome's user-agent reduction」(新しいタブで開きます)、固定される文字列の一覧と版の末尾が 0.0.0 になる件はMDN「User-Agent reduction」(新しいタブで開きます)、macOS の版を止めた理由はWebKit Bug 216593(新しいタブで開きます)、Mozilla の語と Safari の語と like Gecko の扱いはMDN「Browser detection using the user agent」(新しいタブで開きます)と MDN の User-Agent の項から取っています。確かめられなかったことは書いていません。読み取りの中身と見本は core/ua.ts にあり、 単体テストが「Chrome の名乗りを Safari と読まないこと」を見張っています。