カテゴリ: Ruby 更新日: 2025/11/30

Rubyの例外処理を完全ガイド!初心者でもわかるbegin/rescue/ensureの使い方

例外処理の構文基礎:begin/rescue/ensure の書き方(構文として理解)
例外処理の構文基礎:begin/rescue/ensure の書き方(構文として理解)

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

生徒

「Rubyのプログラムを実行したら、エラーが出て止まってしまいました。どうしたらいいですか?」

先生

「Rubyでは、例外処理という仕組みを使ってエラーが起きてもプログラムを安全に続けることができます。」

生徒

「例外処理って難しそうですが、どんなふうに書くんですか?」

先生

「Rubyでは、beginrescueensureを使うことで簡単に書けますよ。実際の例を見ていきましょう!」

1. 例外処理とは?

1. 例外処理とは?
1. 例外処理とは?

プログラムを実行するときに、予期しないエラーが発生することがあります。例えば、存在しないファイルを開こうとしたり、0で割り算をしてしまったりする場合です。Rubyでは、これらのエラーを例外(exception)と呼びます。

例外処理とは、エラーが発生したときにプログラムを途中で止めず、安全に処理を続けるための仕組みです。Rubyではbeginrescueensureというキーワードを使います。

2. beginとrescueの基本構文

2. beginとrescueの基本構文
2. beginとrescueの基本構文

Rubyでの例外処理の基本的な書き方は次のようになります。


begin
  # エラーが起こるかもしれない処理
rescue
  # エラーが起きたときの処理
end

このように書くことで、beginの中でエラーが発生しても、プログラムは止まらずにrescueに処理が移ります。

3. 実際の例を見てみよう

3. 実際の例を見てみよう
3. 実際の例を見てみよう

例えば、0で割り算をする処理を書いてみましょう。


begin
  result = 10 / 0
  puts result
rescue
  puts "エラーが発生しました!0で割ることはできません。"
end

エラーが発生しました!0で割ることはできません。

このようにrescueを使うと、プログラムがエラーで強制終了せずに、指定したメッセージを表示して処理を続けられます。

4. ensureで必ず実行される処理

4. ensureで必ず実行される処理
4. ensureで必ず実行される処理

ensureを使うと、エラーがあってもなくても必ず実行される処理を書くことができます。例えば、ファイルを開いたら最後に必ず閉じたい、というときに便利です。


begin
  file = File.open("sample.txt", "r")
  puts file.read
rescue
  puts "ファイルを開けませんでした。"
ensure
  file.close if file
  puts "ファイルを閉じました。"
end

ファイルを開けませんでした。
ファイルを閉じました。

この例では、ファイルが存在しなくてもensureの部分は必ず実行され、リソースを正しく解放できます。

5. 特定のエラーだけを捕まえる

5. 特定のエラーだけを捕まえる
5. 特定のエラーだけを捕まえる

rescueでは、どの種類のエラーを処理するか指定することができます。Rubyのエラーは例外クラスという形で定義されています。


begin
  result = 10 / 0
rescue ZeroDivisionError
  puts "0で割ることはできません。"
end

0で割ることはできません。

このように書くと、指定した種類のエラーだけをキャッチし、他のエラーはそのまま発生させることができます。

6. 例外処理を使うときの注意点

6. 例外処理を使うときの注意点
6. 例外処理を使うときの注意点

便利だからといって何でもrescueに頼るのはよくありません。なぜなら、本来は気づくべきバグや入力の間違いを隠してしまうことがあるからです。

  • 想定できるエラーだけをrescueする
  • ensureで後片付けを忘れない
  • エラー内容をログや画面に出して把握できるようにする

このように意識して例外処理を使うと、Rubyのプログラムを安全で安定したものにできます。

7. 実生活の例えで理解しよう

7. 実生活の例えで理解しよう
7. 実生活の例えで理解しよう

例外処理を身近な例で考えると理解しやすいです。

  • beginは「やりたいことを始める」
  • rescueは「トラブルが起きたら安全策に切り替える」
  • ensureは「最後に必ず片付けをする」

たとえば料理をするときに「食材を切る(begin)」→「包丁で指を切ったら絆創膏を貼る(rescue)」→「最後にまな板を洗う(ensure)」という流れをイメージすると、Rubyの例外処理の流れが分かりやすくなります。

まとめ

まとめ
まとめ

ここまで、Rubyの例外処理について、初心者でも理解しやすいように基礎から応用まで順番に見てきました。例外処理は、Rubyを使ったプログラム開発に欠かせない重要な仕組みであり、予期せぬエラーによってプログラムが突然止まってしまうことを防ぐための大切な考え方です。また、単にエラーを避けるだけではなく、「エラーが起きた時にどう対処するか」を明確に書けるようになることで、より堅牢で信頼できるコードを書くことにつながります。

Rubyでは、beginrescueensureを組み合わせるだけで、読みやすくわかりやすい例外処理を書くことができます。まず、エラーが起きる可能性がある処理はbeginの中にまとめます。そしてエラーが起きた場合にはrescueに処理が移り、安全に動作を続けることができます。さらにensureは、エラーの有無に関係なく必ず実行されるため、ファイルを閉じたり、接続を切断したりといった「後片付け」を行う場面で大いに役立ちます。

また、rescueでは「どのエラーを捕まえるのか」を指定することができ、たとえばZeroDivisionErrorIOErrorなど、特定のエラーだけを処理することもできます。これは、実際の開発でとても役立つポイントで、細かく制御することで、エラーの見落としを防ぎながら柔軟なコードを書くことが可能になります。

例外処理は、ただ使い方を覚えるだけではなく、どのタイミングで使うべきか、どう使うことが正しいのかを理解することが大切です。たとえば、単純にエラーを隠してしまうような書き方をすると、バグに気づかなくなったり、意図しない動作につながることがあります。逆に、適切な場所で例外処理を書くことで、ユーザーにとっても開発者にとっても安心して使えるプログラムに近づいていきます。

ここでは最後に、まとめとして例外処理を応用した少し実践的なサンプルコードを紹介します。

■ 例外処理の総まとめサンプルコード


def load_file(path)
  begin
    file = File.open(path, "r")
    content = file.read
    puts "読み込み成功:"
    puts content
  rescue Errno::ENOENT
    puts "指定されたファイルが見つかりませんでした。パスを確認してください。"
  rescue IOError
    puts "ファイルの読み込み中に問題が発生しました。"
  ensure
    file.close if file
    puts "処理を終了しました。(ファイルがあれば閉じました)"
  end
end

load_file("data.txt")

このプログラムでは、ファイルの読み込みに関するエラーを丁寧に処理し、さらにどのような状況でも最後に必ず後片付けを行いました。例外処理のポイントがしっかり詰まったコードになっているので、ぜひ自分の環境でも試してみてください。変化させながらコードを書くことで理解が深まります。

例外処理は、Rubyを学ぶ上で避けて通れない大切な概念です。最初は難しく感じるかもしれませんが、今回の内容をゆっくり何度か復習し、実際に手を動かしていけば、自然と使いこなせるようになります。エラーは決して怖いものではなく、正しく対処すればプログラムをより強力で安全なものにするための大切なヒントになります。

先生と生徒の振り返り会話

生徒

「例外処理って難しいイメージでしたけど、実際にコードを見ながら学ぶと意外と使いやすいですね!」

先生

「その通りです。特にbegin、rescue、ensureの流れは覚えてしまえば色んな場面で応用できますよ。」

生徒

「特定のエラーだけ捕まえる書き方も便利ですね。実際のアプリでも役立ちそうです!」

先生

「まさにそれが例外処理の良いところです。必要な処理だけ丁寧に扱うことで、プログラムがもっと安全になります。今後も実践しながら覚えていきましょう。」

関連記事:
カテゴリの一覧へ
新着記事
New1
データベース
SQLの処理が遅くなる原因とは?初心者向けにデータベースパフォーマンス最適化を完全解説
New2
Ruby
RubyのネストHash操作を徹底解説!digとtransformメソッドで複雑なデータも楽々
New3
Rails
Railsインデックス設計の極意!爆速サイトを作るためのスキーマ設計ガイド
New4
データベース
SQLのCOMMITとROLLBACKとは?トランザクション操作を初心者向けに完全解説
人気記事
No.1
Java&Spring記事人気No1
Ruby
PATHと環境変数の正しい設定!Windows・Mac・Linux別チェックリスト付き
No.2
Java&Spring記事人気No2
Rails
Railsで日本語と時刻の設定をしよう!初心者でも安心のlocale/zone初期設定チートシート
No.3
Java&Spring記事人気No3
Ruby
Rubyのハッシュを徹底比較!シンボルキーと文字列キーの違いと使い分け
No.4
Java&Spring記事人気No4
Rails
Railsマイグレーションの型選びを完全ガイド!初心者が迷わないカラム設計
No.5
Java&Spring記事人気No5
Ruby
WindowsでRubyをインストールする方法!RubyInstallerとMSYS2を使った完全ガイド
No.6
Java&Spring記事人気No6
Rails
RailsモデルとActive Record基礎|ID戦略を完全理解!AUTO INCREMENT・UUID・ULIDの比較と導入手順
No.7
Java&Spring記事人気No7
データベース
ACID特性とは?データベーストランザクションの信頼性を初心者向けに徹底解説
No.8
Java&Spring記事人気No8
Ruby
Rubyのハッシュ走査を完全マスター!each・each_key・each_valueの使い方