Effective Rubyを読んでいます(4)

tl;dr

「Effective Ruby」の項目24から項目27まで読みました。 :arrow_down: 目次です。

  • 項目24 リソースはブロックとensureで管理しよう
  • 項目25 ensure節は最後まで実行して抜けるように作ろう
  • 項目26 retryでは回数の上限を設け、頻度を変化させ、オーディットトレイルを残そう
  • 項目27 スコープから飛び出したいときにはraiseではなくthrowを使おう

新しく知ったこと

例外が発生した場合に、オーディットトレイルを残す(項目26)

項目26の オーディットトレイルを残す という話題に興味を持ちました。 オーディットトレイルを残すとは、例外が発生した場合にログを残すということです。 例えば、リトライ原因の1回目と2回目の例外が異なった場合に、ログを残さないとなぜリトライが発生しているかの原因特定が難しいからです。

僕は、例外のリトライ処理をいつも次のように実装しています。そのため、オーディットトレイルを残していなかったことに気づきました。

class  NetWorkNotConnectionError < StandardError; end

retries = 0

begin
  # 処理
rescue NetWorkNotConnectionError=> e
  raise if retries >= 3
  retries += 1
  sleep(retries ** 2)
  retry
end