Sooey

2014-12-31 12:11:47 +0900

Rails 4.2以降でストリーム(STDINなど)への出力を抑止・キャプチャする話。

Rails 4.1までに含まれるActiveSupportでは、Kernel#captureやそのエイリアスであるsilenceメソッドを利用することで、標準出力などへの出力内容を取得したり、出力を抑止することができていました。

これは、例えば「Herokuのdrainを監視する各種アドオン(TreasureDataやFlyDataなど)に対して、アプリがSTDOUTにJSONを出力することでデータを受け渡す」ような実装をしている場合に、テスト実行時などに出力を抑止したり出力内容を検証するようなケースで重宝していました。

Rails 4.2ではそれらのメソッドがスレッドセーフではないことを理由にDeprecatedとなり、将来的には削除されることとなりました。

今後は、上記のIssueでコメントされているRubyTapasで紹介されたコードなどをspec/supportに置いて参照するのが妥当かな、というのが現時点での認識です。