【Ruby入門】クラス(class)の使い方まとめ【基本知識を網羅】

クラス(class)を用いて、メソッドや変数をひとつにまとめておくことができます。

以下から Ruby のクラス(class)の使い方を解説していきます。

 

クラス(class)とは? クラス(class)の意味

「クラス(class)」は、オブジェクト(インスタンス)を作成するための設計図にあたり、メソッドや変数をひとつにまとめたものです。

クラスからオブジェクト(インスタンス)を作成することで、定義しておいたメソッドや変数を実際に扱えるようになります。

メモ

クラスやメソッド、オブジェクト(インスタンス)の関係はオブジェクト指向の考え方になります。詳しい解説はこちら

 

クラス(class)の使い方 一覧

クラスの使い方を、実際のプログラム例を紹介しながら解説していきます。

 

クラス(class)の作成

クラスは以下のように定義します。class と end の行の間に、クラス内で使う変数やメソッドを書きます。

class クラス名
  クラス内で使う変数やメソッド
end

 

以下は「User」クラスを作成する例。

プログラム
class User

end

今回はクラスを定義しただけなので、プログラムを実行しても何も起きません。

 

クラス(class)からインスタンスを作成する

定義したクラスを使う場合は、クラスをもとにインスタンスを作成する必要があります。

インスタンスは以下のようにして作成します。

クラス名.new

 

以下は「User」クラスからインスタンスを作成する例。

プログラム
class User

end

user = User.new
p user

class User 〜 end でクラスを定義し、user = User.new でクラスからインスタンスを作成して「user」という名前の変数に代入しています。

その後、p user で変数に代入された値を表示すると 見慣れない文字列が出てきますが、ひとまずこれでインスタンスが作成できたことが確認できます。以下はプログラムの実行結果例。

メモ

クラスとインスタンスの関係について、詳しい解説はこちら

 

オブジェクト生成時に実行する処理を書く(initialize メソッドの使い方)

クラスの中で initialize メソッドを使うと、インスタンス作成時に実行したい処理を書くことができます。

プログラム
class User
  def initialize
    p "インスタンスを作成しました"
  end
end

User.new
実行結果
"インスタンスを作成しました"

User.new を実行して「User」クラスからインスタンスを作成しています。そのときに「initialize」メソッドの中の処理が実行されて、「オブジェクトを作成しました」という文字列が表示されます。

 

「initialize」メソッドには、以下のように引数を渡すこともできます。

プログラム
class User
  def initialize(user_name)
    p "#{user_name}さん、こんにちは"
  end
end

User.new("ゲスト")
実行結果
"ゲストさん、こんにちは"

User.new("ゲスト") のように、オブジェクトを作成するときに後ろにカッコ(( ))をつけて引数を渡すことができます。今回は "ゲスト" を引数としています。

指定した引数は def initialize(user_name) で指定した「user_name」という変数に格納され、「initialize」メソッド内で使うことができます。

p "#{user_name}さん、こんにちは" によって、引数の値が画面に表示されます。

メモ

メソッドや引数について詳しくはこちら

 

クラスの中でメソッドを定義する

クラスの中にはメソッドを定義することができます。以下の例はメソッドの中でも「インスタンスメソッド」と呼ばれるものです。

プログラム
class User
  def login
    p "こんにちは"
  end
end

user = User.new
user.login
実行結果
"こんにちは"

user = User.new で「User」クラスからインスタンスを作成し、それを「user」変数に入れています。

次に、作成したインスタンスからドット(.)で繋げてメソッド名を指定すると、クラス内で定義したインスタンスメソッドを呼び出すことができます。今回のプログラムでは user.login で「login」メソッドの中の処理が実行されて、「こんにちは」という文字列が表示されます。

 

以下のようにして、メソッドに引数を渡すこともできます。

プログラム
class User
  def login(user_name)
    p "#{user_name}さん、こんにちは"
  end
end

user = User.new
user.login("ゲスト")
実行結果
"ゲストさん、こんにちは"
メモ

メソッドや引数の使い方について詳しくはこちら

メモ

クラスの中で定義できるメソッドには、インスタンスメソッドのほかに、クラスメソッドがあります。

クラスで使えるメソッドについて詳しくはこちら

 

クラスの中で変数を定義する

クラスの中では変数を定義することができます。以下の例は変数の中でも「インスタンス変数」と呼ばれるものです。

プログラム
class User
  def initialize
    @user_name = "ゲスト"
  end

  def display_current_user
    p @user_name
  end
end

user = User.new
user.display_current_user
実行結果
"ゲスト"

user = User.new で「User」クラスからインスタンスを作成し、それを「user」変数に入れています。そのときに「initialize」メソッドの中の処理が実行され、@user_name = "ゲスト"@user_name という変数に "ゲスト" が格納されます。

次に user.display_current_user で「display_current_user」メソッドが呼び出され、p @user_name が実行されて、@user_name の値である「ゲスト」が画面に表示されます。

@user_name のようにして変数名の手前に @ をつけると、インスタンスの中であれば、その変数を他のメソッドからでも呼び出せるようになります。これを「インスタンス変数」と言います。今回の例では、@user_name は「initialize」メソッドと「display_current_user」メソッドの両方から共有して使えることがわかります。

メモ

クラスの中で定義できる変数には、インスタンス変数のほかに、ローカル変数やクラス変数があります。

変数の種類について詳しくはこちら

 

クラスを継承する

クラスの継承をすると、別のクラスのメソッドを引き継いで使うことができるようになります。

以下の例は、「User」クラスを継承して「Japanese」クラスを作成する例。

プログラム
class User
  def initialize
    @user_name = "ゲスト"
  end

  def display_current_user
    p @user_name
  end
end

class Japanese < User
  def hello
    p "こんにちは"
  end
end

user = Japanese.new
user.display_current_user
user.hello
実行結果
"ゲスト"
"こんにちは"

class Japanese < User のように、クラスを宣言するときに後ろに < 継承したいクラス名 をつけることで、指定したクラスを継承できます。今回の場合だと、継承元である「User」クラスの中の「initialize」や「display_current_user」メソッドが、継承先の「Japanese」クラスでも使えるようになっています。

そのため、user = Japanese.new で「Japanese」クラスからインスタンスを作成したときに「User」クラスの「initialize」メソッドの中の処理が実行されます。

また、user.display_current_user では、「User」クラスの「display_current_user」メソッドの中の処理が実行されます。

user.hello では、もちろんインスタンスを作成した元となる「Japanese」クラスの「hello」メソッドが実行されます。

メモ

クラスの継承について詳しくはこちら

 

まとめ

以上、Ruby でのクラス(class)の使い方でした!

 

ここまでの内容をまとめておきます。

  • クラスは、オブジェクト(インスタンス)を作成するための設計図にあたり、メソッドや変数をひとつにまとめたもの。クラスを作成するときは、class クラス名 〜 end のように記述する。
  • クラスからオブジェクト(インスタンス)を作成することで、定義しておいたメソッドや変数を使える。クラスからインスタンスを作成するときは、クラス名.new のように記述する。
  • クラスの中で initialize メソッドを使うと、インスタンス作成時に実行したい処理を書くことができる。
  • クラス内では def メソッド名 〜 end のようにしてインスタンスメソッドを定義することができ、インスタンス.メソッド名 で呼び出せる。
  • @変数名 のようにして変数名の手前に @ をつけると、インスタンスの中であれば、その変数を他のメソッドからでも呼び出せる。
  • クラスを宣言するときに後ろに < 継承したいクラス名 をつけることで、指定したクラスを継承することができ、別のクラスのメソッドを引き継いで使える。