スキップしてメイン コンテンツに移動

Ruby例外クラス階層徹底

Ruby例外クラス階層徹底

例外クラスの基本

Ruby実践において、例外クラスはエラー処理の中心です。例外は raise で発生させ、begin…rescue…end で捕捉します。例外クラスは Exception を継承し、さらに StandardError を継承したクラスが一般的に使用されます。StandardErrorRuntimeErrorNoMethodErrorTypeError などの標準例外を含む親クラスです。

例外クラスの継承関係は階層構造で表され、ExceptionStandardErrorRuntimeError のように段階的に細分化されます。これにより、特定のエラーだけを捕捉したり、すべての標準例外をまとめて処理したりできます。

標準例外の階層構造

Rubyの標準例外は以下のように階層化されています。

Exception
├─ StandardError
│  ├─ RuntimeError
│  ├─ NoMethodError
│  ├─ TypeError
│  └─ ・・・

この構造を理解すると、rescue RuntimeError で実行時エラーだけを捕捉し、rescue StandardError で全ての標準例外を捕捉できます。Exception を直接捕捉すると、システム例外(SystemExit など)まで含まれるため、通常は避けるべきです。

カスタム例外の作り方

独自のエラー処理を行いたい場合は、カスタム例外クラスを作成します。カスタム例外は StandardError を継承し、必要に応じてメソッドや属性を追加します。

class MyCustomError < StandardError
  attr_reader :detail

  def initialize(message = "カスタムエラーが発生しました", detail = nil)
    super(message)
    @detail = detail
  end
end

begin
  raise MyCustomError.new("失敗しました", {code: 123})
rescue MyCustomError => e
  puts e.message          # 失敗しました
  puts e.detail[:code]    # 123
end

このように継承と階層構造を活用することで、エラーの種類を明確にし、適切な処理を実装できます。Ruby実践では、例外クラスを正しく設計し、エラー処理を堅牢にすることが重要です。

この記事はAIによって作成されました。

コメント