SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

クロスブラウザスクリプトの作成テクニック

ユーザエージェントからブラウザの種類やバージョンを判断する

クロスブラウザスクリプトの作成テクニック 第3回


ユーザエージェントの情報を確認する(後半)

Internet Explorerのユーザエージェント

 さて次に、Internet Explorerのユーザエージェントについて見ていくことにしましょう。

 MozillaやFirefoxなどを含むMozilla系ブラウザは、基本的にOSによる違いはありません。しかしInternet Explorerは、Windows版と、MacOS版でまったく違うアプリケーションと考えた方がよいでしょう。

 Internet Explorerで初めてJavaScriptをサポートした、Internet Explorer3.Xのユーザエージェントは次の通りです。

Internet Explorer 3.X
Mozilla/2.0 (compatible;MSIE 3.01; Windows 95)

 このように、Internet Explorer3.Xのユーザエージェントは、Netscape Navigatorとは関係ないのに、Netscape Navigatorの開発コードである「Mozilla」を語っています。また、バージョンを表す文字列は、本来「3.X」であるはずなのに「2.0」となっています。つまり、Internet Explorer 3.XはまったくInternet Explorerの実体を表していないのです。それどころかこのユーザエージェントは、Internet Explorerよりも早く開発され、当時大きなシェアを占めていたNetscape Navigator 2.Xとほぼ同じです。つまり、Internet Explorerのユーザエージェントは、ブラウザ自身を表すより、当時一般的であったNetscape Navigatorのふりをすることを選んだ、と言えるのです。そして、Internet Explorerを表わすのは、バージョン番号の「2.0」の次に続く、括弧内の「compatible;MSIE 3.01」の部分です。つまり、この部分でInternet Explorerは、Netscape Navigator 2と「compatible(互換性のある)」なInternet Explorer 3だよ、と宣言しているのです。もちろん、ユーザエージェントで「compatible」となっていても、実際にブラウザの完全互換が取られているかどうかとは別問題です。

 ユーザエージェントの情報は、JavaScriptだけが使うのではありません。そればかりでなく、ユーザエージェントの情報は、JavaScriptが開発されるよりはるか以前から、HTTPサーバやCGIなどで一般的に利用されてきました。そのような状況があったため、Internet Explorerは、実体を表すのではなく、最も一般的に使われていたNetscape Navigatorのふりをすることを選んだと考えられます。しかしこの判断は、この後のブラウザのユーザエージェントの混乱を大きくしていく原因になっていくのです。

 その後もInternet Explorerは、Netscape Navigatorのユーザエージェントをにらみながら、ユーザエージェントを付けていくことになります。

 それでは、引き続きInternet Explorer 4.X、Internet Explorer 5X、Internet Explorer 5.5のユーザエージェントを見てみましょう。

Internet Explorer 4.X
Mozilla/4.0 (compatible; MSIE 4.0; MSN 2.5; Windows 95)
Internet Explorer 5.X
Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Internet Explorer 5.5
Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)

 この頃、Netscape NavigatorはNetscape Navigator 4.Xの時代だったので、Internet Explorerもそれに倣ったユーザエージェントが付けられました。このため、Internet Explorerのバージョンが4から5に上がっても、バージョン番号はNetscape Navigatorに合わせた「4.0」のままでした。そして、Internet Explorerの実体を知るためには、やはり括弧内の「MSIE 5.01」や、「MSIE 5.5」といった文字列を探す必要があることが分かります。

 しかし、このようにInternet ExplorerがNetscape Navigatorをにらんでユーザエージェントを付けてきた状況は、最新のInternet Explorerで少し変わってきています。それでは、現状の最新版であるInternet Explorer 6.Xのユーザエージェントを見ていくことにします。

 Internet Explorer 6.Xは、Windows XP版と、セキュリティの強化がおこなわれたWindows XP SP2版の2種類が用意されています。それぞれのユーザエージェントは、次の通りです。

Internet Explorer 6.X(Windows XP版)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Internet Explorer 6.X(Windows XP SP2版)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)

 このようにInternet Explorer 6.Xでは、Mozillaが出て、Netscape Navigatorがバージョン番号を「5.0」とするようになった後も、バージョン番号は「4.0」のままとなっています。このことからユーザエージェントに関して、Netscape Navigatorを見ながら付けられていたものが、Internet Explorer独自の道を歩み出すようになったことがうかがえます。

 これは、Internet Explorerがブラウザのシェア競争に勝利したことや、Netscape Navigatorの開発がバージョン4以降、一時止まってしまったため、Netscape Navigatorを気にする必要がなくなったことが大きな理由と思われます。そしてInternet Explorerは、今までのユーザエージェントの命名方法に乗っ取り、かつ変更部分を少なくするという方法を取ったとも考えられます。つまり、「Mozilla/4.0」の部分は以前のまま残し、ブラウザの種類やバージョンは、括弧内の「MSIE 6.0」で表す、ということです。このInternet Explorerのユーザエージェントの命名方法は、今後も何か特別なことが無い限り変わらないでしょう。また、WindowsXP、WindowsXP SP2の判断は、括弧内の「SV1」の有り無しで判断することができます。

Netscape Navigator 8.Xのユーザエージェント

 ところで、Netscape Navigatorの最新版Netscape Navigator 8.Xでは、Netscape NavigatorのレンダリングエンジンであるGeckoと、Windowsの標準であるIEのレンダリングエンジンを切り替えて使用することができます。

 おのおのの場合のユーザエージェントは、次のようになります。

Netscape Navigator 8.X 「Display Page Like FireFox」の場合
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5)
 Gecko/20060127 Netscape/8.1
Netscape Navigator 8.X 「Display Page Like Internet Explorer」の場合
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
 Netscape/8.1

 このように、Netscape Navigator 8.Xのユーザエージェントは、Geckoのレンダリングエンジンを使った場合は、他のMozillaベースのNetscape Navigatorと同じ命名方法のユーザエージェントとなり、Internet Explorerの場合は、Internet Explorer 6と同じユーザエージェントの後ろに、Netscape Navigator 8.Xを表す文字列が付く形になります。以前、Internet ExplorerはNetscape Navigatorに合わせたユーザエージェントを付けていましたが、ここでは完全に反対になって、Netscape NavigatorがInternet Explorerに合わせたユーザエージェントを付けているという訳です。

MacOS版のInternet Explorerのユーザエージェント

 次にMacOS版のInternet Explorerのユーザエージェントを見ていきましょう。MacOS版のInternet Explorerはバージョン3から始まり、バージョン5で開発が終了しています。ユーザエージェントは、次の通りです。

Internet Explorer 3.X(MacOS)
Mozilla/3.0 (compatible; MSIE 3.01; Mac_PowerPC)
Internet Explorer 4.X(MacOS)
Mozilla/4.0 (compatible; MSIE 4.01; Mac_PowerPC)
Internet Explorer 5.X(MacOS)
Mozilla/4.0 (compatible; MSIE 5.23; Mac_PowerPC)

 MacOS版のInternet Explorerは、Internet Explorer 3.Xの場合、Windows版のInternet Explorerと違い実際のバージョン番号と同じ番号が付きます。これは、MacOS版のInternet ExplorerがWindows版のInternet Explorerから遅れて開発され、当時既にNetscape Navigatorがバージョン3になっていたため、それに合わせたものと考えられます。もしも、Internet Explorer 3.Xのブラウザを判断する必要がある場合、この違いも考慮する必要があります。

 それ以外のバージョンでは、Windows版のInternet Explorerと同じ命名方法で、ユーザエージェントが付けられています。

その他のブラウザのユーザエージェント

 さて以上が、Netscape NavigatorとInternet Explorerのユーザエージェントの特徴です。しかし、インターネット上で使われているブラウザは、この2種類だけではありません。それ他のJavaScriptに対応している一般的なブラウザとして、OperaとSafariが挙げられるでしょう。

 それでは、まずOperaのユーザエージェントを見てみます。

Opera 7
Mozilla/4.0 (compatible; MSIE 5.23; Mac_PowerPC) Opera 7.54 [en]
Opera 8
Mozilla/4.0 (compatible; MSIE 6.0; Mac_PowerPC Mac OS X; ja)
 Opera 8.52
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 8.52

 このように、Operaのユーザエージェントには、「compatible; MSIE」という文字列が含まれています。その他、全体の命名方法から見てみると、基本的な部分はInternet Explorerと同じで、最後に「Opera 8.52」として実際のブラウザの種類が分かるようにしています。このことからOperaのユーザエージェントは、Internet Explorerとして見られたいと思っていることが分かります。

 さて次は、Safariのユーザエージェントです。

Safari
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; ja-jp) AppleWebKit/417.9
 (KHTML, like Gecko) Safari/417.8

 Safariのユーザエージェントは、全体的にNetscape Navigatorに似ています。さらに言えば、SafariはレンダリングエンジンにGeckoを使っていません。しかし、それでもなお「KHTML, like Gecko」とユーザエージェント内に「Gecko」の文字列を入れているなどから、Netscape Navigatorを大きく意識していることが分かります。

 このように、OperaとSafariはユーザエージェントの命名方法から見ると、OperaはInternet Explorerを、SafariはNetscape Navigatorを、それぞれ意識していることが分かります。これは、ブラウザ名を値に持つappNameプロパティの実行結果を見ても分かります。このプロパティは、Operaは「Microsoft Internet Explorer」、Safariは「Netscape」の値を持っているのです。

まとめ

 以上、見てきた通り、本来ブラウザ自身を表すはずのユーザエージェントの情報が「ユーザー自身ではなく、そのブラウザがどのようなブラウザとして見られたいかということによって付けられている」ということがよく分かったと思います。

 実はこの問題は、JavaScriptだけの問題ではありません。ウェブサイトでは、JavaScriptができるより以前から、CGIなどを使ってブラウザの種類を判断し、表示を変更したり、ページを振り分けたりすることが、ごく普通に行われていました。また、サイトへのアクセス統計をとる場合にも、このユーザエージェントからブラウザの種類を判断することになります。

 このため、このようなユーザエージェントの命名方法は、今までも多くのサーバ管理者やコンテンツ製作者を悩ませてきました。ブラウザ開発の段階で、なぜこのようなユーザエージェントの付け方をするのか、議論になったこともたびたびあります。

 ですので、今回のユーザエージェント情報の知識は、JavaScriptを使ってブラウザの種類やバージョンを判断することよりも、JavaScript以外の場面で必要になる場合が多いかもしれません。

 さて今回は、JavaScriptやブラウザの種類、バージョンの判断に必要な情報を提供してくれるnavigatorオブジェクトのプロパティについて解説してきました。そして、Netscape Navigator、Internet Explorer、Opera、Safariの各ブラウザが、どのようなブラウザに関する情報を持っているか、ユーザエージェントを中心に解説しました。

 今回は、概要的な話がほとんどだったので、少し退屈だったかもしれません。しかし今回解説したことは、今後クロスブラウザスクリプトを実現するために、ブラウザの種類やバージョンを判断する時の基礎となる部分です。次回からは、もっと実践的なテーマに話を移していく予定です。しかしその中でも、今回解説した事柄に立ち戻って解説する場面が何度か出てくることになるでしょう。そういった意味でも、今回解説したことは大変重要です。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
クロスブラウザスクリプトの作成テクニック連載記事一覧

もっと読む

この記事の著者

半場 方人(ハンバ マサヒト)

Netscape2.XでJavaScriptに初めて出合ったころ、「なぜJavaScriptの日本語の書籍が無いんだ」、とあちこちで嘆いていたら、じゃあおまえが書け、とお声がかかり、JavaScript関連の書籍を執筆するようになる。執筆に際していつも考えるのは、「JavaScript初心者だった頃の気持ちを忘れないよに」、ということ。主な著書は、「標準Webデザイン講座 JavaScript&Ajax」(翔泳社)などがある。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/342 2008/08/26 13:57

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー