diary

I like Hatena Star with a text selection.

2020-07-13 - kwargs警告をSentryに通知する

# config/initializers/warning.rb
class WarningAsError < StandardError
  def initialize(warning, caller)
    super(warning)
    # 例外に backtrace をセットする
    set_backtrace(caller)
  end
end

Warning.process('', keyword_separation: -> (warning) do
  # バックトレースの内、warning gemが出す部分は削る。
  caller = caller(2).drop_while { |path| path.match?(%r!/gems/warning-!) }

  # 警告メッセージからファイル名を削る
  message = warning.sub(/^.+: warning: /, '')

  err = WarningAsError.new(message, caller)

  # Sentryにwarning levelとして送信する。
  # levelをデフォルトのerrorと区別できて便利
  Raven.capture_exception(err, level: 'warning')

  # :default を返すと、デフォルトの動作(警告をstderrに表示)を維持する。
  :default
end)

弊社アプリもRuby 2.7.1で動くようになったので、Ruby 3のキーワード引数の警告をSentryに送信しようかなと考えている。 使うにはwarning gemが必要です。便利gem〜

短期的にはまあ大して役に立たないと思うのだけど、Ruby 3にアップグレードする際には警告がゼロになっている必要があるので、その時に警告を洗い出すのに使いたい。

これだけだと当然config/initializers/warning.rbよりも前に呼ばれるコードは見ないのだけど、まあそういうコードは手元でも実行するし、わざわざ通知せずとも警告に気がつくだろうと想像している。

set_backtracebacktrace_locationsには効かないのでうまく動くかちょっと不安だったけど、SentryのRubyライブラリはbacktraceを見ているようで、うまく動いてよかった。 この辺は使っているサービスによって動かないかもしれない。

このコードはCC-0としてライセンスするので、必要であればご自由にお使いください。


最近は松田円さんの作品をずっと読んでいる。マジで良い。

女装キャラとか男装キャラとか女の子っぽい男の子キャラとかかわいい男性とかが出てくる頻度が高い気がしていてとても良いですね。

現実世界でファンタジーやってる漫画が本当に好きなので、刺さる作品が多い。

今なら77円になってる作品もちょこちょこありそう。


github.com

rbs_railsで、ActiveSupport::Concernをいい感じにするためのコードを書いた。 これはcliにしてexposeしたいなあ。


本を読んでいると日本語の知らない単語をよく見る。

今日は「とりもなおさず」という言葉を見て、「あれ、見たことはある単語だけど実は意味を知らないな…?」と気がついたので調べた。「すなわち」みたいな感じっぽい。

これは意味が曖昧なままの単語の例だけど、本当に知らない(読めない)単語にもよく出会うのでそういうのは都度調べている。Kindle便利。でも忘れる。

そういえば「みなまで言うな」という慣用句を漫画を読むようになるまで知らなかった(こういう慣用句があると認識していなかった)。 なんで今までの人生で出会う機会がなかったんだろう、漫画専用の慣用句なのだろうか。