やじうまの杜

ユーザーエージェント(UA)文字列は時代遅れ? ~「Google Chrome」で凍結・非推奨に

早ければ「Google Chrome 81」から警告

“Google グループ”におけるディスカッション

 Webブラウザーの種類やバージョン、プラットフォーム(OS)などを特定するために使われている“ユーザーエージェント(UA)文字列”。Web開発者にとっては馴染み深いものですが、これを使うのはもう時代遅れとなりそうです。「Google Chrome」の開発チームは1月14日、UA文字列を非推奨とし、“凍結”する計画を明らかにしました。

 UA文字列とは、アクセス先のWebサーバーやスクリプトにWebブラウザー(UA)の情報を伝えるもの。たとえば、先日正式リリースされた新しい「Microsoft Edge」の場合、UA文字列は以下のようになっています。

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

 Webブラウザーのバージョンが“79.0.309.65”であること、OSがWindows 10(Windows NT 10.0)であることなどがわかりますね。こうした情報を活用して、Webサーバーやスクリプトはデバイスに応じて最適なWebサイトを出力するというわけです。

「Chromium」系ブラウザーの場合、UA文字列は“about:version”で確認できる

 一方で、このUA文字列はいくつか問題も抱えています。

 たとえば、UA文字列は特定のAPI(機能)がサポートされているかどうかを判定するために利用されることがあります。「Google Chrome」ではサポートされているけれど、「Internet Explorer」では利用できないAPIを使いたい場合、「IE」であるかどうかを判定し、「IE」では特定の機能を利用できないようにする……ということが一昔前には多く行われてきました。

 しかし、このやり方ではWebブラウザーのアップデートでAPIがサポートされたとしても、Webサイトが改修されない限り新しい機能が使えません。現在ではUAを判別するのではなく、APIが使えるかどうかを判定するべきとされていますが、いまだに古い方法が用いられていることが少なくないのが現実です。

 また、より悪質なケースとしては、自社が有利になるよう、他社製のWebブラウザーを排除するためにUAの判別が用いられる場合が挙げられます。Webブラウザーはちゃんと機能を実装しているにもかかわらず、Webサーバーの都合で正常に動作しないというのは何とも理不尽な話ですよね。

 そのため、こうしたUA判別を回避するため、UA文字列の変更を余儀なくされることも少なくありません。直近では、非互換サイトに対応するため「Vivaldi」でUA文字列の変更が行われたのが記憶に新しいです。前述の新「Edge」のUA文字列が“Mozilla/5.0”や“AppleWebKit”、“KHTML, like Gecko”といった一見無関係な要素を含む非常に複雑なものになっているのも、UAの変更合戦のなれの果てといえます。UA文字列に含まれる“Edg”はタイポではなく、旧「Edge」(EdgeHTML)と誤解されてWebサービスにブロックされてしまうのを防ぐため。なんとも涙ぐましい努力です。

 そして、とくに近年、問題となっているのが“フィンガープリンティング(fingerprinting)”です。フィンガープリンティングとは、UA文字列などから得られる断片的な情報を継ぎはぎして、ユーザーを特定する“指紋”データを生成すること。これがあればWebサイトをまたいで(クロスサイト)ユーザーの行動を追跡することも可能で、プライバシー上大変問題となっています。

 このように、UA文字列はいくつもの問題を抱えています。そこで「Google Chrome」の開発チームはUA文字列を廃止する考え。とはいえ、まったく無くしてしまっては互換性の問題が生じるので、UA文字列の機能そのものは残し、内容を“凍結”することになりそうです。Web開発者向けにはデベロッパーコンソールでUA文字列が“非推奨”であると警告し、利用しないように呼び掛けるとのこと。

 具体的な実施のタイムラインは、以下が提案されています。

  • Google Chrome 81(2020年3月中旬):“navigator.userAgent”によるUA文字列の取得を非推奨とする
  • Google Chrome 83(2020年6月初め):UA文字列のうち、ブラウザーのバージョンを凍結し、OSのバージョンを統一する
  • Google Chrome 85(2020年9月上旬):UA文字列を統一

 モバイル版ではデバイスの画面サイズを判定するためにUA文字列を利用しているケースが少なからずあり、変更の影響が大きくなるため、画面サイズごとに典型的なUA文字列がそれぞれ用意されるかもしれません。

 同様のことは「Safari」でも試みられたことがありますが、最大のシェアを持つ「Google Chrome」で実施されれば、UA文字列の排除が加速するかもしれませんね。UA文字列の代わりとして“UA-CH(User-Agent Client Hints)”という仕様が策定中なので、Web開発者は今からチェックしておくべきでしょう。