ウェブアプリケーションを作っていると
if !object.method
do_this
else
do_that
end
という方法でユーザを誘導する習慣が付いていますが、Rubyで組み込みやデスクトップアプリケーションなどを開発する際には下のようにする人が多いのではないでしょうか?
begin
do_this
do_that
rescue
error_handling_method($!)
end
こうしておいて
def do_this
raise 'Specific error message' if !some_method
end
などとそれぞれのメソッドの中でRuntime errorを発生させれば最後のrescueの所でまとめてエラーを処理できるので便利でした。例えばSTDOUTに表示させるとか、ログにまとめるとか、メールでエラーを報告するなどなど。
ちなみにRSpecではこのサイトに書いてある通り
it "should raise" do
expect{Object.non_existent_message}.to raise_error(NameError)
end
とすればテストが書けます。
Railsでも同じようにエラーの処理はできると思いますが、通常begin, rescue, endは使わないですね。ディベロッパー向けのAPI以外では、ウェブアプリケーションはエラーメッセージは極力詳細は出さない事もセキュリティー上大切なのでこのような設計になるのでしょうね。例外が発生したら多くの場合シンプルにbreakして500を返しますもんね…。ウェブサービスでもREST APIを作る人はもっと複雑なエラーハンドリングを開発しているんでしょうね。お疲れさまです。
No comments:
Post a Comment