導入
最後に、近年の Ruby(3.x)で加わった記法や、実務プロジェクトを支える道具を「読み物」として紹介します。この学習環境の簡易ランナーでは動かないものもありますが、実際の Ruby では日常的に使われます。「こういうものがある」と知っておくと、現場のコードで戸惑いません。
説明
パターンマッチ(case / in) は Ruby 3.0 で正式に入った、構造を分解しながら条件分岐する記法です。ハッシュや配列の中身を、形に合わせて一気に取り出せます。
data = { name: "太郎", role: :admin }
case data
in { name: String => name, role: :admin }
puts "#{name} は管理者です"
in { name: String => name }
puts "#{name} は一般ユーザーです"
end
Struct(構造体) は、データをまとめて持つ小さなクラスを一行で作れる仕組みです。attr_accessor と initialize を自分で書かずに済みます。
Point = Struct.new(:x, :y) do
def distance
Math.sqrt(x**2 + y**2)
end
end
p = Point.new(3, 4)
puts p.x # 3
puts p.distance # 5.0
Comparable モジュールは、<=>(第39レッスン)を1つ定義するだけで、< > == between? などの比較メソッドをまとめて手に入れられる Mix-in です。
class Version
include Comparable
attr_reader :num
def initialize(num); @num = num; end
def <=>(other); num <=> other.num; end
end
puts Version.new(1) < Version.new(2) # true(<=> を書くだけで < が使える)
Bundler と Gemfile は、プロジェクトが使う gem(ライブラリ)とそのバージョンを管理する仕組みです。プロジェクトのルートに Gemfile を置き、bundle install で必要な gem を一括で揃えます。
# Gemfile の例
source "https://rubygems.org"
gem "rails", "~> 7.1"
gem "puma"
gem "rspec", group: :test
$ bundle install # Gemfile に書いた gem をまとめて導入
$ bundle exec ruby app.rb # そのプロジェクトの gem 環境で実行
Gemfile.lock には実際に入ったバージョンが記録され、チームの全員がまったく同じライブラリ環境を再現できます。Python の requirements.txt、JavaScript の package.json と同じ役割です。
まとめ
Ruby コースはここまでです。基礎文法からオブジェクト指向、例外・モジュール、そして実務の記法・メタプログラミング・モダンRubyまで touch しました。
| 章 | 身につけたこと |
|---|---|
| 1〜4 | 変数・型・制御構文・配列・ハッシュ |
| 5〜6 | メソッド・ブロック・yield・Enumerable |
| 7 | クラス・継承・attr_accessor |
| 8 | 例外処理・モジュール/Mix-in・gem |
| 9 | シンボル・多重代入・可変長引数・<=>・名前空間・メタプログラミング・独自例外 |
次は Ruby on Rails に進むのがおすすめです。この章で学んだシンボル・ハッシュ・モジュール・<=>・メタプログラミングは、Rails のコードのいたるところに登場します。基礎を土台に、作りたいものへ一歩踏み出しましょう。