Tech Racho エンジニアの「?」を「!」に。
  • 開発

Ruby 2.5のカスタマイズ可能なWarningモジュール(翻訳)

概要

原著者の許諾を得て翻訳・公開いたします。


idiosyncratic-ruby.comより

Ruby 2.5のカスタマイズ可能なWarningモジュール(翻訳)

Ruby 2.51から、Warningモジュールを用いてKernel#warnの振る舞いをカスタマイズできるようになりました。やり方をご説明します。

def Warning.warn(w)
  # superは元の振る舞い(#stderrへの出力)を呼び出す
  super "\e[31;1mRUBY WARNING: \e[22m#{w.sub(/warning: /, '')}\e[0m"
end

# # #
# 例

warn "test"
# => RUBY WARNING: test

{ a: 1, a: 2 }
# => RUBY WARNING: (irb):4: key :a is duplicated and overwritten on line 4

$VERBOSE = true # level 2 warningsを表示
def a() end
def a() end
# => RUBY WARNING: (irb):8: method redefined; discarding old a
# => RUBY WARNING: (irb):6: previous definition of a was here

Jeremy Evans氏作の ruby-warning gemを使うと、さらにいくつかのwarning機能を解き放てます。

require "warning"

Warning.ignore /duplicated and overwritten/
{ a: 1, a: 2 }
# => なんも出ない

$VERBOSE = true
Warning.ignore :method_redefined
def a() end
def a() end
# => なんも出ない

参考

関連記事

Ruby: ありそうでなかったRubyリファレンスの決定版を作った(翻訳)

Ruby: シングルトンオブジェクトをデフォルト引数として使う(翻訳)


  1. Warningモジュールそのものは既にRuby 2.4からありますが、Kernel#warnでは利用していませんでした。 

CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。