User-Agent 文字列の変更、Chrome と Firefox が影響の軽減のために講じている戦略、ユーザーができること。
Chrome と Firefox は、数か月以内にバージョン 100 に達する予定です。これにより、ブラウザ バージョンの特定に依存してビジネス ロジックを実行するサイトで、サイトが破損する可能性があります。この投稿では、事象のタイムライン、Chrome と Firefox が影響の軽減に向けて講じている戦略、ユーザーが支援できる方法について説明します。
ユーザー エージェント文字列
User-Agent(UA)は、ブラウザが HTTP ヘッダーで送信する文字列で、これによりサーバーはブラウザを識別できます。この文字列には、JavaScript の navigator.userAgent
を使用してアクセスすることもできます。通常は次の形式になります。
<browser_name>/<major_version>.<minor_version>
たとえば、この記事の公開時点でのブラウザの最新リリース バージョンは次のとおりです。
- Chrome:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36
- Firefox:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:96.0) Gecko/20100101 Firefox/96.0
- Safari:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.2 Safari/605.1.15
メジャー バージョン 100 - 3 桁のバージョン番号
メジャー バージョン 100 は、Chrome と Firefox の両方にとって大きなマイルストーンです。また、2 桁のバージョン番号から3 桁のバージョン番号に移行する際に、ウェブサイトが破損する可能性もあります。ウェブ デベロッパーは、カスタム コードからユーザー エージェント解析ライブラリの使用まで、さまざまな手法を使用してこれらの文字列を解析し、対応する処理ロジックを決定します。User-Agent やその他のバージョン レポート メカニズムは、まもなく 3 桁のバージョン番号を報告するようになります。
バージョン 100 のタイムライン
バージョン 100 のブラウザは、まず試験運用版(Chrome Canary、Firefox Nightly)、次にベータ版、最後に安定版チャンネルでリリースされます。
ブラウザ | タイムライン |
---|---|
Chrome(リリース スケジュール) | 2022 年 3 月 29 日 |
Firefox(リリース スケジュール) | 2022 年 5 月 3 日 |
3 桁のバージョン番号が問題となるのはなぜですか?
12 年以上前にブラウザが初めてバージョン 10 に達したとき、メジャー バージョン番号が 1 桁から 2 桁に増えたため、ユーザー エージェント解析ライブラリに多くの問題が見つかりました。
遵守すべき単一の仕様がないため、ブラウザによってユーザー エージェント文字列の形式が異なるほか、サイト固有のユーザー エージェントの解析も行われます。一部の解析ライブラリには、3 桁のメジャー バージョン番号を考慮していないハードコードされた前提条件やバグが含まれている可能性があります。多くのライブラリは、ブラウザが 2 桁のバージョン番号に移行したときに解析ロジックを改善したため、3 桁のマイルストーンに達しても問題は少なくなると予想されます。Chrome チームのエンジニアである Mike Taylor が、一般的な UA 解析ライブラリに関する調査を行いましたが、問題は見つかっていません。フィールドで Chrome 試験運用版を実行したところ、いくつかの問題が見つかりました。現在、解決に向けて取り組んでいます。
ブラウザはどのように対応していますか?
Firefox と Chrome の両方で、ウェブサイトの不具合を検出するために、現在のバージョンのブラウザがメジャー バージョン 100 であると報告するテストが実施されています。これにより、いくつかの問題が報告されました。そのうちのいくつかはすでに修正されています。これらのテストは、バージョン 100 のリリースまで継続されます。
また、Stable チャンネルへのバージョン 100 のリリースによってウェブサイトに想定以上の損害が発生した場合に備えて、バックアップ緩和戦略も用意されています。
Chrome の軽減策
Chrome のバックアップ プランでは、フラグを使用してメジャー バージョンを 99 に固定し、ユーザー エージェント文字列のマイナー バージョン部分に実際のメジャー バージョン番号を報告します(コードはすでにリリースされています)。
User-Agent 文字列で報告される Chrome のバージョンは、<major_version>.<minor_version>.<build_number>.<patch_number>
というパターンに従います。
バックアップ プランが使用されている場合、User-Agent 文字列は次のようになります。
99.101.4988.0
また、Chrome では、文字列のマイナー バージョン部分で 3 桁の値を報告しても破損しないようにするテストも実施しています。これは、Chrome ユーザー エージェント文字列のマイナー バージョンが長い間 0 を報告していたためです。Chrome チームは、報告された問題の数と重大度に基づいて、バックアップ オプションに頼るかどうかを決定します。
Firefox の緩和策
Firefox では、戦略は破損の重要性に応じて異なります。Firefox にはサイト介入メカニズムがあります。Mozilla のウェブ互換性チームは、このメカニズムを使用して Firefox で不具合のあるウェブサイトをホットフィックスできます。Firefox の URL バーに about:compat
と入力すると、現在修正中の項目を確認できます。特定のドメインでメジャー バージョンが 100 のサイトでエラーが発生した場合は、代わりにバージョン 99 を送信することで修正できます。
破損が広範囲にわたる場合は、メジャー バージョン番号を凍結できます。さまざまな戦略があり、それぞれに長所と短所があります。Mozilla は、実際のバージョン番号をマイナー バージョン番号として送信したり、文字列をそのまま完全に凍結したり、実際のバージョン番号を他のパラメータで送信したりできます。
User-Agent 文字列を複雑にするすべての戦略は、エコシステムに大きな影響を与えます。今後このような動作が発生しないように、一緒に解決していきましょう。
何かできることはないか?
Chrome と Firefox Nightly では、バージョンを 100 として報告し、発生した問題を報告するようにブラウザを設定できます。
メジャー バージョンを 100 として報告するように Chrome を構成する
chrome://flags/#force-major-version-to-100
に向かいます。- オプションを
Enabled
に設定します。
メジャー バージョンを 100 として報告するように Firefox Nightly を構成する
- Firefox Nightly の [設定] メニューを開きます。
- 「Firefox 100」を検索し、[Firefox 100 User-Agent 文字列] オプションをオンにします。
テストと報告
- ウェブサイトのメンテナンス担当者は、Chrome と Firefox 100 でウェブサイトをテストしてください。User-Agent 解析コードとライブラリを確認し、3 桁のバージョン番号を処理できることを確認します。現在破損しているパターンをいくつかまとめました。
- ユーザー エージェントの解析ライブラリを開発している場合は、100 以上のバージョンを解析するテストを追加します。初期テストでは、最近のバージョンのライブラリで正しく処理できることが示されています。ただし、ウェブには長い歴史があるため、古いバージョンの解析ライブラリを使用している場合は、問題がないか確認し、最終的にはアップグレードする必要があります。
- ウェブを閲覧しているときに、メジャー バージョン 100 に関する問題に気付いた場合は、webcompat.com で報告してください。