こんにちは。Webプログラマの篠田です。
今回は「何となく使っているプログラムソース」というテーマでご紹介していきます。
第1弾は、PHPによるデバイス判定です。
デバイス判定とは
現在、Webサービスを利用するデバイス(端末)として挙げられるのが代表的なものが「PC」「スマホ」「タブレット」になります。
この3種類のデバイスを識別して、それぞれのデバイスに応じた処理を行うときに利用するのが「デバイス判定プログラム」です。
「デバイス判定」の方法の代表的なものとして「ユーザーエージェント」を利用するものがあります。
代表的なユーザーエージェント
ユーザーエージェント(User Agent)とは、Webブラウザ(ChromeやFirefoxなど)がサーバーに対して自動的に送信している情報です。
情報といっても、利用者の個人情報等ではなくブラウザの種類やバージョン、利用しているOSの種類などを送信しています。
このユーザーエージェントの情報の中に、デバイスを識別するための重要な情報が隠されています。
では、各端末ごとのユーザーエージェントを確認してみましょう。
※今回はMac Chromeのデベロッパーツールを参考にご紹介します。
iPhone
1 |
Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1 |
日本で多くのユーザーに利用されている携帯端末「iPhone」のユーザーエージェントになります。
ポイントは、ユーザーエージェント内に「iPhone」と明記されている点です。
iPad
1 |
Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1 |
今度はiPhoneと同じくAppleのタブレット端末「iPad」のユーザーエージェントになります。
ポイントは、ユーザーエージェント内に「iPad」と明記されている点です。
Android(タブレット)
1 |
Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.53 Safari/537.36 |
だいぶ古い端末になりますが、Androidの「Nexus 10」のユーザーエージェントになります。
Androidの端末には「Android」と明記されています。
Android(モバイル)
1 |
Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.53 Mobile Safari/537.36 |
こちらも古いAndroidモバイルの「Pixel 2」のユーザーエージェントになります。
タブレット同様に「Android」とありますが、モバイルには「Mobile」という記述もあるのが特徴です。
ですが、Androidの端末の中には、タブレットだけれども「Mobile」をユーザーエージェントに含む端末があります。
厳密に判定すること必要とする場合は、現在出回っているAndroid全機種を条件に追加する必要がでてきます。
この辺りは、どこまでやるかという線引を決めて対応するしかありません。
Windows Phone
1 |
Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263 |
2018年11月時点では、新規での販売が終了している「Windows Phone」のユーザーエージェントになります。
ポイントは「Windows Phone」と明記されているので、判別は容易ですが利用者数が少ない端末を対象とするのかは、要検討が必要となります。
PHPによるデバイス判定
代表的なデバイスのユーザーエージェントをみてきました。
これをもとに端末判定をするプログラムをPHPでまとめていきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php //ユーザーエージェントの取得 $ua = $_SERVER['HTTP_USER_AGENT']; //スマホ(iPhone、Android、WindowsPhone) if ((strpos($ua, 'Android') !== false) && (strpos($ua, 'Mobile') !== false) || (strpos($ua, 'iPhone') !== false) || (strpos($ua, 'Windows Phone') !== false)) { echo "モバイル"; } elseif ((strpos($ua, 'Android') !== false) || (strpos($ua, 'iPad') !== false)) { //タブレットだった場合 echo 'タブレット'; } else { echo "PC"; } |
PHPで、ユーザーエージェントを取得するときは「$_SERVER[‘HTTP_USER_AGENT’]」で取得可能です。
条件分岐は、先程ご紹介した各デバイスの特徴となるキーワードを「strpos」関数を使い検索を行います。
注意点は「Android」のときのみ「Mobile」という文字列を含んでいるかどうかを調べる必要がある点です。
条件に一切該当しなければ「PC」という判定にします。
これで、「デバイス判定」がPHPで、できるようになります。
まとめ
デバイス判定を調べると多くの情報があり、コピー&ペーストで簡単に実装ができます。
ですが、どのような特徴を利用してデバイスを判定しているのかという理屈がないと今後新しいデバイスが出てきたときに応用が効かなくなってくる恐れもあります。
知っているようで曖昧だったデバイス識別方法に対して理解が深まれば幸いです。
現場の業務フローに寄り添ったWebシステムをお求めなら、私たちALAKIにご相談ください。
ALAKIは経営者様が感じている問題点と、実際にWebシステムを利用される現場スタッフ様が直面している課題を、弊社システムエンジニアが丁寧に聞き取り、お客様と共にシステムを作り上げていきます。
業務改善が実現できるWebシステムをお求めの方は、是非ALAKIにご相談ください。