GoogleChromeが「ユーザーエージェント非推奨」にした理由。複雑怪奇な Webブラウザのユーザーエージェントの世界

GoogleChromeが「ユーザーエージェント非推奨」にした理由。複雑怪奇な Webブラウザのユーザーエージェントの世界

Gerd Altmann via Pixabay

◆Webブラウザのユーザーエージェント、Google Chrome が非推奨に

 1月の下旬に、Webブラウザのユーザーエージェントの話題が流れてきた。「Google Chrome」でユーザーエージェントが非推奨にされ、段階的に凍結されるそうだ(参照:Google グループ、窓の杜)。

 Web業界にいる少なからずの人が「あー、まあ分かる」と思ったかもしれない。Webブラウザのユーザーエージェントを見たことがある人は、「これは、さすがに駄目だろう」と感じていただろう。

 Webブラウザのユーザーエージェントは、妥協と迎合の産物だった。それは魔窟であり、Webブラウザの負の遺産だった。Webブラウザのユーザーエージェントを「素晴らしい物」と言う人がいれば耳を疑う。現実問題として、そう言う人はいないのではないか。

 こうした温度感は、Webページを閲覧しているだけの人には分かりにくいものだ。しかし、Webブラウザを迎え入れる側の、サーバーサイドの開発を何らかおこなったことがある人には実感できるだろう。

 ユーザーエージェントがなぜ魔窟であり、負の遺産なのか。そうした、ユーザーエージェントのあれこれについて、今回は書こうと思う。

◆ユーザーエージェントとは、そもそも何なのか

 そもそも、Webブラウザのユーザーエージェントとは何なのか。そこから話をしようと思う。

 ユーザーエージェントは「利用者の代理人」という意味である。インターネットにおけるユーザーエージェントは、ユーザーの代わりにサーバーからデータを取得して処理をおこなうソフトウェアのことを指す。

 多くの人が利用しているWebブラウザは、ユーザーエージェントのひとつである。しかし、それだけでなく、多種のユーザーエージェントがインターネットには存在している。

 たとえばネットから情報を収集する、クローラーあるいはロボットと呼ばれるソフトウェアがある。Google などの検索エンジンが情報を保持しているのは、ネットから情報を収集するプログラムを使っているからだ。そうしたソフトウェアも、ユーザーエージェントのひとつである。

 Webブラウザを含む各種ユーザーエージェントは、サーバーにアクセスする際に、名乗りを上げる。

「私は、○○というWebブラウザです」

「私は、△△というロボットです」

 サーバー側では、その名乗りを見て、「なるほど、□□が来たか。じゃあ、こういった処理をしよう」と、返すデータを変えたりする。

 この名乗り――クライアントのソフトウェアが、サーバーに送信する文字列――も「ユーザーエージェント」と呼ばれる。今回 Google Chrome が非推奨にするというユーザーエージェントは、こちらの意味のユーザーエージェントになる。

 この名乗りとしてのユーザーエージェントは、どのように活用されるのか。

 ユーザーエージェントを受け取ったサーバーは、この文字列を見て、返すデータを変えたりする。たとえば、パソコンからのアクセスと、携帯電話からのアクセスでは、別の内容を返す。そうしたことが、ユーザーエージェントを確認することで実現できる。

 また、クローラーからWebページが要求された場合に、Webブラウザ向けとは違う情報を返すといったこともおこなわれる。

 それ以外では、アクセスしてきた機器によって返すデータを変えることもできる。たとえば、特定のゲーム機の内蔵ブラウザからアクセスする場合は、シンプルな見た目のページを返すといった使い方ができる。

 ユーザーエージェントの文字列は、このように意味のある使い方をすれば、有用な機能だと言える。

◆WebサイトとWebブラウザの攻防。ほぼ全てのWebブラウザが行う「成りすまし」

 しかし実際のユーザーエージェントは、歴史的な経緯でぐだぐだになっていた。特に問題となっていたのはWebブラウザだ。

 各種Webブラウザは、歴史的にシェア争いを続けてきた。「Netscape Navigator」「Internet Explorer」「Google Chrome」と覇権は次々と変わっていった。それ以外にも無数のWebブラウザが誕生し、シェアの争奪戦を繰り広げた。その過程で、後発のWebブラウザは、クリアしなければならない問題があった。

 サーバー側では、ユーザーエージェントを見て、送り返すデータを変えることがある。新しいWebブラウザが登場した際、自身の名前をそのままユーザーエージェントとしてサーバーに送っても、「そんなWebブラウザは知らない」と言われて、先行のWebブラウザと同じデータがもらえない。

 ではどうするか。後発のWebブラウザは、ユーザーエージェントで、先行のメジャーなWebブラウザの名前を名乗り、そこに自分の名前を加えていった。そうしたことが繰り返されることで、ユーザーエージェントはどんどん長大な文字列になっていった。

 例を示そう。まずは「Google Chrome」だ。

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

 「Mozilla」を名乗り、「AppleWebKit」を名乗り、「Safari」も名乗っている。もちろん「Google Chrome」は、「Mozilla」でも「AppleWebKit」でも「Safari」でもない。

 ちなみに、KHTML は、KDEプロジェクトにより開発されているHTMLレンダリングエンジンで、Konquerorのために開発されたものだ。Gecko は、元々 Netscape 系で、のちに Firefox 系で使われたHTMLレンダリングエンジンになる。

 これらはどれも「Google Chrome」とは何の関係もない。本来ならば「Chrome/79.0.3945.130」だけでよいはずである。

 次に新版の「Microsoft Edge」も見てみよう。

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

 「Mozilla」を名乗り、「AppleWebKit」を名乗り、「Chrome」を名乗り、「Safari」も名乗っている。新版の「Microsoft Edge」は、「Google Chrome」と同じレンダリングエンジンを使っているから「Chrome」の名乗りは、100%の嘘ではないだろう。しかし、本来なら「Edg/79.0.309.71」だけでよいはずだ。

 ちなみに、この「Edg」という文字列も、旧「Edge」と区別するために付けたもので、正しい名称ではない。旧「Edge」の評判が悪かったために、自身の名前を偽っているのだ。

 Webブラウザのユーザーエージェントは、このように欺瞞溢れる魔窟となっていた。そして、負の遺産としか言いようがない状態になっていた。

◆ユーザーエージェントの存在意義

 Webブラウザのユーザーエージェントは、その存在意義が問われるような内容になっていた。

 ただし、「データを要求する相手を区別する」という本来の用途も当然ある。そのために、「UA-CH(User-Agent Client Hints)」という代替の仕様に移行するようだ。必要ではあるが、現状はまずいということだろう。

 この移行の試みが成功するのかは分からない。「Google Chrome」のシェアが大きいとはいえ、急には現状は変わらないだろう。Webブラウザ以外のクライアントも存在する。そのため当分のあいだサーバー側の開発者は、欺瞞に満ちた長大なユーザーエージェントに付き合い続ける必要があるだろう。

<文/柳井政和>

【柳井政和】

やない まさかず。クロノス・クラウン合同会社の代表社員。ゲームやアプリの開発、プログラミング系技術書や記事、マンガの執筆をおこなう。2001年オンラインソフト大賞に入賞した『めもりーくりーなー』は、累計500万ダウンロード以上。2016年、第23回松本清張賞応募作『バックドア』が最終候補となり、改題した『裏切りのプログラム ハッカー探偵 鹿敷堂桂馬』にて文藝春秋から小説家デビュー。近著は新潮社『レトロゲームファクトリー』。2019年12月に Nintendo Switch で、個人で開発した『Little Bit War(リトルビットウォー)』を出した。

関連記事(外部サイト)