Woothee を PHP に移植した (2014-02-18 追記あり)
TL;DR
- User Agent 判定器 Woothee の PHP 実装を作った
Packagist には登録できてなかったりするので少々お待ちください(2014-12-18 追記 Packagist に woothee/woothee として登録しました)- Woothee は便利プロジェクトなので盛り上がってほしい
Woothee とは
Woothee というのは @tagomoris さんが作った User Agent 判定器プロジェクトです。
Perl, Java, JavaScript, Python と、複数の言語に実装が用意されていて、元になるデータセットや、テスト用のデータセットは YAML 形式で公開されています。
詳しくは以下のブログ記事を読むのが良いでしょう。
Woothee PHP とは
PHP 実装がなかったようなので、勝手に作りました。
ほぼ woothee-java を移植しただけです。
ただし、判定処理を行うファサードとなる Classifier クラスは、woothee-java が静的メソッドを呼び出して使うのに対して、woothee-php はインスタンスメソッドを呼び出して使うようにしてます。
その方が DI できていいよね、という感じです。
とりあえずテスト用のデータセットは全てパスしてるつもりです。
ユニットテスト通しただけで実際のプロジェクトへの投入とかはできてないので、ものすごいポカミスとかあるかもしれません。
Packagist への登録について
PHP ライブラリ作ったら 4 秒で Packagist に登録するのが PHP モダニストの流儀だとは思うのですが、せっかくならベンダー名として woothee 使いたいところで、そうなると一応 @tagomoris さんにも一言聞いておいたほうがいいだろうということで、後回しにしてます。 (まだ聞いてない)
(2014-02-18 追記 前述のとおり Packagist 登録済み)
あとせっかくなので、GitHub の woothee organization 入りもできるといいですね。
(2014-02-18 追記 woothee organization 入りし、woothee/woothee-php に移動しました)
Woothee のいいと思うところ
似たような機能のライブラリは無くはないと思うのですが、(ちょうど今 @chobie さんにも教えていただきました) Woothee のいいところはもっと別のところにあると思うんです。
- 多言語で実装が用意されており、同一の判定を行うことが (少なくともユニットテストにより) 保証されている
- 元データのデータセットが YAML で GitHub に公開されている (プルリクでデータの修正・追加が可能)
- テスト用のデータセットも YAML で GitHub に公開されている (これもプルリクできる)
コミュニティとしてメンテナンスを続けていければ、極論 @tagomoris さん自身が飽きてしまっても問題ないわけです。
まとめ
とりあえず作りましたので、興味のある方はお試しください。
前述の通り、こちらでは本番投入できておりませんので、その辺はお察しください。