Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Rubyでは、例外処理をbegin~rescue~endの構文により、ブロックを利用して記述します。なお例外処理とは、プログラムがエラーとなって途中で停止させず、利用者にエラー発生を伝えるメッセージを表示する機能などに使われ重要な機能です。

WebシステムなどRubyで作成するアプリケーションでは必須の機能なので、ぜひ使い方をマスターしておきましょう。今回は、このRubyにおける、beginで始まる例外処理の書き方について詳しく解説します。

この記事の結論
  • 例外処理はプログラムを強制停止せずに、利用者にエラーを通知する仕組み
  • Rubyの例外処理はbegin~rescue~endの構文で記述する
  • Rubyの例外処理はbeginを省略した書き方も可能

Rubyにおける例外処理

Webシステムなど、人が操作するプログラムでは、想定外の操作によって誤動作するケースが必ずあります。そのような場合、プログラムを強制停止せず、正しい操作を案内したり、開発者への連絡を促さなければなりません。そのために使われるのが、例外処理です。もちろん、Rubyでも例外処理が組み込まれています。

まずは、例外処理の基本と、Rubyにおける例外処理について紹介します。

例外処理とは何か

どんなに優れたシステムでも、そのプログラムが実行された際、開発者が意図した入力で動作するとは限りません。意図しない入力で、エラーが発生することはよくあります。しかし、そのエラーで、プログラムが強制的に停止したらどうなるでしょうか。

そのプログラムが停止するばかりではなく、関連したサービスが使えなくなります。さらに、そのエラーの原因が解らなければ悪い評判が立ち、利用者離れを招いてしまいます。利用者に、正しい操作を示すか、開発者への連絡しもらい、修正しなければなりません。

そのため、例外処理を使い、プログラムを強制停止せずに、エラーの原因を表示する処理を実装するのが一般的です。

Rubyの例外処理

JavaやC++などの他のプログラミング言語では、例外処理のためにtry~ctachが使われますが、rubyの例外処理は、begin~rescue~endです。

そして、Rubyの例外処理の使い方は、beginの次に検査対象となるプログラムを記述し、rescueの次に先ほどのプログラムで例外処理が発生した場合の処理を記述します。

また、Rubyで発生する例外には複数のエラータイプがあるので、どのエラータイプが発生したかによってrescueの処理を切り替えることも可能です。

beginを省略した書き方も可能

Rubyでは、クラスやモジュール、メソッド定義の中に限り、beginを省略し、rescueだけのブロックだけで例外処理を書くことも可能です。なお、このbeginを省略した書き方は、後で例を紹介しながら詳しく解説します。
Rubyを学びたい方におすすめのスクールはこちら

begin~rescue~endの文法

例外処理が記述可能なプログラム言語は複数ありますが、その基本は、例外が発生する処理をブロックで囲い、それに続くブロックで例外が発生した場合の処理を記述します。そして、この書き方は、Rubyでも同じです。

Rubyにおける例外処理の書き方の基本は次のとおりです。

begin
例外の発生をチェックする対象となるプログラム
rescue
例外が発生した場合の処理
end

また、エラータイプを指定して、複数の例外処理を記述することも可能です。

begin
例外の発生をチェックする対象となるプログラム
rescue エラータイプ
指定したエラータイプの例外が発生した場合の処理
rescue エラータイプ
指定したエラータイプの例外が発生した場合の処理
end

また、例外処理が発生しなかった場合の処理と、例外が発生してもしなくても実行する処理を、beginの下に書くこともできます。

begin
例外の発生をチェックする対象となるプログラム
rescue
例外が発生した場合の処理
else
例外が発生しない場合の処理
ensure
例外に関係なく実行する処理
end

開発者が意図しない操作によってエラーが発生した場合、例外処理が無ければ実行途中で強制停止してしまい、利用者には何が起きたか解りません。しかし、例外処理、および、例外に関係なく実行される処理を記述しておくことで、何が起きたか利用者に知らせ、また、その場合の手順などを表示することが可能です。
Rubyを学びたい方におすすめのスクールはこちら

Rubyの例外処理の例

次に、Rubyの例外処理の例を紹介します。

puts "開始"
begin
  num = gets.strip()
  out = 100 / num
rescue
  puts "エラー:数字を入力してください"
else
  puts "100 / #{num} = #{out}"
ensure
  puts "終了"
end

この例は、例外処理の有無に関係なく、実行直後に「開始」、終了時に「終了」を表示し、例外が発生したらエラーメッセージを、また、正常だったら入力された数字を使った計算式を表示します。

beginで始まる例外処理を使わない、下記のプログラムでは、例外が発生した箇所でプログラムが停止してしまいます。

beginを使わない例とその実行結果

$ cat sample_err.rb
puts "開始"
num = gets.strip()
out = 100 / num.to_i
puts "100 / #{num} = #{out}"
puts "終了"

$ ruby sample_err.rb
開始

Traceback (most recent call last):
        1: from sample_err.rb:3:in ''
sample_err.rb:3:in `/': divided by 0 (ZeroDivsionError)

この例では、numに数字が入力されなかったことで、100/0による例外(ZeroDivsionError)が発生し、そこでプログラムが強制停止されてしまいました。

しかし、先ほどのbeginを使った例であれば、例外処理と例外に関係ない処理も実行するので、次のように表示されます。

$ruby sample_ok.rb
開始

エラー:数字を入力してください
終了

Rubyを学びたい方におすすめのスクールはこちら

beginを省略した書き方

これまで、beginから始まるRubyの例外処理について解説してきましたが、先ほど簡単に触れたように、条件次第ではbeginを省略した書き方が可能です。つまり、beginを書かずに、rescueから始まる例外処理と、ensureから始まる例外の有無に関係なく実行する処理のみでも記述できます。

ただし、クラスやモジュール、メソッド定義の中など記述できる場所に制限があるので、注意してください。例えば、次のようなメソッドの中に記述した例外処理は、beginを省略した書き方が可能です。

メソッドの中に記述した例外処理の例
def sample
  puts "開始"
  begin
    num = gets.strip()
    out = 100 / num
  rescue
    puts "エラー:数字を入力してください"
  else
    puts "100 / #{num} = #{out}"
  ensure
    puts "終了"
  end
end
メソッドの中に記述し、beginを省略した例外処理の例
def sample
  puts "開始"
  num = gets.strip()
  out = 100 / num
  rescue
    puts "エラー:数字を入力してください"
  else
    puts "100 / #{num} = #{out}"
  ensure
    puts "終了"
end

この場合、メソッドの中で例外が発生した場合、rescueおよびensureのブロック内に記述した内容を処理できます。
Rubyを学びたい方におすすめのスクールはこちら

まとめ

これまで説明したように、Rubyには、begin~rescue~endのブロックを使った例外処理の記述が可能です。さらに、elseやensureを組み合わせることで、例外が発生しなかった場合の処理や、例外の有無に関係なく実行する処理なども書けます。また、クラスやモジュール、メソッドの中ではbeginの省略も可能です。ぜひ、beginを使った、Rubyの例外処理の書き方をマスターしてください。

また、Rubyについてもっと詳しく学びたい方は、ポテパンキャンプの利用を検討されてはいかがでしょうか。
Rubyを学びたい方におすすめのスクールはこちら

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。