Railsのデータベース処理をカスタマイズ「Arproxy」
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.1369186953.png)
使い方の一例。executeメソッドをオーバーライドしています。これ自体はさほど珍しい処理ではないでしょう。
[](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.1369186960.png)
それに対してこちらはArproxyの場合。executeを実行した後でプロキシに渡しているイメージです。
これはSlow Query Loggerとしての利用。executeを実行した後、実行結果の時間を取得して処理分けをしています。リアルタイムにSlow Queryに対するワーニングを出すこともできるでしょう。
こちらはSQLをSELECT系に限定する処理。UPDATEやDELETEの不用意な実行を防止できます。
Arproxyを使うとそれ以外にもコメントを追加したり、ログに書き込む時の頭の文字を変更したりできます。SQLを分析したり、特殊な振り分けを考えたりする際に使えそうです。
MOONGIFTはこう見る
個人的に良いと思ったのはSlow Queryの検出ができる部分です。Railsでは実行タイミングが本当にデータが必要になった時に行われるので、ベンチマークを埋め込む部分が煩雑になります。しかしArproxyを使う場合はexecuteに埋め込めば良いだけです。
その結果をRedisなどの別なバックエンドに保存しておいても良いと思いますし、アラートを出すようにしておけばいち早く問題のあるSQLが判別できるようになります。開発時はもちろん、運用時にも便利なライブラリです。