アクセサメソッド

Rubyのオブジェクト指向プログラミングにおける**アクセサメソッド(accessor method)**とは、インスタンス変数へのアクセスを制御するためのメソッドです。インスタンス変数は通常外部から直接アクセスできないため、アクセサメソッドを使って安全かつ柔軟にアクセスを可能にします。


1. アクセサメソッドの種類

Rubyには次の3種類のアクセサメソッドがあります。

メソッド 機能
attr_reader 読み取り専用(ゲッター)を定義
attr_writer 書き込み専用(セッター)を定義
attr_accessor 読み書き両方のアクセスを定義

2. なぜアクセサメソッドを使うのか

Rubyでは、インスタンス変数(例:@name)はクラスの外から直接参照できません。次のようなコードではエラーになります。

ruby
class User def initialize(name) @name = name end end user = User.new("Taro") puts user.name # エラー:undefined method `name'

このような場合、アクセサメソッドを使うことで変数へのアクセスを可能にします。


3. 各アクセサメソッドの使用例

attr_reader(読み取り専用)

ruby
class User attr_reader :name def initialize(name) @name = name end end user = User.new("Taro") puts user.name # => "Taro"

attr_writer(書き込み専用)

ruby
class User attr_writer :name def initialize(name) @name = name end end user = User.new("Taro") user.name = "Hanako" # 書き込み可能

attr_accessor(読み書き可能)

ruby
class User attr_accessor :name def initialize(name) @name = name end end user = User.new("Taro") puts user.name # => "Taro" user.name = "Jiro" puts user.name # => "Jiro"

4. アクセサメソッドを自分で定義することも可能

アクセサメソッドは、以下のように自分で手動で定義することもできます。

ruby
class User def initialize(name) @name = name end def name # ゲッター @name end def name=(value) # セッター @name = value end end

このように手動で書くこともできますが、attr_readerattr_accessorを使うことで、より簡潔に記述できます。


まとめ

  • アクセサメソッドは、インスタンス変数へのアクセスを制御するために使う。

  • attr_reader、attr_writer、attr_accessorの3種類があり、それぞれ用途が異なる。

  • 手動でゲッター/セッターを書く代わりに、アクセサメソッドを使うことでコードを簡潔に保てる。

生成日:2025/05/03