Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Ruby

概要

Ruby は、まつもとゆきひろ氏(Matz)によって開発されたオブジェクト指向スクリプト言語。1995年に公開され、日本発のプログラミング言語として世界的に広く使われている。

設計思想

  • 人間中心の設計:「プログラマの幸福(Programmer’s Happiness)」を重視し、書きやすさ・読みやすさを追求している。

  • 原則としてすべてがオブジェクト:数値、文字列、niltrue/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は複数のファイルに書いた同名のオブジェクトがエラーを出さずひっそりと上書きされる仕様なので、それの解決に使えるかもしれない?~ クラス名を分けてるだけ