requireとrescue

なんとなく今日からRubyのよく書くパターンを紹介していくことにする。

上?から順番にまずはrequire。

begin
  require 'ファイルがある時だけ読むライブラリとか'
rescue LoadError
end

requireしたいファイルがないとエラーになるのでrescueしますが、rescueしても何もしません。
そのライブラリがあれば効率よく処理できるけど無くても何とかなる時や、そのライブラリがあればさらに多機能になるように作る時とかにこういうことをすることがあります。
ちなみにLoadErrorはStandardErrorじゃないので省略できません。rescueは型名を省略するとStandardErrorしかrescueしてくれないからです。TimeoutErrorなんかもつい忘れてしまうことが多いので気をつけましょう。

# 駄目な例
require 'ファイルがある時だけ読むライブラリとか' rescue nil # LoadErrorは捕捉できない

この場合rescue修飾子は効果がありません。rescue修飾子には例外の種類が指定できないので、rescueできるのはデフォルトのStandardErrorだけになるためです。