とーますメモ

Ruby on Rails / Goなどの学習メモ

【Rails】独自例外の置き場所(配置ディレクトリ)について

自分用メモ。

日本語で検索しても情報が出てこなかったので
ちょっと調べてみた。

調べ方としてはGithubのコード検索で「< StandardError」で検索して
出てきたコードがどのディレクトリに配置されているのかで調査。

10件〜15件ぐらい見た感じだと、大体が

lib」ディレクトリ内に入れる。
※(中でerrorsなどのサブディレクトリ内に分けているケースも含む)

他には「app」ディレクトリ内に「exceptions」っていうディレクトリを作って入れてるケースなどもあった。

調べている最中で以下のようなStackOverflowも引っかかった。
Where to define custom error types in Ruby and/or Rails? - Stack Overflow

色々とやり方があるみたい。。
自分は以下の方針で行こうと思う。

1)「lib内」案
他のアプリでも再利用できるExceptionの場合はlib以下に入れる。
アプリの規模が大きい場合はサブディレクトリを別途作成し、その中で管理する。

2)「app/exceptions内」案
あくまでもそのアプリ内でのみ使用すると想定される独自Exceptionの場合はapp/exceptions以下に入れる。
アプリの規模が大きい場合はサブディレクトリを別途作成し、その中で管理する。


例)「lib内」案の例

lib/exceptions.rbを作成

module Exceptions
  class AuthenticationError < StandardError; end
  class InvalidUsername < AuthenticationError; end
end

config/applications.rbに以下を追加

config.autoload_paths += Dir["#{config.root}/lib/**/"]

使用

raise Exceptions::InvalidUsername


[参考]
rubyでエラーコード付きの独自例外クラスを作成 + カスタムloggerで出力 - のんびりSEの議事録