基礎

Rubyの変数入門|ローカル変数・インスタンス変数・グローバル変数の違い

変数はデータを一時的に保存しておくための「名前付きの箱」のようなものです。Rubyにはいくつかの種類の変数があり、名前の付け方(プレフィックス)によって変数のスコープ(有効範囲)が決まります。この記事ではRubyの変数の基本的な使い方と種類について詳しく解説します。

基本的な使い方

ローカル変数

ローカル変数はRubyで最もよく使う変数です。小文字またはアンダースコアで始まる名前を付けます。変数に値を代入するだけで宣言と初期化が同時に行われます。

Ruby
# 変数に値を代入
name = 'Ruby'
version = 3.2
is_fun = true

puts name
puts version
puts is_fun
実行結果
Ruby
3.2
true

Rubyは動的型付け言語なので、変数の型を事前に宣言する必要がありません。文字列、数値、真偽値など、どんな型の値でも自由に代入できます。また、同じ変数に異なる型の値を再代入することも可能です。

変数の再代入

一度値を代入した変数に、別の値を代入し直すことを「再代入」と呼びます。

Ruby
message = 'こんにちは'
puts message

message = 'さようなら'
puts message

# 数値を使った計算
count = 10
count = count + 5
puts count
実行結果
こんにちは
さようなら
15

変数の値は何度でも書き換えることができます。count = count + 5は現在のcountの値に5を足した結果をcountに再代入しています。

変数の種類

Rubyには用途に応じた4種類の変数があります。名前の先頭文字でどの種類かが決まります。

Ruby
# ローカル変数(小文字またはアンダースコアで始まる)
local_var = 'ローカル'

# インスタンス変数(@で始まる)
@instance_var = 'インスタンス'

# クラス変数(@@で始まる)
@@class_var = 'クラス'

# グローバル変数($で始まる)
$global_var = 'グローバル'

puts local_var
puts @instance_var
puts @@class_var
puts $global_var
実行結果
ローカル
インスタンス
クラス
グローバル

ローカル変数のスコープ

ローカル変数は定義されたブロックやメソッドの中でのみ有効です。

Ruby
def greet
  greeting = 'こんにちは'  # このメソッド内でのみ有効
  puts greeting
end

greet
# puts greeting  # エラー!メソッドの外からはアクセスできない
実行結果
こんにちは

グローバル変数の使い方

グローバル変数は$で始まり、プログラムのどこからでもアクセスできます。

Ruby
$app_name = 'MyApp'

def show_app_name
  puts "アプリ名: #{$app_name}"
end

show_app_name
$app_name = 'NewApp'
show_app_name
実行結果
アプリ名: MyApp
アプリ名: NewApp

変数の命名規則

Rubyではスネークケース(単語をアンダースコアで区切る)が標準的な命名規則です。

Ruby
# 良い例(スネークケース)
user_name = '太郎'
total_price = 1500
is_active = true

# 悪い例(キャメルケース - Rubyでは使わない)
# userName = '太郎'
# totalPrice = 1500

puts user_name
puts total_price
puts is_active
実行結果
太郎
1500
true
変数名の付け方のコツ

変数名は短すぎず、何が入っているかがわかる名前を付けましょう。xtmpよりもuser_agetotal_countのように意味のある名前にすると、コードの可読性が大幅に向上します。

グローバル変数は極力避ける

グローバル変数($で始まる変数)はプログラムのどこからでも変更できるため、予期しないバグの原因になります。特別な理由がない限り、ローカル変数やインスタンス変数を使いましょう。

まとめ

  • Rubyは動的型付け言語で、変数の型宣言は不要
  • ローカル変数は小文字・アンダースコアで始まり、定義したスコープ内でのみ有効
  • インスタンス変数(@)、クラス変数(@@)、グローバル変数($)がある
  • 命名規則はスネークケース(user_name)が標準
  • グローバル変数は極力使わず、スコープの狭い変数を使うのがベストプラクティス