例外処理(begin, rescue, ensure, raise)

Rubyの**例外処理(Exception Handling)**は、プログラム中で発生しうるエラーに対処するための仕組みです。begin, rescue, ensure, raiseなどのキーワードを用いることで、エラー発生時の動作を制御し、プログラムの異常終了を防ぐことができます。以下にそれぞれの構文と使い方を詳しく解説します。


1. beginrescue

begin ブロック内の処理で例外が発生すると、rescue 節が実行されます。

基本構文

ruby
begin # エラーが発生する可能性のある処理 rescue [例外クラス] => 変数 # エラー発生時の処理 end

ruby
begin num = 10 / 0 rescue ZeroDivisionError => e puts "エラーが発生しました: #{e.message}" end

出力:

csharp
エラーが発生しました: divided by 0

2. ensure

ensure 節は、例外の有無にかかわらず必ず実行される処理を記述するのに使用します。リソースの解放などに使われます。

ruby
begin file = File.open("sample.txt", "r") # ファイル操作 rescue Errno::ENOENT puts "ファイルが見つかりません" ensure file.close if file end

3. raise

raise は、明示的に例外を発生させるキーワードです。自作の例外や条件付きのエラー発生に用います。

基本構文

ruby
raise "エラーメッセージ"

ruby
def divide(a, b) raise "0で割ることはできません" if b == 0 a / b end begin puts divide(10, 0) rescue => e puts "例外が発生: #{e.message}" end

4. 複数の rescue

複数の種類の例外に対応するには、rescue 節を複数書くことができます。

ruby
begin # 処理 rescue ZeroDivisionError puts "0で割ることはできません" rescue ArgumentError puts "不正な引数です" end

5. else 節(オプション)

begin ブロックで例外が発生しなかった場合に限り、else 節が実行されます。

ruby
begin puts "計算中" result = 10 / 2 rescue puts "エラー" else puts "成功: #{result}" ensure puts "終了処理" end

出力:

makefile
計算中 成功: 5 終了処理

まとめ

キーワード 役割
begin 例外が発生するかもしれない処理を囲む
rescue 例外発生時の処理を記述する
else 例外が発生しなかった場合に実行される処理
ensure 例外の有無にかかわらず常に実行される処理
raise 明示的に例外を発生させる

このように、Rubyの例外処理はシンプルで直感的に書けるため、堅牢なエラーハンドリングを行う上で非常に役立ちます。

他にもretryやrescueの省略形など、応用的な使い方もありますが、まずはこの基本構文をしっかりと理解することが重要です。

生成日:2025/05/03