10分で学ぶRuby
Rubyは、エレガントな構文と開発者フレンドリーな機能で知られる動的オブジェクト指向プログラミング言語です。このチュートリアルでは、Rubyの核となる概念を素早く学べるように解説します。
1. 最初のRubyプログラムを書く
シンプルなプログラムから始めましょう。hello.rb
というファイルを作成し、以下のコードを入力します:
puts "Hello, World!"
ファイルを保存し、ターミナルで以下のコマンドを実行します:
ruby hello.rb
出力結果:
Hello, World!
このシンプルなプログラムは、Rubyの基本的な出力機能を示しています。puts
メソッドはコンソールにテキスト情報を表示するために使用されます。
2. 基本構文
Rubyの構文はクリーンで読みやすく、自然で直感的に設計されています。
# これはコメントです
puts "Hello, World!"
Rubyの基本構文ルール:
- コメント: 単一行コメントは
#
で始まり、複数行コメントは=begin
と=end
を使用します。 - ステートメント: 通常1行に1つのステートメント、末尾にセミコロン
;
は不要です。 - コードブロック:
do...end
または中括弧{}
で定義します。 - メソッド呼び出し: 引数のないメソッド呼び出しでは括弧は省略可能です。
複数行コメントの例:
=begin
これは複数行コメントで、
複数行にまたがります。
=end
3. 変数とデータ型
Rubyでは、変数は動的型付けされ、明示的な型宣言は必要ありません。
基本的な変数命名規則:
- 変数名には文字、数字、アンダースコアのみ使用できます。
- 変数名は数字で始めることはできません。
- 変数名は大文字と小文字を区別します。
- Rubyのキーワードは変数名として使用できません。
Rubyの主な基本データ型:
- 整数(Integer): 例:
42
または-10
- 浮動小数点数(Float): 例:
3.14
または2.5e3
- 文字列(String): 例:
"hello"
または'world'
、シングルクォートまたはダブルクォートを使用 - ブール値(Boolean):
true
またはfalse
- Nil(Nil):
nil
で表され、nullまたは値がないことを示します - シンボル(Symbol): 例:
:name
、不変の識別子
3.1 数値型
Rubyは整数と浮動小数点数をサポートしています。
# 整数
age = 25
population = 1_000_000 # 読みやすさのためのアンダースコア
# 浮動小数点数
temperature = 36.5
pi = 3.14159
# 演算
puts 10 + 5 # 15
puts 10 / 3 # 3(整数除算)
puts 10.0 / 3 # 3.333...(浮動小数点数除算)
3.2 文字列
文字列は文字のシーケンスで、シングルクォートまたはダブルクォートで囲みます。
single_quote = 'シングルクォート文字列'
double_quote = "ダブルクォート文字列"
multiline = "これは
複数行の文字列です"
# 文字列補間(ダブルクォートのみ)
name = "Alice"
greeting = "Hello, #{name}!"
puts greeting # "Hello, Alice!"
文字列操作:
text = "Rubyプログラミング"
puts text.length # 文字列の長さ
puts text.upcase # 大文字に変換
puts text.downcase # 小文字に変換
puts text[0] # 最初の文字にアクセス
puts text[0..3] # 文字列スライス
puts text.include?("Ruby") # 包含チェック
3.3 ブール型
ブール型には2つの値があります:true
と false
。
is_active = true
is_complete = false
# ブール演算
result1 = true && false # false
result2 = true || false # true
result3 = !true # false
3.4 Nil型
nil
はnullまたは値がない状態を表します。
value = nil
if value.nil?
puts "値はnullです"
end
3.5 シンボル
シンボルは不変の識別子で、ハッシュのキーとしてよく使用されます。
:name
:email
:created_at
# シンボル vs 文字列
puts :name.object_id == :name.object_id # true(同じオブジェクト)
puts "name".object_id == "name".object_id # false(異なるオブジェクト)
4. データ構造
Rubyはデータの格納と操作のためのいくつかの組み込みデータ構造を提供します。
4.1 配列
配列は複数の値を保持できる順序付きコレクションです。
numbers = [1, 2, 3, 4, 5]
numbers.push(6) # 要素を追加
numbers.unshift(0) # 先頭に挿入
numbers.delete(3) # 特定の値を削除
numbers[0] = 10 # 要素を変更
puts numbers.inspect # [10, 2, 4, 5, 6]
配列操作:
numbers = [10, 20, 30, 40, 50]
puts numbers[1..3] # [20, 30, 40]
puts numbers.first # 10
puts numbers.last # 50
puts numbers.include?(30) # true
4.2 ハッシュ
ハッシュはキーと値のペアのコレクションで、他の言語の辞書に似ています。
student = {
name: "John",
age: 20,
major: "Computer Science"
}
# ハッシュへのアクセスと変更
puts student[:name]
student[:age] = 21
student[:gpa] = 3.8
# ハッシュの反復処理
student.each do |key, value|
puts "#{key}: #{value}"
end
5. 制御構造
Rubyはプログラムの実行を管理するためのいくつかの制御構造ステートメントを提供します。
5.1 if文
if
文は条件を評価し、条件が真の場合にブロックを実行します。
age = 20
if age >= 18
puts "成人"
elsif age >= 13
puts "ティーン"
else
puts "子供"
end
# 一行のif
puts "成人" if age >= 18
5.2 unless文
unless
はif
の反対で、条件が偽の場合に実行します。
age = 15
unless age >= 18
puts "成人ではありません"
end
# 一行のunless
puts "成人ではありません" unless age >= 18
5.3 case文
case
文は複数の条件を処理するためのクリーンな方法を提供します。
grade = "B"
case grade
when "A"
puts "優秀"
when "B"
puts "良好"
when "C"
puts "平均"
else
puts "改善が必要"
end
5.4 ループ
Rubyは様々なループ構造をサポートしています。
whileループ:
count = 0
while count < 5
puts count
count += 1
end
untilループ:
count = 0
until count >= 5
puts count
count += 1
end
forループ:
for i in 0..4
puts i
end
eachイテレータ:
(0..4).each do |i|
puts i
end
# 配列での使用
fruits = ["apple", "banana", "cherry"]
fruits.each do |fruit|
puts fruit
end
breakとnext:
(0..9).each do |i|
break if i == 5 # ループを抜ける
next if i % 2 == 0 # 偶数をスキップ
puts i # 出力: 1, 3
end
6. メソッド
Rubyのメソッドはdef
キーワードを使用して定義します。
基本的なメソッド定義:
def greet(name)
"Hello, #{name}!"
end
# メソッドの呼び出し
message = greet("John")
puts message
デフォルトパラメータ:
def greet(name, greeting = "Hello")
"#{greeting}, #{name}!"
end
puts greet("Alice") # "Hello, Alice!"
puts greet("Bob", "Hi") # "Hi, Bob!"
可変長引数:
def sum_numbers(*numbers)
numbers.sum
end
puts sum_numbers(1, 2, 3, 4) # 10
キーワード引数:
def create_person(name:, age:, city: "Unknown")
{ name: name, age: age, city: city }
end
person = create_person(name: "Alice", age: 25)
puts person.inspect
7. ブロックとProc
ブロックはメソッドに渡すことができるコードの塊です。
ブロックの使用:
# do...endの使用
3.times do
puts "Hello!"
end
# 中括弧の使用
3.times { puts "Hello!" }
# パラメータ付きブロック
(1..3).each do |number|
puts "Number: #{number}"
end
Yieldキーワード:
def run_block
puts "ブロックの前"
yield
puts "ブロックの後"
end
run_block { puts "ブロックの中" }
Proc:
Procはブロックをカプセル化するオブジェクトです。
square = Proc.new { |x| x * x }
puts square.call(5) # 25
# メソッドへのProcの渡し
def apply_operation(numbers, operation)
numbers.map { |n| operation.call(n) }
end
numbers = [1, 2, 3, 4]
squares = apply_operation(numbers, square)
puts squares.inspect # [1, 4, 9, 16]
8. クラスとオブジェクト
Rubyは純粋なオブジェクト指向言語で、すべてがオブジェクトです。
基本的なクラス定義:
class Person
def initialize(name, age)
@name = name
@age = age
end
def introduce
"I am #{@name}, #{@age} years old"
end
def have_birthday
@age += 1
"#{@name} had a birthday, now #{@age} years old"
end
end
# オブジェクトの作成
person1 = Person.new("John", 25)
person2 = Person.new("Jane", 30)
puts person1.introduce
puts person2.have_birthday
アクセサメソッド:
class Person
attr_reader :name # 読み取りアクセス
attr_writer :age # 書き込みアクセス
attr_accessor :city # 読み取りと書き込みアクセス
def initialize(name, age, city)
@name = name
@age = age
@city = city
end
end
person = Person.new("Alice", 25, "New York")
puts person.name # "Alice"
person.age = 26 # 年齢を設定
person.city = "Boston" # 都市を設定
puts person.city # "Boston"
クラスメソッドとクラス変数:
class Student
@@student_count = 0 # クラス変数
def initialize(name)
@name = name
@@student_count += 1
end
def self.student_count # クラスメソッド
@@student_count
end
end
student1 = Student.new("John")
student2 = Student.new("Jane")
puts Student.student_count # 2
継承:
class Animal
def initialize(name)
@name = name
end
def speak
"#{@name} makes a sound"
end
end
class Dog < Animal
def speak
"#{@name} barks"
end
end
class Cat < Animal
def speak
"#{@name} meows"
end
end
dog = Dog.new("Buddy")
cat = Cat.new("Mimi")
puts dog.speak # "Buddy barks"
puts cat.speak # "Mimi meows"
9. モジュールとMixins
モジュールは関連するメソッドと定数をグループ化するために使用され、クラスにミックスインすることができます。
モジュール定義:
module Speakable
def speak
"#{@name} says something"
end
end
class Person
include Speakable
def initialize(name)
@name = name
end
end
person = Person.new("Alice")
puts person.speak # "Alice says something"
モジュールによる名前空間:
module Math
PI = 3.14159
def self.square(x)
x * x
end
end
puts Math::PI # 3.14159
puts Math.square(5) # 25
10. 例外処理
Rubyはbegin
、rescue
、ensure
、raise
を使用した堅牢な例外処理を提供します。
基本的な例外処理:
begin
result = 10 / 0
rescue ZeroDivisionError => e
puts "ゼロで除算できません: #{e.message}"
else
puts "除算成功"
ensure
puts "これは常に実行されます"
end
例外の発生:
def divide(a, b)
raise "ゼロで除算できません" if b == 0
a / b
end
begin
result = divide(10, 0)
rescue => e
puts "エラー: #{e.message}"
end
11. ファイル操作
Rubyはファイルの読み書きのためのシンプルなメソッドを提供します。
ファイルの読み込み:
# ファイル全体を読み込み
content = File.read("example.txt")
puts content
# 行ごとに読み込み
File.foreach("example.txt") do |line|
puts line.chomp
end
ファイルへの書き込み:
# ファイルへの書き込み
File.write("output.txt", "Hello, Ruby!\n")
# ファイルへの追記
File.open("output.txt", "a") do |file|
file.puts "新しいコンテンツを追加"
end
12. 便利な組み込みメソッド
Rubyには多くの便利な組み込みメソッドが付属しています。
文字列メソッド:
text = " Ruby Programming "
puts text.strip # 空白を削除
puts text.split(" ") # 配列に分割
puts text.gsub("Ruby", "Python") # 置換
配列メソッド:
numbers = [3, 1, 4, 1, 5, 9, 2]
puts numbers.sort.inspect # [1, 1, 2, 3, 4, 5, 9]
puts numbers.uniq.inspect # [3, 1, 4, 5, 9, 2]
puts numbers.select { |n| n > 3 }.inspect # [4, 5, 9]
ハッシュメソッド:
person = { name: "Alice", age: 25, city: "New York" }
puts person.keys.inspect # [:name, :age, :city]
puts person.values.inspect # ["Alice", 25, "New York"]
puts person.has_key?(:age) # true
13. Ruby Gems
RubyGemsはRubyのパッケージマネージャで、ライブラリのインストールと管理を行います。
Gemのインストール:
gem install rails
コードでのGemの使用:
require 'json'
# JSONのパース
json_string = '{"name": "Alice", "age": 25}'
person = JSON.parse(json_string)
puts person["name"] # "Alice"
# JSONの生成
person_hash = { name: "Bob", age: 30 }
json_output = JSON.generate(person_hash)
puts json_output # {"name":"Bob","age":30}
14. Rubyスタイルガイド
Rubyにはクリーンで読みやすいコードを促進する強力なコミュニティスタイルガイドがあります。
インデント: インデントには2スペースを使用します。
命名規則:
- 変数とメソッド:
snake_case
- クラスとモジュール:
CamelCase
- 定数:
SCREAMING_SNAKE_CASE
括弧: 引数を持つメソッド呼び出しには括弧を使用し、引数のないメソッド呼び出しでは省略します。
ブロック: 複数行のブロックにはdo...end
を使用し、単一行のブロックには{}
を使用します。
Rubyのエレガントな構文と強力な機能は、作業を楽しくします。開発者の幸福と生産性に焦点を当てたその姿勢は、Web開発、スクリプト作成、自動化タスクで人気となっています。