連載
» 2016年10月06日 05時00分 UPDATE

Tech Basics/Keyword:ユーザーエージェント(User Agent、UA)

Webシステムの設計・開発・構築・管理のいずれでも、しばしば目にする「ユーザーエージェント」。「ユーザー」も「エージェント」もよくある単語だが、その意味は? User-Agentヘッダとの関係は? 何に使われるのか?

[島田広道,デジタルアドバンテージ]
「Tech Basics/Keyword」のインデックス

連載目次

 「ユーザーエージェント(User Agent、UA)」とは、広義では、何らかの通信のためにエンドユーザー側で利用される機材やプログラムのことを指す。狭義では、WebサーバとHTTP/HTTPSで通信するクライアントプログラムを意味することが多い。さらには、User-Agentヘッダ、あるいはユーザーエージェント文字列のことを「ユーザーエージェント」と称していることもよくある(いずれも詳細は後述)。

 本稿では、こうしたWebにおけるユーザーエージェントに焦点を当てて解説する。

Webにおけるユーザーエージェントの例 Webにおけるユーザーエージェントの例
Webサーバと通信するのにエンドユーザーが利用するプログラム(Webブラウザやアプリ、クローラーなど)、またはそれらを実行しているOSやマシンを含めて「ユーザーエージェント」と呼ぶ。ちなみに「クローラー」とは自動的にWebサイトを巡回して情報を収集するプログラムのことで、「bot(ボット)」の一種といえる。

User-Agentヘッダとユーザーエージェント文字列

 WebサーバとHTTP/HTTPSで通信するWebブラウザやアプリ、クローラーといったクライアントプログラムは、Webサーバにリクエストを送る際、自身の「素性」を表す情報も同時に送信する。そのために使われるヘッダを「User-Agentヘッダ」と呼ぶ。また「素性」を表した文字列のことを、「ユーザーエージェント文字列」と呼ぶ。

User-Agentヘッダの例 User-Agentヘッダの例
これはAndroidスマートフォンの場合の例。このようにユーザーエージェントは、WebサーバにHTTP/HTTPSでリクエストを送信する際、自身のプログラムやOS、ハードウェアなどを表すテキストを「User-Agentヘッダ」に記載して送出する(1つのリクエストの中には、他にもいくつかのヘッダが含まれている)。

 ユーザーエージェント文字列には、クライアントプログラムに限らず、それを実行しているOSや関連コンポーネント、さらにはハードウェア(マシン)の情報が含まれることもある。また各ソフトウェアの細かいバージョンも知ることが可能だ。

マシン OS プログラム User-Agentヘッダの例(ヘッダ名を含む)
iPhone iOS 10 Mobile Safari 10 User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A456 Safari/602.1
iPhone iOS 10 「ロケスマ」アプリ User-Agent: locasma/37 CFNetwork/808.1.4 Darwin/16.1.0
iPad iOS 9 アプリ内ブラウザ User-Agent: Mozilla/5.0 (iPad; CPU OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13G36
Nexus 5X Android OS 7.0 Google Chrome 53 User-Agent: Mozilla/5.0 (Linux; Android 7.0; Nexus 5X Build/NBD90W; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.124 Mobile Safari/537.36
Windows 10 Google Chrome 53 user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36
Windows 10 Microsoft Edge 38 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393
Windows 8.1 Internet Explorer 11 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
Mac OS X 10.9 Mozilla Firefox 49 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:49.0) Gecko/20100101 Firefox/49.0
Google検索のクローラー User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)
Bing検索のクローラー User-Agent: Mozilla/5.0 (compatible; bingbot/2.0; http://www.bing.com/bingbot.htm)
ユーザーエージェント文字列の例
ユーザーエージェントによっては、マシン(ハードウェア)やOSの情報を加えない場合もよくある。その一方で、例えばWindows OSだと.NET Frameworkのバージョンまで記載することもある。Webサーバはこれらの文字列から、ある程度、クライアントの「素性」を推定できる。ちなみにヘッダ名が「User-Agent」なのはhttp/1.1、「user-agent」なのはhttp/2でそれぞれ通信したときの例。

ユーザーエージェント文字列の用途

 ユーザーエージェント文字列を活用すると、Webサーバはクライアントがどのバージョンの何というOSで稼働しているか、マシンは何か、Webブラウザなのかアプリなのか、といったことを識別できる。

 さらには、クライアントに応じて最適なレスポンスを返すことも可能となる。

ユーザーエージェント文字列の利用例 ユーザーエージェント文字列の利用例
WebサーバでUser-Agentヘッダからユーザーエージェント文字列を取得・解析し、クライアントの種類を特定できれば、同じURLがリクエストされても、クライアントによってアプリのダウンロード用ボタンの画像とリンク先URLを動的に変更できる。つまり、ユーザーエージェント文字列を利用すれば、クライアントに最適なレスポンスを生成するのに役立てられる。

 ただし、ユーザーエージェント文字列で得られる情報はクライアントによって異なり、一様ではない。また後述するように偽装が簡単という問題もある。そのため、ユーザーエージェント文字列だけでは、クライアントの細かい分類には失敗しやすい傾向がある。

ユーザーエージェント文字列は偽装できる

 クライアントプログラムを作り込めば、User-Agentヘッダに記載する文字列を自在に設定することは難しくない。また、一般的なWebブラウザでも、開発者向けの機能を利用するとユーザーエージェント文字列を任意に変更できる。

 Webサーバ側から見ると、必ずしもユーザーエージェント文字列通りのクライアントがアクセスしているとは限らないので、あまり過信しない方がよい。

「Tech Basics/Keyword」のインデックス

Tech Basics/Keyword

Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。