User Agentが訳わからん事なってもうてる話

ドーパミン中毒を治療すべく断食ならぬ断スマホを決意したサカタです。わか

ドーパミン中毒を治療すべく断食ならぬ断スマホを決意したサカタです。わかりやすい成果出たら別記事で出そうかな。

皆さんはUser Agentを知っていますか?User Agentのあれこれ調べていたら面白かったので紹介します。先に言いますが、文字だけの昔話が長々と続くだけの記事です。忙しい人は読む必要ないです頑張って読んでください。

少し前、業務でログ解析をしていた時の話です。その時はまだログの見方もわかっていなかったので調べながら行っていました。

見ていたログはApache(Webサーバ)のアクセスログです。サーバに対するアクセスの情報を残したログです。出ていたログはこんな感じでした。

XXX.XXX.XXX.XXX - - [20/Nov/2024:11:55:59 +0900] "GET / HTTP/1.1" 200 40 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36"

ログは、設定したフォーマットに従って出力されます。フォーマットの設定はhttpd.confで行っています。上のログのフォーマットは以下の通りです。

%h %l %u %t \"%r\" %>s %b \"%{User-Agent}i\"

なるほど、わからん。
とりあえず意味を調べながら対応付けていきます。調べたサイトはこちら

フォーマット意味出力された値
%hアクセス元ホストXXX.XXX.XXX.XXX
%lクライアント識別子
%u認証ユーザー名
%tアクセスされた時刻[20/Nov/2024:11:55:59 +0900]
%rリクエストの最初の行GET / HTTP/1.1
%>sレスポンスステータス200
%b送信されたバイト数40
%{User-Agent}iUser-AgentリクエストヘッダーMozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/130.0.0.0 Safari/537.36
↑なぜか表の線が表示されません

わかる!わかるぞ!完全に理解しt……UserAgentって何?調べます。

どうやら「アクセス元のOS・ブラウザ」のことらしい。つまり、iPhoneのSafariからアクセスしたら「iPhone/Safariからアクセスされました」っていうログが残るわけね。ふむふむなるほど…

嘘つけよ!!!!!なんだよこれ↓は!!!

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

OSはかろうじてわかる。でもChromeもSafariもどっちもあるじゃん!MozillaとかKHTMLとか何かわからないし!Geckoとかもうポケモンだろ。どうなってんだよ!

調べたところ、どうやらこのUser Agentの文字列はブラウザ戦争の歴史が深くかかわっているようです。さあここからが本章です。ここから歴史の授業になります。ついてきてください。

ブラウザの歴史とブラウザ戦争とUser Agent

1991年、世界初のウェブブラウザ「WorldWideWeb」が公開されました。
皆さんがよく知っているであろうインターネット上のハイパーテキストシステム「World Wide Web」と名前が一緒なのでこのブラウザは後に「Nexus」に改称したそう。

1993年、欧州原子核研究機構(CERN)はWorld Wide Web(ブラウザじゃない方)を無料で一般公開しました。
公開されてすぐに米国立スーパーコンピュータ応用研究所(NCSA)から「NCSA Mosaic」というブラウザがリリースされます。
それまでのブラウザはテキストと画像を別ウインドウに表示していたのに対して、NCSA Mosaicはテキストと画像を同一のウインドウ内に混在して表示させることができたため、爆発的に普及、ウェブの利用者も激増しました。当時日本では「ググる」みたいなノリで「Mosaicする」って言ってたらしいです。
ここでのUser Agentの文字列はこんなかんじ

NCSA_Mosaic/2.0 (Windows 3.1)

1994年、NCSA Mosaicの開発者の一部がモザイク・コミュニケーションズ社を立ち上げ独立します。当時シェア率トップだったMosaicを追い抜く意味を込めて、Mosaic Killer「Mozilla」というブラウザを開発します。そのままMozillaという名前でリリースする予定でしたが、Mosaic Killerの意味だったのでMosaicに怒られて(異議申し立てを受けて)しまい、名前を「Netscape」に改称してリリースします。
Netscapeは無料で利用できたことや、フレームに対応していたことなどの要因が重なり、瞬く間に世界で最も主流なウェブブラウザとなりました。最盛期にはシェア率は9割以上だったそうです。
ここでのUser Agent文字列は

Mozilla/1.0 (Win3.1)

モジラやないかい。全然反省してない。

特に当時はフレームという仕組みが非常に使い勝手がよく革新的でした。ウェブページを開発する側もこのフレームという仕組みを組み込んだページを開発するようになると、「フレーム機能を持つブラウザ(Netscape)からアクセスしてもらいたい」と思うようになり、User Agent文字列がNetscapeとなっているブラウザからのみアクセスできるシステム(ユーザーエージェント・スニッフィング)を開発します。

1995年、マイクロソフトはNCSAからMosaicのライセンスを引継ぎ、「Internet Explorer」(以下、IE)を開発します。しかし、IEはNetscaptではなくMosaicベースで作られていたため、フレームには未対応でした。
IEを”Netscape Killer”にしたいと思っていたマイクロソフトはユーザーエージェント・スニッフィングをかいくぐってウェブページを表示できるようにするために、User AgentをNetscapeに偽装します。
当時のIEのUser Agent文字列がこれ。

Mozilla/1.22 (compatible; MSIE 2.0; Windows 95)

IEとNetscapeは激しいシェア争いを繰り広げ、第一次ブラウザ戦争となります。

1998年、マイクロソフトはシェアを伸ばすためにWindows 98にIEを同梱するようになります。Windowsを買うだけですぐにWebを利用できるようになり圧倒的シェアを獲得します。
さらに、当時はHTMLが正しく記述されていないサイトも多く、IEはHTMLの表示の補正を行ったのに対して、Netscapeはこの問題の対処を積極的に行わなかったり、CSSの処理もIEと比べて遅れていました。また、JavaScriptについてもNetscapeが採用したレイヤーは非常に使い勝手が悪く、IEのDOMに比べて完全に劣っており、IEで表示できるページがNetscapeではまともに表示できないといった現象が多発しました。
これらの理由によりNetscape離れが加速し、2000年~2004年にはIEが市場シェアをほぼ独占。第一次ブラウザ戦争はIEの勝利で終結したのです。

1998年、IEがすさまじい勢いでシェアを伸ばす中、ネットスケープコミュニケーションズは「Netscape Communicator」の開発を中止し、オープンソース化することを発表。オープンソースコードを共同開発するために「Mozilla Organization」を立ち上げます。

Netscape Communicatorとは、ここまでに出てきたウェブブラウザのNetscape(Netscape Navigator)のほかに、電子メールクライアントやウェブページ作成ソフトなどをまとめたインターネットスイート(インターネット関連のソフトウェアをパッケージ化したもの)

Netscapeシリーズ

その後公開されたオープンソースアプリケーションは「Mozilla Application Suite」または「Mozilla Suite」と呼ばれ、独自のHTMLレンダリングエンジンである「Gecko」が使われていました。
Mozilla SuiteのUser Agent文字列はこうなります。

Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) Gecko/20020826

HTMLレンダリングエンジンとは、ウェブページ記述用言語で書かれたデータを解釈し、実際に画面に表示する文字や画像などの配置を計算するプログラムのこと。HTMLのほか、CSS、XMLなどを解釈する

HTMLレンダリングエンジン

2002年、Mozilla SuiteはNetscape Communicatorと同様にウェブブラウザ機能やメール・ニュース機能、ウェブページ作成機能など多くの機能を含んでいたものの、動作が重く、ソースコードも複雑だったため、ウェブブラウザ部分は「Phoenix」として個別に開発されることとなります。

2003年、Mozilla OrganizationはMozilla Foundationを設立、Phoenixは紆余曲折あり「Mozilla Firefox」として2004年にリリースされます。
FirefoxのUser Agent文字列は、

Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE; rv:1.7.5) Gecko/20041108 Firefox/1.0

一方そのころIEはその独占的なシェアが自身の首を絞めることとなります。
IEが採用する技術である「ActiveX」を悪用するキーロガーやバックドアをはじめ、IEのセキュリティホールを狙ったコンピュータウイルスやスパイウェアが多数登場するようになり、セキュリティ問題がクローズアップされるようになります。また、IE専用サイトの増加によるブラウザ互換性への批判もされるようになります。

Firefoxやその他新興ブラウザはActiveXを採用しておらず、独自のレンダリングエンジンを採用していたため、ActiveXに起因するセキュリティ問題は発生しなかったことなどからIEは徐々に衰退し、Firefoxは初めてIEの牙城を崩したブラウザとなります。

そしてFirefoxが採用していたGeckoというレンダリングエンジンが非常に優秀なものであったことから、再びユーザーエージェント・スニッフィングが行われるようになり、Geckoを採用したブラウザが優遇されるようになります。

Linuxユーザから支持されていた「Konqueror」というブラウザは、多くのユーザーが「Firefoxと同じレベルで優れている」と信じていましたが、残念ながらGeckoではなく「KHTML」というレンダリングエンジンを採用していたため、ユーザーエージェント・スニッフィングに弾かれます。
そこで再びUser Agentの偽装です。KonquerorはUser Agentに「KHTML, like Gecko」をふくめ、「Firefox(Gecko)と互換性があるブラウザだよ」ということにしたのです。

Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko)

ほぼ同時期に、Appleは「Safari」を開発します。SafariはレンダリングエンジンにGeckoではなくKHTMLを採用していました。その後多くの機能を追加し、独自の「WebKit」というレンダリングエンジンに進化します。
しかし、KHTMLベースだったため表示できるページはKHTML用のページでした。そこでSafariもUser Agentを偽装。「Geckoを偽装したKHTMLに偽装したWebkit」となります。

Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5

2008年、みんな大好きGoogleからGoogle Chromeが登場します。
ChromeはレンダリングエンジンにSafariとおなじWebkitを採用したため、SafariのUser Agentを継承することになります。

その結果、冒頭に紹介した現在のUser Agentとなったのです。

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

ブラウザ戦争の終戦とEdgeについて話すのでもう少しだけ時間ください。

2010年ごろ、まだIEが約60%のシェアと高いシェア率でしたが、FireFoxが20%以上となり、次点でChromeが8%と順調にシェアを伸ばしていました。

2011年にはIE 9とFirefox 4がリリースされましたが、IE 9はWindows XPをサポートしていなかったことや日本語版公開延期の影響によりFirefox 4に大きく引き離されることになります。
さらにWindows 8のUIは市場に受け入れられず、Windows XPのシェアが下がらないままだったため、結果としてIEのシェアをさらに下げることにつながります。

2016年にはChromeがIEとEdgeを合わせたシェアを上回り世界シェア1位となり、第二次ブラウザ戦争は終結しました。

少し時系列は前後しますが、2015年ごろからマイクロソフトは「Microsoft Edge」の開発を始めます。当時の予定では「EdgeHTML」というレンダリングエンジンを使用する予定でしたが、2018年に「Chromium」ベースで開発することを発表。レンダリングエンジンはWebKitに変更されました。

Chromium(クロミウム)は、フリーかつオープンソースのウェブブラウザ向けのコードベース(特定のシステムやアプリケーションなどを開発するために使われるソースコードの集まり)である。主にGoogleによって開発とメンテナンスが行われている。Googleは、Chromiumのコードに機能追加をすることでGoogle Chromeブラウザを作成している。

Chromium

2020年、マイクロソフトはEdgeをリリースします。
皆さんもう予想できてますよね。User Agentはどうなったかというと

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

以上です!いかがでしたでしょうか。面白かったですか?私が初めてこれを知った時はかなりおもろかったのですが、私の文章力が足りず伝わってなかったらすみません。

ここまで読んでくださった方はブラウザの歴史の勉強にもなったかとおもいます。
実はNetscapeのオープンソース化はその後の「オープンソース運動」と呼ばれる一連の動きにつながります。オープンソースの文化はITの発展にとてつもなく大きな影響を与えていることは間違いありません。Linuxの資格であるLinuC-1の一つの題材にもなっているぐらい大切な考え方なので、調べてみてください。私はFirefoxというかMozilla Foundationが好きになりました。使ってるのはChromeですが…
ぜひコメントで皆さんの推しブラウザを教えてくださいね。

それでは長々ありがとうございました!また次の記事でお会いしましょう~

余談

暇人だけお付き合いください。短いです。

User Agentは上で紹介した理由から、意味をなさなくなってしまい、廃止するのではないかみたいなことが言われていたそうです。(今はないのかな?)

しかし、私の業務中にこのUser Agentが非常に役立ったのでその話もさせてください。

私の所属しているプロジェクトではセキュリティをガッチガチにするためにシステムに多層の壁が用意されているのですが、その壁一つ一つがシステムに対して監視を行っています。

その監視のリクエストがログに残るわけなんですが、ログに残るアクセス元ホストアドレスが、最後に通過した壁のアドレスになるのです。

アクセスログを見ても、どのアクセスがどの壁からの監視なのかわからなかったのです。

そこでUser Agentを見てみたところ、なんとそれぞれ個別のUser Agentが設定されていたのです!!

それ以降User Agentを見ることでどこの壁からの監視か一発でわかるようになったというお話です。

User Agent、廃止しないでくれてありがとう…ありがとう…

以上です。ありがとうございました。

参考文献

UserAgentからOS/ブラウザなどの調べかたのまとめ

世界中を巻き込んだブラウザ戦争と「ユーザーエージェント文字列」をめぐる複雑怪奇な変遷とは?

コメントを残す

メールアドレスが公開されることはありません。