VCR gemでアクセストークンとかをいいかんじにする術
こんばんは。おなかが空きました。きたけーです。
最近、RubyでWeb APIのラッパーライブラリをつくっていて、VCR gemを使っています。 VCR gemは、テストでおこなうHTTPの通信を初回に記録し、次回以降は記録された内容をつかう(通信を偽装する)ことで、テストの実行時間の短縮、再現性の確保を図るライブラリです。(詳しい使い方は vcr/vcr · GitHub を参照のこと)
そんな便利なgemなのですが、Web APIを叩く通信の内容を記録する仕様上、そのままでは、アクセストークンなどの知られたらまずい情報も記録されてしまいます。
filter_sensitive_data option
VCRは、この問題に対応するために filter_sensitive_data optionを用意してくれています。 記述例はこんなかんじ
VCR.config do |c| c.stub_with :webmock c.cassette_library_dir = 'cassettes' c.filter_sensitive_data('<ACCESS_TOKEN>') { ENV['ACCESS_TOKEN'] } end
こう記述しておくと、filter_sensitive_data メソッドに付いたブロックで評価した内容が通信に含まれていたら(上の記述例だと環境変数になっています。dotenv
gemを使って、トークンを.env
に記述するとよいでしょう)、記録する際に内容をメソッドの引数(<ACCESS_TOKEN>
)に置き換えてくれます。
次回、記録された内容を利用する際は、前回、置き換えた内容をブロックで評価した内容に戻してくれます。