【Ruby3.x】Exception::cause()メソッドの使い方
causeメソッドの使い方について、初心者にもわかりやすく解説します。
作成日: 更新日:
基本的な使い方
causeメソッドは、現在の例外が発生するきっかけとなった、元の例外(原因となった例外)を取得するメソッドです。Rubyでは、ある例外を捕捉した際に、その例外を「原因」として新しい例外を発生させることができます。このようにして例外が別の例外を引き起こすことを「例外の連鎖」と呼び、causeメソッドはこの連鎖の根源にある例外をたどるために使われます。
例えば、データベースへの接続エラーが発生した際に、それを捕捉して「データ保存失敗」というより高レベルなアプリケーション固有の例外を発生させたとします。この「データ保存失敗」例外のcauseメソッドを呼び出すと、元のデータベース接続エラーの例外オブジェクトが返されます。これにより、最終的にユーザーに表示されたエラーの背後にある、実際の技術的な問題が何であったかを明確に把握できます。
この機能は、複雑なシステムにおいてエラーの根本原因を追跡し、デバッグ作業やエラーログの解析を効率的に行う上で非常に重要です。エラーの発生経緯を明確にすることで、問題解決までの時間を短縮し、システムの安定性向上に貢献します。システムエンジニアを目指す方にとって、エラーの連鎖を理解し、causeメソッドを使って原因を特定するスキルは、安定したアプリケーションを開発・運用する上で不可欠な知識です。
構文(syntax)
1def generate_original_error 2 raise ArgumentError, "Original source of the issue" 3end 4 5begin 6 begin 7 generate_original_error 8 rescue ArgumentError => original_exception 9 raise RuntimeError, "A high-level failure occurred" 10 end 11rescue RuntimeError => wrapped_exception 12 puts "High-level exception: #{wrapped_exception.message}" 13 if wrapped_exception.cause 14 puts "Underlying cause: #{wrapped_exception.cause.class}: #{wrapped_exception.cause.message}" 15 else 16 puts "No specific underlying cause found." 17 end 18end
引数(parameters)
引数なし
引数はありません
戻り値(return)
Exception か nil
cause メソッドは、例外が発生した直接の原因となった別の例外オブジェクトを返します。もし、その例外に直接の原因となる例外が設定されていない場合は、nil を返します。