Ruby

Ruby入門

読みやすいコードを書き、実行結果を確かめながら基礎を学びましょう。

この講座はRuby 3.3以降を対象にしています。

01

Rubyとは

Rubyは、自然に読めるコードとプログラミングの楽しさを大切にした言語です。Webアプリ、業務自動化、コマンドラインツールなどに使われます。

Rubyでできること
  • Ruby on RailsによるWeb開発
  • ファイル整理や集計の自動化
  • Web APIやバッチ処理
  • 開発支援ツールの作成
02

Rubyを実行してみよう

Rubyをインストールし、バージョンを確認します。次にhello.rbを作ります。

確認COMMAND
ruby --version
hello.rbRUBY
puts "こんにちは、Ruby!"
実行COMMAND
ruby hello.rb
実行結果OUTPUT
こんにちは、Ruby!
対話実行 irbを起動すると、短い式を1行ずつ試せます。終了はexitです。
03

基本の書き方

通常は上から順に実行され、文末のセミコロンは不要です。#から行末はコメントです。

順番を確認RUBY
# 文字列と計算結果を表示
puts "1番目"
puts 10 + 20
puts "3番目"
実行結果OUTPUT
1番目
30
3番目

条件やメソッドのまとまりはendで閉じます。字下げは文法上必須ではありませんが、半角スペース2個が一般的です。

04

変数とデータ型

変数へ値を代入すると、Rubyが型を判断します。文字列への埋め込みにはダブルクォートと#{...}を使います。

主な型RUBY
name = "Mity"     # String
age = 20           # Integer
height = 170.5     # Float
student = true     # TrueClass
memo = nil         # NilClass

puts "#{name}さんは#{age}歳です"
puts [height.class, student.class, memo.class]
実行結果OUTPUT
Mityさんは20歳です
Float
TrueClass
NilClass
変数はオブジェクトを指す名前 Rubyでは数値や文字列もオブジェクトです。value.classで種類を確認できます。
05

入力と型変換

getsは1行を文字列として読み、末尾の改行を含みます。chompで改行を除き、Integer()で整数へ変換します。

年齢を受け取るRUBY
print "年齢を入力してください: "
text = gets.chomp
age = Integer(text)
puts "来年は#{age + 1}歳です"
実行例OUTPUT
年齢を入力してください: 20
来年は21歳です
変換失敗 Integer("二十")ArgumentErrorになります。後の例外処理で安全に扱います。
06

演算子と条件分岐

ifelsifelseで条件に応じた処理を選びます。比較は== != > < >= <=、論理演算は&& || !です。

点数を判定RUBY
score = 82

if score >= 80
  result = "合格(よくできました)"
elsif score >= 60
  result = "合格"
else
  result = "再挑戦"
end

puts result
実行結果OUTPUT
合格(よくできました)

Rubyではfalsenilだけが偽で、0や空文字列は真です。

07

繰り返し

決まった回数にはtimes、範囲の値を順番に使う場合はeach、条件が真の間はwhileを使えます。それぞれの役割を別の例で確認します。

timesで指定回数を繰り返す

3回繰り返すRUBY
3.times do |index|
  puts "#{index + 1}回目"
end
実行結果OUTPUT
1回目
2回目
3回目

eachで範囲の値を使う

4から6までを表示RUBY
(4..6).each do |number|
  puts number
end
実行結果OUTPUT
4
5
6
範囲の違い 1..5は5を含み、1...5は5を含みません。
08

配列とハッシュ

配列は順番のある値、ハッシュはキーと値の組です。配列の位置は0から数えます。

配列RUBY
fruits = ["りんご", "みかん"]
fruits << "ぶどう"

puts fruits[0]
fruits.each_with_index do |fruit, index|
  puts "#{index + 1}: #{fruit}"
end
実行結果OUTPUT
りんご
1: りんご
2: みかん
3: ぶどう
ハッシュRUBY
user = { name: "Mity", age: 20 }
user[:city] = "東京"
puts user[:name]
puts user.fetch(:email, "未登録")
実行結果OUTPUT
Mity
未登録
09

メソッド

defで処理へ名前を付けます。最後に評価した式が戻り値になりますが、初学者のうちはreturnで意図を明確にしても構いません。

合計金額RUBY
def calculate_total(price, count)
  price * count
end

total = calculate_total(500, 3)
puts "合計は#{total}円です"
実行結果OUTPUT
合計は1500円です

メソッド名は役割が分かるようにし、一つのメソッドへ一つの役割を持たせます。

10

ブロックとEnumerable

eachmapselectなどは、do...endや波かっこで渡すブロックを繰り返し実行します。

変換と抽出RUBY
scores = [40, 65, 80, 95]
doubled = scores.map { |score| score * 2 }
passed = scores.select { |score| score >= 60 }

p doubled
p passed
実行結果OUTPUT
[80, 130, 160, 190]
[65, 80, 95]
使い分け eachは各要素の処理、mapは同じ数の新しい配列、selectは条件に合う要素の抽出です。
11

例外処理

beginrescueで予想できる失敗を処理します。

数値変換RUBY
begin
  age = Integer("二十")
  puts "来年は#{age + 1}歳です"
rescue ArgumentError
  puts "数字で入力してください"
end
実行結果OUTPUT
数字で入力してください

例外クラスを省略すると多くのエラーをまとめて捕まえ、不具合を隠しやすくなります。詳しくは例外処理とテストで学びます。

12

ファイルを読み書きする

File.writeで保存し、File.readで読みます。

テキストRUBY
path = "message.txt"
File.write(path, "Rubyを勉強中です。\n", encoding: "UTF-8")
content = File.read(path, encoding: "UTF-8")
puts content
実行結果OUTPUT
Rubyを勉強中です。
上書きに注意 同名ファイルの内容を置き換えます。相対パスは実行時の作業フォルダーが基準です。詳しくはファイルとJSONで学びます。
13

クラス

クラスは関係するデータと操作をまとめる設計図です。newで作った具体的な値をインスタンスと呼びます。

商品クラスRUBY
class Product
  attr_reader :name

  def initialize(name, price)
    @name = name
    @price = price
  end

  def price_with_tax
    @price * 110 / 100
  end
end

book = Product.new("Ruby入門", 2_000)
puts book.name
puts book.price_with_tax
実行結果OUTPUT
Ruby入門
2200

@nameはインスタンスごとの変数です。詳しくはクラスとオブジェクトで学びます。

PRACTICE

練習問題

問題1:偶数・奇数

number = 7を判定してください。

解答例RUBY
number = 7
puts number.even? ? "偶数" : "奇数"
実行結果OUTPUT
奇数
問題2:平均点

[72, 95, 81, 68]の平均を表示してください。

解答例RUBY
scores = [72, 95, 81, 68]
average = scores.sum.to_f / scores.length
puts "平均: #{average}点"
実行結果OUTPUT
平均: 79.0点
NEXT

次に学ぶこと

さらに学習を広げる

目的に合わせた発展テーマ
  • Ruby on Rails:規約を活用して本格的なWebアプリを作る
  • Sinatra:小さなWebアプリやAPIから仕組みを学ぶ
  • RuboCop:コードの問題を検査し、書式を揃える
  • RSpec:読みやすい形式で振る舞いをテストする
  • RBS・Steep:型情報を記述し、型の不一致を検査する

小さなプログラムを完成させてから、目的に合うものを一つずつ試しましょう。