携帯サイトはキャリア・端末ごとに仕様が異なることを説明してきました。そのため多くの場合、プログラムにより各キャリア・端末にあわせた方法で、出し分けを行っていく必要があります。携帯サイトを作る上でまず大切になるのが、アクセスしてきている携帯の、キャリアと端末を判別するところと言えるでしょう。その判別方法について見ていきたいと思います。
キャリアを判別する方法
まずキャリアの判別について見ていくことにしましょう。キャリアの判別には大きく2つの方法があります。
- ユーザーエージェントでキャリアを判別する方法
- IPアドレスでキャリアを判別する方法
このどちらかを使って判別をすることになります。
ユーザーエージェントで判別する方法
ユーザーエージェントの情報からアクセスしてきている携帯キャリアを判別する方法です。携帯端末はHTTPリクエストのユーザーエージェントにアクセス端末の情報を記述してきます。この情報を解析することでどのキャリアや端末がアクセスしてきているのかを確認することができます。
実際の情報を見るとなんとなく理解できる内容だと思います。docomoのP905iの端末がアクセスしてきているのは一目瞭然でしょう。このユーザーエージェントの情報を取得して解析することで、キャリアを判別することができます。
IPアドレスでキャリアを判別する方法
キャリアを判別する方法にはもう一つの方法があります。アクセス元のIPアドレスで判別する方法です。携帯からインターネットにアクセスする場合は、一度キャリアのゲートウェイを通り、その後インターネットを通じて各携帯サイトにつながります。
つまりアクセス元のIPアドレスは各キャリアのIPアドレスとなるため、IPアドレスとキャリアのマッピングデータがあれば、キャリアを判別することができます。
判別方法による違い
ユーザーエージェントとIPアドレスによるキャリア判別は、それぞれどういったメリット・デメリットがあるのでしょう。1つは、ユーザーエージェントは偽装が可能だということです。あくまでHTTPリクエストとして送られてきた情報であり、携帯ではなくPC上から不正に書き換えてアクセスすることができます。一方IPアドレスによる判別は、不正にキャリアのゲートウェイを使ってアクセスすることはできないため、より信頼できる判別データと言えるでしょう。つまり携帯以外の不正なデータや端末でアクセスされたくない場面では、IPアドレスによる判別のほうが向いていると言えます。一方IPアドレスによる判別は、IPアドレスとキャリアのマッピングデータを事前に用意し、定期的な更新をしていく必要があるので手間と運用をきちんと考えておく必要があります。
次にキャリアだけでなく、アクセスしてきている端末の情報を判別していく方法を見ていきましょう。
端末を判別する
次はアクセスしてきている端末を判別する方法です。キャリアの判別と同様、ユーザーエージェントに端末の情報は付記されてきます。ユーザーエージェントの取得方法は次の通りです。
このユーザーエージェントの情報を解析し端末情報を取得することになります。ただし各キャリアによってこのユーザーエージェントの表記は異なります。キャリアだけならともかく、端末やブラウザーバージョンレベルでも統一されていないため、情報は載っているにせよ、仕様を細かく理解しないと解析することができない状態です。
ユーザーエージェントの例
キャリア |
端末 |
ユーザーエージェント |
docomo |
F501i |
DoCoMo/1.0/F501i |
docomo |
F900i |
DoCoMo/2.0 F900i(c100;TB;W22H12;ser***;icc***) |
au |
A3011SA |
UP.Browser/3.04-ST13 UP.Link/3.4.5.9 |
au |
W21SA |
KDDI-SA31 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0 |
SoftBank |
J-T03 |
J-PHONE/2.0/J-T03 |
SoftBank |
910T |
SoftBank/1.0/910T/TJ001/SN*** Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1
|
このユーザーエージェントから適切にキャリアと端末を取り出してくれる便利なライブラリがPHPのPEARライブラリに用意されています。Net_UserAgent_Mobileです。
Net_UserAgent_Mobile
「Net_UserAgent_Mobile」はキャリアや機種などの情報を簡単に取得することができるPEARライブラリです。早速インストールをしてみましょう。
Net_UserAgent_Mobileはベータバージョンのため、そのままではインストールできません。「-beta」を付記してインストールを行ってください。
では実際にキャリアと端末の情報を取得するプログラムを書いてみましょう。
これでキャリアと端末の情報が取得できました。1つ気をつけることは、auの場合は一般的な機種名が取得できない点です。例えばW51SAの場合「SA39」といった文字列が返ってきます。これはauが内部で管理しているデバイスIDで機種名ではありません。そのため一般的な機種名が欲しい場合はデバイスIDを元に機種名に自前で変更する必要があります。
またNet_UserAgent_Mobileはキャリアや端末の情報だけでなく、端末タイプや画面の幅、表示色数なども簡単に取得することができます。キャリアや機種ごとに表示を変えたい携帯端末では重宝するライブラリでしょう。ただしGPSの対応機種や利用できる画像フォーマット、Flash Liteの対応状況などユーザーエージェントに書かれていない情報までは網羅できません。この辺りを含めたキャリア・機種判別が必要な場合は、別途データベースなどを持つなどして情報を追加する必要があります。
今回は携帯サイト開発のコアとなるキャリアと機種判別について説明してきました。次回は携帯サイトを作る上で気をつけるべき文字コードの取り扱いについて見ていきたいと思います。