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では利用していませんでした。 
デザインも頼めるシステム開発会社をお探しならBPS株式会社までどうぞ 開発エンジニア積極採用中です! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

hachi8833

Twitter: @hachi8833、GitHub: @hachi8833 コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。 これまでにRuby on Rails チュートリアル第2版の半分ほど、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れてそれぞれ一部を翻訳。 かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。 実は最近Go言語が好き。 仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

BPSアドベントカレンダー

週刊Railsウォッチ

インフラ

ActiveSupport探訪シリーズ