ArproxyはRuby製、Ruby on Rails用のオープンソース・ソフトウェア(MIT License)です。

Ruby on Railsで使われるO/Rマッパーを使っていると、便利すぎるが故に細かい制御がしづらく、歯がゆい思いをしたことがあるかも知れません。そこで試してみてもらいたいのがArproxyです。とても面白い利用法が考えられそうです。

[![](http://images.moongift.jp/2013/05/Screenshot 2013-05-21 18.16.46_thumb.1369186953.png)](http://images.moongift.jp/2013/05/Screenshot 2013-05-21 18.16.46.1369186953.png)
使い方の一例。executeメソッドをオーバーライドしています。これ自体はさほど珍しい処理ではないでしょう。

[![](http://images.moongift.jp/2013/05/Screenshot 2013-05-21 18.16.55_thumb.1369186957.png)](http://images.moongift.jp/2013/05/Screenshot 2013-05-21 18.16.55.1369186957.png)
こちらは通常のActiveRecordを使った場合の処理フロー。

[![](http://images.moongift.jp/2013/05/Screenshot 2013-05-21 18.17.04_thumb.1369186960.png)](http://images.moongift.jp/2013/05/Screenshot 2013-05-21 18.17.04.1369186960.png)
それに対してこちらはArproxyの場合。executeを実行した後でプロキシに渡しているイメージです。

これはSlow Query Loggerとしての利用。executeを実行した後、実行結果の時間を取得して処理分けをしています。リアルタイムにSlow Queryに対するワーニングを出すこともできるでしょう。

こちらはSQLをSELECT系に限定する処理。UPDATEやDELETEの不用意な実行を防止できます。

Arproxyを使うとそれ以外にもコメントを追加したり、ログに書き込む時の頭の文字を変更したりできます。SQLを分析したり、特殊な振り分けを考えたりする際に使えそうです。

MOONGIFTはこう見る

個人的に良いと思ったのはSlow Queryの検出ができる部分です。Railsでは実行タイミングが本当にデータが必要になった時に行われるので、ベンチマークを埋め込む部分が煩雑になります。しかしArproxyを使う場合はexecuteに埋め込めば良いだけです。

その結果をRedisなどの別なバックエンドに保存しておいても良いと思いますし、アラートを出すようにしておけばいち早く問題のあるSQLが判別できるようになります。開発時はもちろん、運用時にも便利なライブラリです。

cookpad/arproxy · GitHub