Kentaro Kuribayashi's blog

Software Engineering, Management, Books, and Daily Journal.

ぼくがかんがえたさいきょうのAmon2のつかいかた

新プロジェクトで、それなりに自由にいろいろやれる感じの状況になったので、好きにやろうと思って、いままで実務では使っていなかったツールをあれこれ試しています。


2012-02-17追記: エントリを書いた後、状況がだいぶ変わったので、実際にはずいぶん違う感じになりました。

WAFをどうしようかなーと思った時に、ドメインスペシフィックなぼくがかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーくを作成するということも考えたのですが、そんなにスペシフィックな用途でもないし、WAF自体はPlackを薄くラップしたぐらいのものでよいと思うので、自分でがんばって作る必要もないと考え、信頼と実績のAmon2を試用してみることにしました。

いくつか、こうだったらいいのになという点を反映して、こんな感じでやってみています。試しながらやってるとこなので、全然「さいきょう」でもないし、不十分なところはいろいろあるけど、まあここからスタートということで。

Amon2は、通常WAFに求められるであろうあれこれを、必要最小限にわかりやすく実装していて、とてもよいです。ただ、大きくわけて、以下のふたつについてこうであったらいいなと思っているので、そのようにしてみました。

  • 設定の取り扱い
  • ルーティング

個人的には、環境変数によって設定をきりかえるような機能は、WAFが提供してくれなくてもよいと思っています。なぜなら、WAFは、あくまでもcontroller + viewを担うものであって、そのような立場のものが、たとえばmodelの設定にまで口出ししてくるのは、越権行為であると思うからです。そこで、上記の例ではConfig::ENVを使うことで、設定をWAFから独立して定義できるようにしています。

ルーティングに関しては、Amon2添付のAmon2::Web::Dispatcher::RouterSimpleだと、ディスパッチされるコントローラのクラスが、::C::*というような名前で、僕はクラス名などを省略するのが個人的に嫌いなので、Router::Simpleを使いつつも、自分的に許容できる名前でcontrollerを書けるようにしてみました。controllerがMyApp::Web::Baseを継承して云々というのは、もうちょっといい感じになるような気もしますが、とりあえずこれで。

ともあれ、Amon2はわかりやすく、かつ、カスタマイザブルなWAFなので、とても使い易いものだと思います。これでちょっといろいろ試してみたいところです。