Rubyのプログラムはどう書くの?例を見ながら基礎をマスターしよう!


Rubyのプログラムってどのように書くんだろう
Rubyのプログラム例が見てみたい
学んだあとに実際にアウトプットして定着させたい

Rubyを学びたてもしくは学ぼうと思っている方の中には上記のようなことを思う方も多いのではないでしょうか?

みなさんこんにちは!業務でもRubyを用いている現役エンジニアのかいです。

今日は、Ruby初学者の方が思う基礎的な文法の解説や、プログラム例をたくさん見たいという方のために記事を用意しました。

この記事はこんな人のために書きました。

  • Rubyのプログラムの書き方がわからない
  • 基礎的な文法をマスターしたい
  • Rubyのコードを実際にみながら解説してもらいたい
  • 解説後、課題などを説いて力をつけたい

目次

今はRubyが熱い!?

それでは、いきなりコードの説明に移って行く前に、軽くRubyがどんな言語かということを解説しておきます。Rubyが今熱い、入門に向いている、などの情報を元に勉強を始めた方が多いと思います。

Rubyとは、まつもとゆきひろ氏によって作られた言語で、動的なオブジェクト指向の言語です。オブジェクト指向については以下の記事がわかりやすいかと思います。

そして、Rubyが人気の理由としては書きやすく、柔軟性が高いこと、またRuby on Railsというフレームワークの存在があげられるでしょう。また筆者のイメージでは文字列処理が得意というイメージもありますね。

RubyはRuby on Railsなどの存在もありWebアプリケーションのバックエンドとして使われることが多いです。クックパッドなどもRubyを使っていることで有名ですね。

なので、Web系に進みたいと思っている初学者にとっては最適な入門言語ということですね。また、Rubyを学んでおけば他の動的言語を学ぶときにもすんなり理解できますので、後々違うことがしたくなっても手を出しやすいため学んでおいて損はないでしょう。

Rubyの実行方法

それでは、実際にRubyのプログラムについて見ていきましょう。まずは、当たり前ですがRubyの実行方法をおさらいしておきます。

.rbという拡張子が、Rubyファイルという意味ですね。以下のようなファイルをテスト用に準備しました。

test.rb

puts 'Hello World'

このカレントまで移動しそこで、ruby ファイル名、この場合では以下のようにすると実行できます。

ruby test.rb
Hello World

インタラクティブなシェル

また、Rubyには、インタラクティブシェルという対話型のシェルが用意されており、それを用いると簡単なデバッグや、挙動を調べたいときなどに便利です。サイトの中にはインタラクティブシェルを用いて解説されているものも多いので使い方を見ていきましょう。

とは言っても簡単で、シェルでirbと入力してあげるだけで良いです。あとはここに、好きな処理を書いていけば、その結果が対話的に帰ってきます。ちなみに抜けるときはコントロール+Dです。

irb
irb(main):001:0>

Rubyの条件分岐

さてそれでは、実際にプログラムの基本である条件分岐についてみていきます。具体的にはRubyではif文で条件分岐を行い、elseifはelsifとして表現します。

また複数の条件を分岐させるときは、case文を使うこともありますが、case文については以下の記事を参考にしてみてください。

ifの使い方

それでは、実際にifの使い方を見ていきましょう。基本的なif文はif – endをひとまとまりとして下記のように書きます。

if 条件式
    処理
elsif 条件式
    処理
else
    処理
end

これを考慮して、コードを書くと、以下のようになります。

temp = 30

if temp >= 30 then
    puts "hot!"
elsif temp <= 20 then
    puts "cold!"
else 
    puts "confortable!"
end
ruby test.rb
hot!

演習

さて、ここで演習を用意しました。

”score”という変数に標準入力を格納し、59点以下であれば、”fail”、60点以上79点以下であれば、”soso”、80点以上であれば、”good”と出力するプログラムを作成してください。標準入力にはgetsを用いましょう。

答え

それでは以下に解答例を示しておきます。

score = gets.to_i

if score <= 59 then
    puts "fail"
elsif score >= 60 and score <= 79 then
    puts "soso"
elsif score >= 80 and score <= 100 then
    puts "good"
else 
    puts "無効な値です"
end

一行目で受け取った値を数値に変換するのを忘れないようにしましょう。ここでは、to_iを用いていますね。そんなの知らないよ!と思う方もいるかもしれませんが、わからないことは調べるという癖をつけておきましょう。

実際にはこのコードでは、文字列であっても無理やり0に変換してfailを返してしまうのであまりよくありません。他言語のように受け取った値が数値かどうか簡単に調べられれば良いのですが、integer?などはfalseを返してくれませんので正規表現というものを用いて数値判別を行うことができます。

ここは本筋からずれるので割愛しますが、そこら辺も考慮して書けるようになるとより良いですね。

Rubyのループ

次はループの代名詞であるfor文についてみていきましょう。

forの使い方

for文は以下のような書式で記述します。doは省略可能です。

for 変数 in オブジェクト do
  処理
end

このように、オブジェクトの値をひとつずつ変数に入れ実行していきます。C言語などを先に学んでいる方などは混乱しがちなのですが、Rubyのfor文は俗にいうforeach文です。

for文とforeachの違いがわかっている方は気をつけるようにしましょう。違いがよくわからない方は、初めてのfor文だと思うので特に気にせずそういうものだと思って使ってください。

for i in 1..5
    puts i
end
ruby test.rb
1
2
3
4
5

このように、endも忘れないようにしましょう。

演習

演習を解いて力をつけていきましょう。

AからZまでのアルファベットと1から10までの数値の全ての組み合わせを以下の例のように出力してください。

A1
A2
A3
…
z8
z9
z10

答え

答えを見ていきしょう。組み合わせを表現するときはfor文を2重にすることで実現します。

for i in "A".."Z"
    for j in "1".."10"
        puts i + j
    end
end

だいたい同じような感じになっているでしょうか?AからZまで一つずつ手動で配列に入れたりすることはやめてくださいね。できるだけ簡潔なコードを心がけましょう。

Rubyの関数

それでは最後に関数の使い方や呼び出し方をみていきます。関数については詳しく説明すると一記事書けるので最低限の知識を入れておきたい方は以下の記事を参考にしてみると良いでしょう。

関数の使い方

関数はdef、defineの略を使って定義します。簡単書くと以下のようになります。

def 関数名(引数)
    処理
end

# 呼び出すとき
関数名(引数)

実際のコードを見ていましょう。

def Add1 (num)
    num + 1
end

puts Add1(3)
4

返り値は最後に評価された値になりますが、明示的に変数名を書くとその値を返せます。。ここで、返り値?という方は上記のリンクを使って理解を深めておきましょう。

演習

それでは演習です。

引数を2つ(開始値と終了値)を与えると開始値から終了値まで1刻みでその和を計算する関数を作ってください。ただし、結果を関数の中では出力せず関数の外で”result”という変数に定義して出力してください。

答え

答えを見ていきます。これに関しては書き方はたくさんありますが、できるだけわかりやすく簡潔なものが書けるようになると良いですね。

def sum(start, fin)
    total = 0
    
    start.upto(fin) do |i|
        total += i
    end

    total
end

result = sum(1, 30)

puts(result)
465

このように最後の行で明示的にtotalを返してやらないと正しい値は得られません。コードを見てわかるように、”total”と”result”は同じものですが、このようにスコープごとに名前を変えることもよくあるので頭に入れておきましょう。

まとめ

いかがでしたでしょうか。Rubyを行う上で最低限必須の条件分岐、ループ、関数についてみていきました。

演習がよくわからなかったという方は、付いてるリンクでさらに深く学べますのでそちらで個別に学ぶのも良いでしょう。ここで説明してる内容は基本中の基本ですので必ずマスターしてできるようにしておきましょう!

それでは!!

この記事を書いた人

日向徹かこよすぎか

kaikaikai8217@gmail.com

目次