Help us understand the problem. What is going on with this article?

Railsアプリケーションの422エラーページの文言をどうするといいのか調べてみた

More than 5 years have passed since last update.

rails newでプロジェクトを作成すると、public配下に404.html, 422.html, 500.htmlというHTMLがデフォルトで生成されます。生成される文言は英語なので日本語にしようとした際に、そのままの翻訳ではユーザがこのエラーに遭遇したときにどうもわかりにくい気がするので、「404 文言」とかでGoogle先生に聞くと非常に参考になる文言をみつけることができます。

500も同様にGoogle先生でみつけられるのですが、422はなんだかどうもピンとくるのが見つけられなかったのです。

なので、そもそもこのエラーに遭遇するタイミングと他のサイトがどうしているのかどうかを調べてみました。

エラーに遭遇するタイミング

そもそも、422とはWikipediaによると、

422 Unprocessable Entity
処理できないエンティティ。WebDAVの拡張ステータスコード。

http://ja.wikipedia.org/wiki/HTTP%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89

ようするに、あるオブジェクトの変更などの処理がうまくできない場合に発生するエラーなのですかね。

Railsだとデフォルトで発生するのは、下記で:unprocessable_entityとなっている箇所で、認証トークンやXSSが間違っている場合や、レコードが不正だったり、うまく保存ができなかった場合に表示される感じなのかな。

config.action_dispatch.rescue_responses = {
  'ActionController::RoutingError'              => :not_found,
  'AbstractController::ActionNotFound'          => :not_found,
  'ActionController::MethodNotAllowed'          => :method_not_allowed,
  'ActionController::UnknownHttpMethod'         => :method_not_allowed,
  'ActionController::NotImplemented'            => :not_implemented,
  'ActionController::UnknownFormat'             => :not_acceptable,
  'ActionController::InvalidAuthenticityToken'  => :unprocessable_entity,
  'ActionController::InvalidCrossOriginRequest' => :unprocessable_entity,
  'ActionDispatch::ParamsParser::ParseError'    => :bad_request,
  'ActionController::BadRequest'                => :bad_request,
  'ActionController::ParameterMissing'          => :bad_request,
  'ActiveRecord::RecordNotFound'                => :not_found,
  'ActiveRecord::StaleObjectError'              => :conflict,
  'ActiveRecord::RecordInvalid'                 => :unprocessable_entity,
  'ActiveRecord::RecordNotSaved'                => :unprocessable_entity
}

http://guides.rubyonrails.org/configuring.html

他のサイト

次に、他のRailsで構築しているというサイトではどうしているのか見ていきたいと思います。

cookpadの場合

Railsで構築されているサイトと言えばcookpadさんですよね。

422.html

cookpad-422.png

500.html

cookpad-500.png

500との違いは、「しばらく時間をおいてもご覧いただけない場合」が「繰り返し同様の操作をしても改善されない場合」になってますね。

CrowdWorksの場合

最近上場したということで。

422.html

crowdworks-422.png

500.html

crowdworks-500.png

だいぶシンプルですね。

Qiitaの場合

ここもバックエンドがRailsですよね。

422.html

qiita-422.png

500.html

qiita-500.png

Qiitaの場合はフロントをJSでやっているのでいらないんでしょうね。

結論

cookpadさんの文言は非常にユーザ目線だと思いました。また、ExceptionNotifierとかをいれるているのであれば、crowdworksさんの500の文言は参考になりますね。あと、キャプチャにはいれていないのですが、QiitaさんのTwitterのツイートを埋め込むのはいいアイデアですね。

以上、今後エラーページをカスタマイズする際に参考にさせていただきます。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした