# Amon2::Plugin::Web::Woothee 書いたよ 去年の11月に開催された [[https://bayashi.net/static/slide/20131120/index.html|Shibuya Plack/PSGI Conference #1]] の時にネタ探してて見つけた {{cpan: Plack::Middleware::Woothee}} というモジュールがありまして、これは Plack のミドルウェア層で User Agent を {{cpan: Woothee}} でホゲホゲしておくモジュールなわけですが、{{cpan: PSGI}} の env に `psgix.woothee` っていうキーで突っ込むのどうなのかねーという話を Author の {{tw: songmu}} さんが言ってたりしてた。 そんなわけで、自分もちょっとその辺ひっかかったりしてたのと、そもそもアプリ層でやった方が良さそうじゃないかね、と思いはじめたので、{{cpan: Amon2}} のプラグインとして実装してみた。 [[https://github.com/bayashi/Amon2-Plugin-Web-Woothee|Amon2::Plugin::Web::Woothee]] package MyApp::Web; use Amon2::Web; __PACKAGE__->load_plugin('Web::Woothee'); コンテクストから以下のメソッドが呼べるようになる。 * ua_is_pc * ua_is_crawler * ua_is_smartphone * ua_is_mobilephone * ua_is_misc 主に {{cpan: Woothee}} の category を見るやつですね。 単純にパースして結果が見れるようになるだけでなく、1リクエスト中で parse が必要になった時だけ、一回限り呼ばれるようになっているのでエコ。 {{cpan: Woothee}} の parse 結果のパラメータを取りたい場合は、`woothee` メソッド経由で取得できる。 $c->woothee->name; 取り急ぎ、ミドルウェア + WAF になるより、WAF のプラグイン単独で完結した方が楽そうな感じではあった。