vcr の結果はバージョン管理に含めるべきかどうか

vcr は便利な gem で、外部の API などと通信するときにレスポンスをキャッシュして、以降はそのキャッシュを利用してテストを書くことができる gem です。 少し癖はありますが基本的には便利で、vcr 自体については railscasts とかに詳しいと思います。

一方で使っていて、確信を持てなかったのが、その vcr を使ったキャッシュををバージョン管理してしまっていいかでした。 自分は含めて使っていましたが、PR の差分も大きくなるし、いつも少し迷ってました。(言語化できない罪悪感があった)

railscasts のコメントの中でメンテナの Myron Marston さんがこのことについて書いていたのでこれを訳しておこうと思います。

これはトレードオフの問題で、あなたがどうしたいのかで変わってきます。自分自身の使い方としては、VCR cassets をバージョン管理する傾向が多いです。 その理由は、ある特定のタイミングでどんな HTTP response だったかの歴史を持つことができるのが好きだからです。git bisect をして、テストを通すことも可能です。 もし cassets がコミットされていなければ、そして HTTP response が変わっていたら、古い状態でテストが通った時の commit しかないため大変になるでしょう。

一方で cassets をコミットするということは、多くのファイルができるため git リポジトリが膨れ上がります。 またレスポンスを手動で微調整してテストを通すことも簡単になります。 私は cassets (vcr のキャッシュ) をコミットしないことはそれをただキャッシュとして扱うことだと思っていて好ましく思います。(訳が怪しい)

最終的にはあなたがどう考えるか次第です - 今ここであげたメリット・デメリットがあなたにとってどちらが大切かということを考えてみてください。

http://railscasts.com/episodes/291-testing-with-vcr?view=comments#comment_162799

時としてバージョン管理していいかどうか迷うような状況は色々な理由でやってきたりすることはあると思うのですが、こういう指針があるのはありがたいなーと思いました。

Updated.

railcasts の Ryan さんにこのコメントの部分だけ訳していいですか?って聞いたら、いいよと言ってくれました。