こんにちは! みなさん! 今日も元気に Rails を使ったウェブアプリケーションの開発を行っていますか? わたしは元気ではありませんが、がんばってコードを書き続けています。
さて、ウェブアプリケーションに限った話ではありませんが、アプリケーションの開発にあたって大切なのはエラーを正しく確認してそこを修正していくというものがあります。エラーが発生しないアプリケーションを開発するというのが大前提ではあるのですが、開発するのが人間である以上どうしてもミスが起こります。
というわけでエラーが発生したらそれを開発者側に伝えられる良いのですが、発生したエラーを全て通知するということをしていると同じような内容のエラーが発生している場合には、それを切り分けるという手間が発生します。これは明確に無駄な工数となってしまい、また見落としを発生させてしまいがちです。なので、適切にエラー情報をまとめて、それを選り分ける仕組みづくりが大切です。
そこで便利に使えるウェブサービスが Bugsnag です。
Bugsnag は前述したアプリケーションで発生したエラーを送信すると、それを適切にまとめて整理した上で開発者に通知してくれるウェブサービスです。使いかたも単純で Bugsnag のアカウントを作り API Key を手に入れたあとは Bugsnag 側が提供している Ruby ライブラリーの README の手順に従えば通常の Rails を使ったウェブアプリケーションであればそれだけで Bugsnag の導入は完了です。
非常にお手軽です。
……で済めば良かったのですが、自身の手元の開発環境では発生したエラーの確認がきちんとできるのですが、ステージング環境やプロダクション環境では確認ができませんでした。
ステージング環境とプロダクション環境で確認できなければ意味がないので、どうしたものかと思っていましたが、少しかんがえたら原因は単純なものでした。アプリケーション側で rescue_from
を用いて例外を握り潰し独自のテンプレートを表示させていたためでした。
単純な原因によって発生している問題なので、解決方法も単純で、
class ApplicationController < ActionController::Base
# ...
unless Rails.env.development?
rescue_from Exception, with: :handle_500
end
# ...
def handle_500(exception = nil)
# 明示的に Bugsnag へ例外を通知する
if exception.is_a? Exception
Bugsnag.auto_notify(exception)
end
render template: "errors/500"
end
end
のように Bugsnag.auto_notify
を使い、例外を明示的に Bugsnag 側に通知するだけで解決です。便利ですね。
エラーを確認しながら、一つづつ潰して、元気に元気にがんばって開発を進めましょう。
元気!