1. 概要
2020年1月14日にGoogleが「Chrome」でUser Agent文字列の利用を段階的に縮小していく計画を発表しました。
User Agentが固定化されるため、従来行ってきたUser Agentを用いた、ブラウザ種別やバージョンの判定ができなくなります。
代わりに、今後は「User-Agent Client Hints」という新たな仕組みに置き換えられることが検討されています。
*調査中のため、不正確な情報が記載されている恐れがあります。
2. User Agent文字列固定化のスケジュール
以下のスケジュールで段階的にUser Agent文字列固定化が進む予定でしたが、最新の状況では、COVID-19の影響及びUA-CH機能に評価期間を設ける目的で、UA凍結計画は2021年以降に延期されています。
Chromeバージョン(リリース時期) | 対応内容 |
---|---|
Google Chrome 81(2020年3月中旬) | navigator.userAgent によるUAの取得が非推奨となる(navigator.userAgentを実行するとコンソールに警告が出るようになる。) |
Google Chrome 83(2020年6月上旬) | ブラウザバージョンやOSバージョンなど、UserAgent文字列の中で後方互換性を損わずに固定できる部分を凍結したり、統一される。 |
Google Chrome 85(2020年9月中旬) | UserAgent文字列を統一。デスクトップブラウザ用のUserAgentかモバイル用UserAgent文字列のいずれかしか取得できなくなる。 |
3. 対応策
User Agent文字列でサイトの表示を変更していたりする場合、今後は「User Agent Client Hints」を利用する必要があります。
*なお、過去のブラウザのUser Agentが変更されないので、
「User Agent Client Hints」は以下の2つの利用方法があります。
1.ブラウザ上で取得する。
2.サーバーのhttpリクエストヘッダで取得する。
3.1. ブラウザでの「User-Agent Client Hints」の利用方法
navigator.getUserAgent
関数により、ブラザやOSの情報を取得することが可能となります。
*2020/2/17時点のChrome 80では、chrome://flags
で「Experimental Web Platform features」のオプションを有効にする必要があります。
navigator.getUserAgent
関数はPromiseの関数なのでawaitで利用します。
Mac版Chrome 80で取得すると以下の結果となります。「architecture」や「model」の項目に値が入っていませんが、今後、これら項目にも値が設定されるのかもしれません。
const user_agent = await navigator.getUserAgent()
{
architecture: ""
brand: "Google Chrome"
model: ""
platform: "Mac OS X"
version: "80.0.3987.106"
}
- Brand
- The user agent’s brand.
- Platform
- The user agent’s platform brand and version.
- Architecture
- The user agent’s platform architecture.
- Model
- The user agent’s model.
- mobile
- The user agent’s mobileness.
3.2. サーバでの「User-Agent Client Hints」の利用方法
今後、執筆予定。
Chrome84(beta)では取得可能なUA-CH項目が下記通りです。
項目名 | 説明 | 例 |
---|---|---|
sec-ch-ua | ブラウザのブランド及びメジャーバージョン | ... "Google Chrome";v="84" |
sec-ch-ua-arch | CPUアーキテクチャ | ARM64 |
sec-ch-ua-platform | OS名 | Mac OS X |
sec-ch-ua-model | デバイスモデル | Pixel 2 XL |
sec-ch-ua-mobile | モバイルか否か | ?0 |
sec-ch-ua-full-version | UAビルドバージョン | 84.0.4147.30 |
sec-ch-ua-platform-version | OSバージョン | 10_15_4 |