【PHPで作る】初めての携帯サイト構築

第2回携帯キャリアと端末を判別する

携帯サイトはキャリア・端末ごとに仕様が異なることを説明してきました。そのため多くの場合、プログラムにより各キャリア・端末にあわせた方法で、出し分けを行っていく必要があります。携帯サイトを作る上でまず大切になるのが、アクセスしてきている携帯の、キャリアと端末を判別するところと言えるでしょう。その判別方法について見ていきたいと思います。

キャリアを判別する方法

まずキャリアの判別について見ていくことにしましょう。キャリアの判別には大きく2つの方法があります。

  1. ユーザーエージェントでキャリアを判別する方法
  2. IPアドレスでキャリアを判別する方法

このどちらかを使って判別をすることになります。

ユーザーエージェントで判別する方法

ユーザーエージェントの情報からアクセスしてきている携帯キャリアを判別する方法です。携帯端末はHTTPリクエストのユーザーエージェントにアクセス端末の情報を記述してきます。この情報を解析することでどのキャリアや端末がアクセスしてきているのかを確認することができます。

ドコモのユーザーエージェント例
DoCoMo/2.0 P905i(c100;TB;W20H13)

実際の情報を見るとなんとなく理解できる内容だと思います。docomoのP905iの端末がアクセスしてきているのは一目瞭然でしょう。このユーザーエージェントの情報を取得して解析することで、キャリアを判別することができます。

IPアドレスでキャリアを判別する方法

キャリアを判別する方法にはもう一つの方法があります。アクセス元のIPアドレスで判別する方法です。携帯からインターネットにアクセスする場合は、一度キャリアのゲートウェイを通り、その後インターネットを通じて各携帯サイトにつながります。

図1 携帯におけるインターネットの基本的な接続構成
図1 携帯におけるインターネットの基本的な接続構成

つまりアクセス元のIPアドレスは各キャリアのIPアドレスとなるため、IPアドレスとキャリアのマッピングデータがあれば、キャリアを判別することができます。

判別方法による違い

ユーザーエージェントとIPアドレスによるキャリア判別は、それぞれどういったメリット・デメリットがあるのでしょう。1つは、ユーザーエージェントは偽装が可能だということです。あくまでHTTPリクエストとして送られてきた情報であり、携帯ではなくPC上から不正に書き換えてアクセスすることができます。一方IPアドレスによる判別は、不正にキャリアのゲートウェイを使ってアクセスすることはできないため、より信頼できる判別データと言えるでしょう。つまり携帯以外の不正なデータや端末でアクセスされたくない場面では、IPアドレスによる判別のほうが向いていると言えます。一方IPアドレスによる判別は、IPアドレスとキャリアのマッピングデータを事前に用意し、定期的な更新をしていく必要があるので手間と運用をきちんと考えておく必要があります。

次にキャリアだけでなく、アクセスしてきている端末の情報を判別していく方法を見ていきましょう。

端末を判別する

次はアクセスしてきている端末を判別する方法です。キャリアの判別と同様、ユーザーエージェントに端末の情報は付記されてきます。ユーザーエージェントの取得方法は次の通りです。

PHPでユーザーエージェント情報を取得する
$_SERVER['HTTP_USER_AGENT']

このユーザーエージェントの情報を解析し端末情報を取得することになります。ただし各キャリアによってこのユーザーエージェントの表記は異なります。キャリアだけならともかく、端末やブラウザーバージョンレベルでも統一されていないため、情報は載っているにせよ、仕様を細かく理解しないと解析することができない状態です。

ユーザーエージェントの例
キャリア 端末 ユーザーエージェント
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のインストール方法
# pear install Net_UserAgent_Mobile-beta

Net_UserAgent_Mobileはベータバージョンのため、そのままではインストールできません。⁠-beta」を付記してインストールを行ってください。

では実際にキャリアと端末の情報を取得するプログラムを書いてみましょう。

コード1 キャリアと端末を取得するプログラム
<?php

// Net_UserAgent_Mobile
require_once('Net/UserAgent/Mobile.php');

// Net_UserAgent_Mobileをインスタンス化する
$agent = Net_UserAgent_Mobile::singleton();

// キャリアをチェックする
if ($agent->isDoCoMo()) {
    // docomo
    $carrier = 'docomo';
    
} else if ($agent->isEZweb()) {
    // au
    $carrier = 'au';

} else if ($agent->isSoftBank()) {
    // SoftBank / Vodafone / J-PHONE
    $carrier = 'softbank';
    
} else {
    // 携帯以外の場合
}
    
// 機種名をチェックする
$model = $agent->getModel();

echo '[キャリア]' . $carrier;
echo '[機種]:' . $model;

}

?>

これでキャリアと端末の情報が取得できました。1つ気をつけることは、auの場合は一般的な機種名が取得できない点です。例えばW51SAの場合「SA39」といった文字列が返ってきます。これはauが内部で管理しているデバイスIDで機種名ではありません。そのため一般的な機種名が欲しい場合はデバイスIDを元に機種名に自前で変更する必要があります。

またNet_UserAgent_Mobileはキャリアや端末の情報だけでなく、端末タイプや画面の幅、表示色数なども簡単に取得することができます。キャリアや機種ごとに表示を変えたい携帯端末では重宝するライブラリでしょう。ただしGPSの対応機種や利用できる画像フォーマット、Flash Liteの対応状況などユーザーエージェントに書かれていない情報までは網羅できません。この辺りを含めたキャリア・機種判別が必要な場合は、別途データベースなどを持つなどして情報を追加する必要があります。


今回は携帯サイト開発のコアとなるキャリアと機種判別について説明してきました。次回は携帯サイトを作る上で気をつけるべき文字コードの取り扱いについて見ていきたいと思います。

おすすめ記事

記事・ニュース一覧