カテゴリ: Ruby 更新日: 2026/03/28

Rubyの例外処理を完全攻略!raiseやrescueの使い方を初心者向けに徹底解説

例外系制御:raise/rescue/retry/ensure の正しい使い方
例外系制御:raise/rescue/retry/ensure の正しい使い方

先生と生徒の会話形式で理解しよう

生徒

「Rubyでプログラムを実行しているときに、急にエラーが出て止まってしまうことがあります。これを防ぐ方法はありますか?」

先生

「それは『例外処理』という仕組みを使えば解決できます。Rubyでは、raiseやrescueといった命令を使って、エラーが起きてもプログラムを安全に動かし続けることができるんですよ。」

生徒

「例外処理……難しそうな名前ですね。パソコンをあまり触ったことがない私でも理解できるでしょうか?」

先生

「大丈夫です!日常生活のトラブル対応に例えると非常に分かりやすいですよ。基本から順番に、正しい使い方を見ていきましょう!」

1. 例外処理とは?エラーを怖がらないための基礎知識

1. 例外処理とは?エラーを怖がらないための基礎知識
1. 例外処理とは?エラーを怖がらないための基礎知識

プログラミングをしていると、必ず「エラー」に遭遇します。例えば、数字をゼロで割り算しようとしたり、存在しないファイルを読み込もうとしたりすると、プログラムは「どうすればいいかわからない!」とパニックを起こして強制終了してしまいます。このパニック状態のことをプログラミング用語で例外(れいがい)と呼びます。

例外処理とは、このパニックが起きたときに「落ち着いて、代わりにこの処理をしてね」とあらかじめ指示を出しておく予備動作のことです。Rubyでは主にbeginからendまでのブロックの中に、エラー対策のコードを書いていきます。

これを日常生活で例えるなら、「もし外出中に雨が降ってきたら(例外発生)、傘をさす(対処法)」というルールを決めておくようなものです。ルールが決まっていれば、雨が降ってもパニックにならずに済みますよね。Rubyの例外系制御(raise, rescue, retry, ensure)をマスターすれば、途中で止まらない丈夫なプログラムが作れるようになります。

Rubyの文法を基礎からしっかり固めたい人や、 現場で役立つ「テスト駆動開発」の考え方まで身につけたい人には、 評価の高いこの一冊がおすすめです。

プロを目指す人のためのRuby入門をAmazonで見る

※ Amazon広告リンク

2. rescueでエラーを捕まえて対処する方法

2. rescueでエラーを捕まえて対処する方法
2. rescueでエラーを捕まえて対処する方法

まずは、エラーが起きたときにプログラムを止めないための最も基本的な命令、rescue(レスキュー)について学びましょう。名前の通り、エラーからプログラムを救出するためのものです。

基本的な形は、beginで処理を開始し、エラーが起きそうな場所にrescueを置きます。もしエラーが発生しなければrescueの中身は無視され、エラーが発生したときだけ実行されます。


begin
  # ゼロで割り算をする(エラーが起きる処理)
  number = 10 / 0
  puts "計算結果は #{number} です"
rescue
  # エラーが起きたときに実行されるレスキュー隊
  puts "エラーが発生しました!ゼロで割ることはできません。"
end

このコードを実行すると、本来ならエラーで止まるはずの場所でrescueが発動し、画面にメッセージを出した後にプログラムを安全に終了させます。エラーをキャッチするという感覚を掴むことが大切です。

3. raiseを使って意図的に例外を発生させる

3. raiseを使って意図的に例外を発生させる
3. raiseを使って意図的に例外を発生させる

次に紹介するのはraise(レイズ)です。これは、プログラムの中で「ここでエラーを発生させなさい!」と自分から命令を出すときに使います。

「わざとエラーを出すなんて変だな」と思うかもしれませんが、これは非常に重要なテクニックです。例えば、ユーザーが入力した年齢がマイナスだった場合、計算を続けるのはおかしいですよね。そんなときにraiseを使って、異常態勢であることをシステムに知らせます。


def check_age(age)
  if age < 0
    # 意図的にエラーを発生させる
    raise "年齢にマイナスの値は入力できません!"
  end
  puts "あなたの年齢は #{age} 歳ですね。"
end

begin
  check_age(-5)
rescue => e
  # 発生したエラーのメッセージを表示する
  puts "エラーの内容: #{e.message}"
end

ここではrescue => eという書き方を使っています。これにより、raiseで投げたメッセージが変数eの中に入り、後から内容を確認できるようになります。

4. retryで処理をもう一度やり直す仕組み

4. retryで処理をもう一度やり直す仕組み
4. retryで処理をもう一度やり直す仕組み

エラーが起きたとき、ただ諦めるのではなく「もう一度だけ試してみたい」という場合があります。例えば、インターネットの接続が一瞬切れてしまったときなどは、数秒待ってからやり直せば成功するかもしれません。そんな時に使うのがretry(リトライ)です。

retryが呼ばれると、Rubyはbeginの最初に戻って処理をやり直します。ただし、無限にやり直すとプログラムが永遠に終わらなくなるので、回数を決めて使うのが一般的です。


attempts = 0

begin
  attempts += 1
  puts "#{attempts}回目の挑戦です。"
  
  # 3回目まではわざと失敗させる
  if attempts < 3
    raise "まだ接続できません"
  end
  
  puts "無事に成功しました!"
rescue => e
  if attempts < 5
    puts "エラーが起きたのでやり直します: #{e.message}"
    # beginの最初に戻る
    retry
  else
    puts "何度も失敗したので諦めます。"
  end
end

この仕組みを使えば、一時的なトラブルに対して非常に柔軟に対応できる、粘り強いプログラムが書けるようになります。

5. ensureで何があっても必ず実行する後処理

5. ensureで何があっても必ず実行する後処理
5. ensureで何があっても必ず実行する後処理

例外処理の最後を飾るのがensure(エンシュア)です。これは、エラーが起きようが起きまいが、絶対に最後に実行されるコードを書くための場所です。

例えば、ファイルを開いて中身を読み込むプログラムを考えてみましょう。読み込み中にエラーが起きても、開いたファイルは最後には必ず閉じなければなりません。もし閉じ忘れると、パソコンのメモリを無駄に使い続けてしまう原因になります。


begin
  puts "ファイルを開きます。"
  # 何か難しい処理をすると仮定
  raise "処理中にトラブル発生!"
rescue
  puts "トラブルを解決しました。"
ensure
  # エラーの有無に関わらず、必ず実行される
  puts "最後に必ず後片付けをします。"
end

このensureのおかげで、大切な「後片付け」を確実に終わらせることができ、プログラムの信頼性がぐっと高まります。

6. 特定のエラーだけを捕まえる賢い書き方

6. 特定のエラーだけを捕まえる賢い書き方
6. 特定のエラーだけを捕まえる賢い書き方

これまではどんなエラーも一括でrescueしてきましたが、実は「ゼロ除算のエラーだけ対処したい」「ファイルが見つからないエラーだけ対処したい」といった具合に、エラーの種類を指定することができます。

これを例外クラスの指定と呼びます。Rubyには最初から様々なエラーの種類が定義されています。特定の名前を指定することで、その種類のトラブルにだけ特化したレスキュー隊を派遣できるのです。

  • ZeroDivisionError:ゼロで割ったとき
  • NoMethodError:存在しない命令を呼び出したとき
  • RuntimeError:一般的なエラー

適切なエラーを指定することで、予期せぬ大きな不具合を隠してしまう心配がなくなり、より正確なデバッグ(間違い探し)ができるようになります。

7. 例外処理を使うときの注意点とマナー

7. 例外処理を使うときの注意点とマナー
7. 例外処理を使うときの注意点とマナー

例外処理は非常に強力ですが、何でもかんでもrescueで囲めばいいというわけではありません。初心者が陥りがちなのが、「原因がわからないけど、とりあえずエラーが出るからrescueで隠しちゃえ」という考え方です。

エラーを無理やり隠してしまうと、プログラムが間違った動きをしていることに気づけなくなり、後で取り返しのつかない大きな問題に発展することがあります。これを例外の握りつぶしと呼び、プログラミングの世界では避けるべき悪い習慣とされています。

例外処理を使うのは、「どうしても避けられない外部要因(ネットが切れる、ファイルが消えている等)」や「エラーが起きたときの正しい対処法が決まっているとき」だけに絞るのが、上級者への近道です。

8. 実践編:例外処理を組み合わせて使ってみよう

8. 実践編:例外処理を組み合わせて使ってみよう
8. 実践編:例外処理を組み合わせて使ってみよう

最後に、これまで学んだbegin, rescue, ensureをすべて使った、より実践的なコードを見てみましょう。一見複雑に見えるかもしれませんが、一つ一つの部品の役割を思い出せば大丈夫です。


def process_data(value)
  begin
    puts "--- 処理を開始します ---"
    
    if value == nil
      raise "データが空っぽですよ!"
    end
    
    result = 100 / value
    puts "計算に成功しました: #{result}"
    
  rescue ZeroDivisionError
    puts "エラー対処:ゼロでは割れません。"
  rescue => e
    puts "その他のエラー対処:#{e.message}"
  ensure
    puts "--- 処理が終了しました(必ず実行) ---"
  end
end

# 正常な実行
process_data(10)
# ゼロ除算エラーの実行
process_data(0)
# raiseで指定したエラーの実行
process_data(nil)

このように役割を分担させることで、どんな事態が起きても動じない、プロフェッショナルなプログラムの土台が出来上がります。

9. コンピュータの気持ちになって考える重要性

9. コンピュータの気持ちになって考える重要性
9. コンピュータの気持ちになって考える重要性

プログラミングの初心者にとって、エラー画面は怖いものに見えるかもしれません。しかし、例外処理を学んだ今のあなたなら、エラーを「コンピュータからの親切なお知らせ」として捉えることができるはずです。

「このまま動かすとパソコンが壊れるから止まるね」と教えてくれるのが例外です。それに対して「教えてくれてありがとう、じゃあこう対処するよ」と返すのが例外系制御の役割です。

raiseやrescueを正しく使いこなすことは、コンピュータとのコミュニケーションをより深く、円滑にすることに他なりません。最初は失敗しても構いません。何度も例外を発生させては救出する練習を繰り返して、Rubyという言葉に慣れていってくださいね。

関連記事:
カテゴリの一覧へ
新着記事
New1
Ruby
Rubyで学ぶ金額計算と消費税の基本!端数処理と銀行丸めを初心者向けにやさしく解説
New2
データベース
SQL実行順序を完全攻略!WHEREとSELECTの違いを初心者向けに徹底解説
New3
Ruby
Rubyの例外処理を完全攻略!raiseやrescueの使い方を初心者向けに徹底解説
New4
Rails
Railsビューの条件分岐とループを完全ガイド!ifとeachの可読性とヘルパー抽出まで徹底解説
人気記事
No.1
Java&Spring記事人気No1
Rails
RailsのCSRF対策を完全解説!authenticity_token・SameSite・APIモードまで初心者向けに理解
No.2
Java&Spring記事人気No2
Rails
RailsでXSSを防ぐ完全ガイド|ERB自動エスケープ・sanitize・Content Security Policy設定
No.3
Java&Spring記事人気No3
Ruby
Rubyの真偽値とnilを徹底解説!初心者が知っておくべき判定ルールと安全な書き方
No.4
Java&Spring記事人気No4
データベース
PostgreSQL配列型(Array)入門ガイド!初心者でもわかるデータベースの便利な使い方
No.5
Java&Spring記事人気No5
データベース
Redisのmaxmemory設定とは?メモリ管理とパフォーマンス向上の秘訣を初心者向けに解説
No.6
Java&Spring記事人気No6
データベース
データベース設計の要「主キー(プライマリキー)」とは?役割と正しい設計方法を初心者向けに徹底解説
No.7
Java&Spring記事人気No7
データベース
Redis入門ガイド!初心者でもできるインストール方法と初期設定を徹底解説
No.8
Java&Spring記事人気No8
データベース
PostgreSQLインデックス徹底解説!B-tree・GIN・GiSTの違いを初心者向けに紹介