概要¶
Ruby は、まつもとゆきひろ氏(Matz)によって開発されたオブジェクト指向スクリプト言語。1995年に公開され、日本発のプログラミング言語として世界的に広く使われている。
設計思想¶
人間中心の設計:「プログラマの幸福(Programmer’s Happiness)」を重視し、書きやすさ・読みやすさを追求している。
原則としてすべてがオブジェクト:数値、文字列、
nil、true/falseに至るまで、あらゆる値がオブジェクトとして扱われる。最小驚きの原則(Principle of Least Surprise):直感に反しない挙動を目指す設計方針。
メタプログラミングへの高い親和性:実行時にクラスやメソッドを動的に変更・定義できる柔軟性を持つ。
構文の特徴¶
シンプルで読みやすい文法¶
セミコロンや括弧を省略できる場面が多く、自然言語に近い記述が可能。
# メソッド呼び出しの括弧は省略可能
puts "Hello, Ruby!"
# if文も後置できる
puts "Even" if 10.even?すべてがオブジェクト¶
リテラルも含め、あらゆる値がメソッドを持つオブジェクトとなる。
5.times { |i| puts i } # 整数もオブジェクト
"ruby".upcase # => "RUBY"
nil.to_s # => ""ブロック・Proc・Lambda¶
コードの塊(ブロック)をメソッドに渡せる、Ruby独自の強力な機能。
# do...end または {} で記述
[1, 2, 3].each do |n|
puts n * 2
end
[1, 2, 3].map { |n| n * 2 } # => [2, 4, 6]
# Proc / Lambda
square = ->(x) { x * x }
square.call(4) # => 16メソッド定義とシンボル¶
def greet(name)
"Hello, #{name}!" # 文字列展開(式展開)
end
greet("World") # => "Hello, World!"
# シンボル(軽量な識別子)
status = :active柔軟なクラス定義¶
class Animal
attr_accessor :name # ゲッター・セッターを自動生成
def initialize(name)
@name = name
end
def speak
"#{@name} makes a sound."
end
end
class Dog < Animal # 継承
def speak
"#{@name} barks."
end
end
Dog.new("Pochi").speak # => "Pochi barks."Mixin¶
モジュールによる多重継承の代替
module Greetable
def greet
"Hi, I'm #{name}."
end
end
class Person
include Greetable
attr_reader :name
def initialize(name) = (@name = name)
end例外処理¶
begin
1 / 0
rescue ZeroDivisionError => e
puts "エラー: #{e.message}"
ensure
puts "後処理"
end特徴的な構文糖衣(シンタックスシュガー)¶
三項演算子:
age >= 20 ? "成人" : "未成年"安全ナビゲーション演算子:
user&.profile&.name多重代入:
a, b = 1, 2範囲オブジェクト:
(1..5)/(1...5)文字列/配列の展開:
*args,**kwargs
Rubyらしさ(Rubyism)まとめ¶
表現力の高さ:少ないコード量で意図を明確に表現できる。
DSL(ドメイン特化言語)を作りやすい:柔軟な構文とメタプログラミングにより、Rails のような独自DSLが発展しやすい。
開発者体験(DX)重視:irb(対話型実行環境)や豊富な標準ライブラリ、gem エコシステム(RubyGems)が開発を支える。
Rubyについての話題¶
Ruby::Box(旧 Namespace)¶
Ruby::Box ダイジェスト紹介(Ruby 4.0.0 新機能) - STORES Product Blog
Ruby::Box は名前空間を明確に隔離する機能。
~rubyは複数のファイルに書いた同名のオブジェクトがエラーを出さずひっそりと上書きされる仕様なので、それの解決に使えるかもしれない?~ クラス名を分けてるだけ