TimeLineAPI使ってみました / その1 RSpec Formatter
今年の初旬にリリースされて以来、いろいろバージョンアップを重ねている@nifty TimeLineですが、本日のバージョンアップでWebAPIが公開されました。めでたい。
- プレスリリース(http://www.nifty.co.jp/cs/07kami/detail/070808003265/1.htm)
- @niftyウェブサービス (http://webservice.nifty.com/)
いろいろご縁がありますので*1、API公開記念にいくつか簡単でニッチなアプリケーションを作ってみました。
まず一つ目、RSpecのカスタムフォーマッタを作ってみました。
http://homepage3.nifty.com/moro/timeline_formatter.rb
これはRSpecを実行した結果をどんどんTimeLineにポストしていくというものです。テストの実行時間がTimeLine上での時刻としてプロットされます。縦軸はテスト成功数 / 全テスト件数になります。
今回の件でRSpecのカスタムフォーマッタの書き方がよくわかったので、あとでこのフォーマッタを例にして解説記事でも書きたいと思います。とりあえず使ってみてくださいまし。
下準備
まずテスト結果をプロットするためのTimeLineを作成します。http://timeline.nifty.com/にログインしたうえでさくっと作っちゃってください。なお、プライベートなプロジェクトの場合は閲覧できる人を制限したほうがいいかもしれません。TimeLine作成画面の下部からその辺の設定が出来ますので、プロジェクトメンバーだけが閲覧可能、などという設定をしちゃってください。また、TimeLineを表示させるURLからそのタイムラインのIDを割り出せます。Railsな人には自明でしょうが、http://timeline.nifty.com/portal/show/2083の"2083"がIDになります。
続いて、APIを使用するためのキー(Timeline key)を取得します。TimeLineにログインした状態で/my_pageから取得できます。
これでTimeLine側の準備は完了です。本体をダウンロードしてください。ファイルの先頭付近に、timeline_keyとtimeline_idを設定する箇所がありますのでそこを書き換えてください。
$config = { :timeline_key => "your timeline - key", :timeline_id => Integer(timeline_id), }
を、こんな感じで。
$config = { :timeline_key => "abcdefghijkelmnopqrstuvwxyz", :timeline_id => 2083, }
実行する
specコマンド(script/spec含む)から実行する場合とRSpec on Railsを併用してRakeから実行する場合の二種類があります。どちらも基本は変わらず、
1. このフォーマッタをrequireする
2. フォーマッタのクラス名を指定する
という流れになります。
specコマンドから実行する場合は以下のようなコマンドになります。
spec -r timeline_formatter -f SpecDocWithTimeLine --color spec/models/**/*
この場合はSpecDocWithTimeLineというフォーマッタを利用していて、これはSpecDocフォーマッタ(-fsで出るヤツ)を実行しつつ、テスト結果をTimeLineにポストしています。
Rakeから実行したい場合はspec/spec.optsを以下のように修正してください
--require timeline_formatter --colour --format ProgressWithTimeLine --loadby mtime --reverse
これも各行に一つずつ、specコマンドへのオプションを渡しています。timeline_formatterをrequireし、formatオプションでProgressWithTimeLineフォーマッタを指定しています。このProgressWithTimeLineはspecから実行したときに出る、色付き"."を表示していくヤツです。"."を表示しつつ、裏側でTimeLineにポストします。
そのうえで、rake specとかをすると、テストが実行され結果がTimeLineにポストされます。
その他
あと、今回の件でRSpecのカスタムフォーマッタの書き方がよくわかったので、このコードを追いながら解説記事を書きます。ちょっと恥ずかしい。
*1:知っている人にはわざとらしすぎるww