Rubyとは
Rubyは、自然に読めるコードとプログラミングの楽しさを大切にした言語です。Webアプリ、業務自動化、コマンドラインツールなどに使われます。
- Ruby on RailsによるWeb開発
- ファイル整理や集計の自動化
- Web APIやバッチ処理
- 開発支援ツールの作成
Rubyを実行してみよう
Rubyをインストールし、バージョンを確認します。次にhello.rbを作ります。
ruby --versionputs "こんにちは、Ruby!"ruby hello.rbこんにちは、Ruby!irbを起動すると、短い式を1行ずつ試せます。終了はexitです。基本の書き方
通常は上から順に実行され、文末のセミコロンは不要です。#から行末はコメントです。
# 文字列と計算結果を表示
puts "1番目"
puts 10 + 20
puts "3番目"1番目
30
3番目条件やメソッドのまとまりはendで閉じます。字下げは文法上必須ではありませんが、半角スペース2個が一般的です。
変数とデータ型
変数へ値を代入すると、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]Mityさんは20歳です
Float
TrueClass
NilClassvalue.classで種類を確認できます。入力と型変換
getsは1行を文字列として読み、末尾の改行を含みます。chompで改行を除き、Integer()で整数へ変換します。
print "年齢を入力してください: "
text = gets.chomp
age = Integer(text)
puts "来年は#{age + 1}歳です"年齢を入力してください: 20
来年は21歳ですInteger("二十")はArgumentErrorになります。後の例外処理で安全に扱います。演算子と条件分岐
if、elsif、elseで条件に応じた処理を選びます。比較は== != > < >= <=、論理演算は&& || !です。
score = 82
if score >= 80
result = "合格(よくできました)"
elsif score >= 60
result = "合格"
else
result = "再挑戦"
end
puts result合格(よくできました)Rubyではfalseとnilだけが偽で、0や空文字列は真です。
繰り返し
決まった回数にはtimes、範囲の値を順番に使う場合はeach、条件が真の間はwhileを使えます。それぞれの役割を別の例で確認します。
timesで指定回数を繰り返す
3.times do |index|
puts "#{index + 1}回目"
end1回目
2回目
3回目eachで範囲の値を使う
(4..6).each do |number|
puts number
end4
5
61..5は5を含み、1...5は5を含みません。配列とハッシュ
配列は順番のある値、ハッシュはキーと値の組です。配列の位置は0から数えます。
fruits = ["りんご", "みかん"]
fruits << "ぶどう"
puts fruits[0]
fruits.each_with_index do |fruit, index|
puts "#{index + 1}: #{fruit}"
endりんご
1: りんご
2: みかん
3: ぶどうuser = { name: "Mity", age: 20 }
user[:city] = "東京"
puts user[:name]
puts user.fetch(:email, "未登録")Mity
未登録メソッド
defで処理へ名前を付けます。最後に評価した式が戻り値になりますが、初学者のうちはreturnで意図を明確にしても構いません。
def calculate_total(price, count)
price * count
end
total = calculate_total(500, 3)
puts "合計は#{total}円です"合計は1500円ですメソッド名は役割が分かるようにし、一つのメソッドへ一つの役割を持たせます。
ブロックとEnumerable
each、map、selectなどは、do...endや波かっこで渡すブロックを繰り返し実行します。
scores = [40, 65, 80, 95]
doubled = scores.map { |score| score * 2 }
passed = scores.select { |score| score >= 60 }
p doubled
p passed[80, 130, 160, 190]
[65, 80, 95]eachは各要素の処理、mapは同じ数の新しい配列、selectは条件に合う要素の抽出です。例外処理
beginとrescueで予想できる失敗を処理します。
begin
age = Integer("二十")
puts "来年は#{age + 1}歳です"
rescue ArgumentError
puts "数字で入力してください"
end数字で入力してください例外クラスを省略すると多くのエラーをまとめて捕まえ、不具合を隠しやすくなります。詳しくは例外処理とテストで学びます。
ファイルを読み書きする
File.writeで保存し、File.readで読みます。
path = "message.txt"
File.write(path, "Rubyを勉強中です。\n", encoding: "UTF-8")
content = File.read(path, encoding: "UTF-8")
puts contentRubyを勉強中です。クラス
クラスは関係するデータと操作をまとめる設計図です。newで作った具体的な値をインスタンスと呼びます。
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_taxRuby入門
2200@nameはインスタンスごとの変数です。詳しくはクラスとオブジェクトで学びます。
練習問題
問題1:偶数・奇数
number = 7を判定してください。
number = 7
puts number.even? ? "偶数" : "奇数"奇数問題2:平均点
[72, 95, 81, 68]の平均を表示してください。
scores = [72, 95, 81, 68]
average = scores.sum.to_f / scores.length
puts "平均: #{average}点"平均: 79.0点次に学ぶこと
さらに学習を広げる
- Ruby on Rails:規約を活用して本格的なWebアプリを作る
- Sinatra:小さなWebアプリやAPIから仕組みを学ぶ
- RuboCop:コードの問題を検査し、書式を揃える
- RSpec:読みやすい形式で振る舞いをテストする
- RBS・Steep:型情報を記述し、型の不一致を検査する
小さなプログラムを完成させてから、目的に合うものを一つずつ試しましょう。