itochin2の日記(仮)

主に備忘録。Perl、MySQL、Unity、開発管理などについて情報を残していきたい。

user-agentでOSとか判定するのは辛かった

user-agentを使用して、OSとかブラウザとか判定する実装した。
ようは、動作環境を満たすかチェックしたかったので。
吐きそうなくらい辛かった気持ちを忘れないためにメモを残す。

要件

まずはCPANをチェック

HTML::ParseBrowser - search.cpan.org
[OK] OSのバージョン取れる。
[OK] ブラウザ名取れる。
[NG] スマホかどうかは不明。
[NG] タブレットかは分からない。

Parse::HTTP::UserAgent - search.cpan.org
[OK] OSのバージョン取れる。
[OK] ブラウザ名取れる。
[NG] スマホかどうかは不明。
[NG] タブレットかは分からない。

HTTP::UserAgentStringParser - search.cpan.org
そもそも外部と通信する必要あるのが懸念材料。

Woothee - search.cpan.org
[NG] OSのバージョン取れない。
[OK] ブラウザ名取れる。
[OK] スマホかどうか分かる。
[NG] タブレットかは分からない。

検討したこと

CPANモジュールはどれも少しずつ惜しい。

そしてアプリケーションで利用するためには、
windowsは7も8もwindowsとして管理したり、'mac'という文字列じゃなくて定数にしたかったり
様々な加工が必要だったので、泥臭く実装することにした。

面倒だったポイント

  • IEMSIEって入っていたが、IE11から急になくなった
  • WindowsXPは32bitと64bitで違う文字列(NT5.1とNT5.2)
  • OS Xのバージョン区切りが「_」と「.」のパターンある
  • OS X のバージョン終わりが「)」と「;」のパターンある
  • androidはMobileがないヤツがタブレットだが、例外もある
  • ChromeChrome.*Safariってなってる
  • テストケース用意するのがしんどい。

実装されたもの(いろいろ出していけない部分は削っている

感想

もうUserAgentで判定する世界はなくなればいいのに。
好き勝手に文字列作りすぎ。