プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Ruby on Rails
  • 【Ruby on Rails】エラー処理の概要
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Ruby on Rails】エラー処理の概要

12.02

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

Railsの内部で発生するエラーは下記の2つに分類できます。

  • アプリケーション固有のエラー(業務エラー、ユーザーに責任のあるエラー)
  • Rails固有のエラー(システムエラー、システムの不具合で開発者に責任があるエラー)

アプリケーション固有のエラーの場合

プログラム実装方針

基本的にはrescue等の例外処理は行いません。false、true等で分岐処理を記述するようにしましょう。

rescue_fromメソッド

あまり使うことはないかもしれませんが、アプリのコントローラー内で発生するエラーで手軽にエラー画面を出したい場合はコントローラーにデフォルトで用意されているrescue_fromメソッドが使えます。

具体的には下記のように記述します。

1
2
3
4
5
6
7
8
9
class コントローラ
  rescue_from XXXError, with: エラー処理メソッド  
 
  private
    def エラー処理メソッド(error)
      @error = error
      render :custom_error
    end
end

rescue_fromメソッドの注意点

非常に便利なメソッドなのですが、config.consider_all_requests_localの値に関わらず常時発動するためデバッグ時に不便になる点です。エラー詳細を隠す設定にしてしまうとアプリ固有のエラー内容まで隠蔽されてしまい開発速度が低下してしまう可能性があります。

Rails固有のエラーの場合(システムエラー)

プログラム実装方針について

Railsの共通処理が自動的にログに出力してくれるので基本的には何もしないのが正解です。rescueを使ってプログラムを続行させないようにしましょう。(Railsが自動でrescueの処理をしてくれています。)ただ、下記のような例外的なケースもあるので覚えておきましょう。

rescueを使いプログラムを続行させた方が良い例外的なケース

  • DBに大量データ登録する処理で途中でエラーが発生したからといって全件登録をストップさせることが仕様として問題があるケースの場合

なお、やむおえずrescueでプログラムを続行させる場合はログ出力や通知は必ず行うようにしましょう。

通知するための代表的なRubyGem

  • Bugsnag
  • Rollbar
  • Errbit

例外が発生した際に出す画面について

Railsは自動でログに障害内容を出力してくれますしエラー画面も自動で出してくれます。設定ファイルでどのように処理をさせるか決める必要があります。以下2つのどちらかの画面を出すという設定ができます。

  • デバッグ用画面
  • 本番用エラー画面

どの画面を出すかの設定ファイル

config/environments/development.rb

設定値

config.consider_all_requests_local

この値がtrueの時はデバッグ画面が表示されて、falseの時は本番用の画面が表示されます。(デフォルトではtrueに設定されているのでデバッグ用の画面が表示されることになります。開発されている中で何度か目にしたRailsのある行数でエラーが発生していますというような画面はデバッグ画面なのです。)

本番用エラー画面について

本番用エラー画面はHTTPステータスコードごとに用意されることになります。

ステータスコード 説明 HTMLの場所
404 ユーザーの求めているリソースを提供できない場合のエラー(Actionがない、データがない等) public/404.html
422 public/422.html
500 その他のシステムエラー全般 public/500.html

あくまで静的なページになります。ただ自分で好きなようなデザインをいじったりすることは可能です。

スポンサーリンク
  • 2019 12.02
  • miyabisan2
  • コメントを書く
  • Ruby on Rails
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2018 05.04

    【Webセキュリティ】ハッシュ関数(digest)、実装方法、パスワード運用について

  2. 2019 12.30

    【Ruby on Rails】「Model Spec(モデルスペック)」の基本

  3. 2018 06.18

    【Ruby on Rails】フォルダ構成や、主要ファイルについて

  4. 2018 06.20

    【Ruby on Rails】アセット(CSS,JavaScript)やマニフェストファイルの仕組み(Sprockets、Webpacker)

  5. 2022 09.04

    【Rails】「ロードパス」、「Zeitwerk」について

  6. 2019 12.01

    【Ruby on Rails】モデルのデータを絞り込む便利機能(scopeも)

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Ruby on Rails】URLの指定方法について…

【Ruby on Rails】ログ出力の記述法や様々な…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー