どうも @shutooike です!
インゲージには "内部品質の担保/向上" をミッションとしたQAチーム *1 があります。
今回は Ruby や Rails のバージョンアップ対応で大事な Deprecation Warning を Slack に通知するようにした話です。
実装
Ruby 編
Ruby 2.4 から提供されている Warning モジュールを使ってフックを書くことができます
以下のようなコードで Slack に通知するようにしました。
同じエラーを一定回数までしか通知しないようにしていたり、正規表現を使ってスキップする通知を設定できるようになっています。
module Warning SEEN = Hash.new(0) SKIP_PATTERN = Regexp.union( /\A\S+:\d+: warning: example message /, ) def self.warn(msg) # 同じ警告は一定回数までは Slack に通知して、多すぎたら無視する。 if SEEN[msg] < 5 SEEN[msg] += 1 super return if msg.match?(SKIP_PATTERN) SlackNotify.ruby_warning_log(msg) # Slack 通知処理 end end end
Rails 編
Rails の Deprecation Warning も上の warn メソッドの仕組みを使って通知しています。
ActiveSupport::Deprecation.behavior = -> (message, _callstack, _deprecation_horizon, _gem_name) do warn message end
今回のコードはパートナーの方が提案・実装してくれました!感謝 🙏
おわりに
本当はテスト環境だけで Deprecation Warning を全てキャッチできたらカッコいいのですが、そうもいかないので併用しています。
実際に通知で助かったことが結構あるので重宝しています。
宣伝
QAチームは頼もしいメンバーと日々内部品質を担保/向上させています。興味ある人はカジュアル面談しましょう!
チームがどんなことをしているかについて発表したこともあるので興味があれば見てください!
*1:外部品質は内部品質から作れられると考えているのでQAという名前にしてます