◯◯なユーザーのリストが欲しい、といった類の要望をお客さんにもらうことがあります。SQLでデータを引っ張ってくればリストを作れるものの、本番DBに繋いでSQL投げて出てきたものを渡す、ってことを考えると大変です。いずれ見たい情報が増えることを考えるとWeb側にそれ用の画面を用意するのは現実的ではありません。

そこで登場するのが今回取り上げたBlazerというgemです。BlazerはRailsのmountable engineの仕組みで自分のRailsアプリにBlazerの画面を簡単にマウントできるようになっています。Blazerの画面でSQLを書いて実行し、保存しておくことができます。保存済のクエリの画面へ行くと、現在のDBからそのクエリで情報を取り出して一覧にしてくれ、CSVダウンロードも可能です。

さらにBlazerは↓な感じでチャートを表示することもできるらしい。まだ使いこなせてないですが、かっこいいです。

(ちなみに、同様の機能を提供するAdhoqというgemもあります。こちらは日本の永和システムマネジメントさん中心に開発されています)

最低限の導入

ローカルで最低限動くようにするために必要なのはたった3ステップです。

gem追加

Gemfileにgem 'blazer'を追記して、

$ bundle install

インストール

$ rails g blazer:install
$ rake db:migrate

routes.rb更新

mount Blazer::Engine, at: "blazer"

これでlocalhost:3000/blazerでBlazerのダッシュボードにアクセスできるようになります。 blazer_pathというURLヘルパーも使えるようになります。

ちなみにBlazer公式のDemoサイトがこちらです。

Blazer Demo

ここでは実際にクエリを発行して試せるはず。気になったら触ってみるといいと思います。

認証をつける

ベーシック認証、Deviseのresourceを使った認証といった簡易に設定できる認証があります。今回のRailsアプリの場合はDeviseにUserモデルとAdministratorモデルがあるなどして、簡易な方法ではうまく動かなかったこともあって、before_actionを利用する方法を採りました。

READMEのこの部分に該当します。

ankane/blazer: Business intelligence made simple

blazer.yml内のuser_class, user_method, before_actionを次のように書き換えました。

user_class: Administrator
user_method: current_administrator
before_action: :authenticate_blazer_user!

user_classはBlazerの画面のユーザーとなるモデルのクラス、ここではAdministratorを指定しました。user_methodはそのユーザーを返すメソッドで、ここではDeviseのcurrent_administratorヘルパーメソッドを指定します。

最後のbefore_actionが認証の本体で、メソッドのシンボルを指定します。これをapplication_controller.rbに書きます。current_administratorがいなければリダイレクトするよ、となってます。これで管理者として正しく認証できていないときにはリダイレクトされる(=使えない)ことになります。

def authenticate_blazer_user!
  redirect_to root_url unless current_administrator
end

本番で使う

READMEのこの部分が該当します。

ankane/blazer: Business intelligence made simple

読み取り権限のみの専用ユーザーを作って使おう、という話です。ここでユーザーを作ったら、本番環境のBLAZER_DATABASE_URLにDBのURLをユーザー名、パスワード付で指定します。

僕の場合はpostgresqlだったのでこんな感じになります。

postgres://blazer:your-password@your-db-host-name/your-db-name

おわり

これで、お客さんに〇〇データが欲しい、と言われたときに簡単にデータを抽出できるわけです。こないだ勉強したSQLが火を吹きますね。

O/RマッパーからDB触り始めた人にSQL書き方ドリルがおすすめ - ぴよログ
tl;dr SQL苦手な人にこの本めちゃくちゃオススメです。特に手を動かさないと頭に入らない人向け。 すごく凝ったことはできるようにならないかもしれない

ダッシュボード機能とチャートについては今度書こう。