8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【初学者向け】Railsにおけるselfの理解:初学者向けイメージガイド

Last updated at Posted at 2024-01-16

初学者向けself.の使い方について

Ruby on Railsを学習して1ヶ月経ったので
1ヶ月前の自分が分からなかった事の一つselfについて
初学者なりにイメージしやすい使い方を伝えようと思います。
出来るだけ専門用語を使わずに書きますが
抜け漏れ誤りがあればご指摘してもらると助かります。

self.とは

chatgptに専門用語を使わずにselfとは何か質問したら下記の返答がありました。

「selfは、RubyやRailsで使われる言葉で、
特定のコードの中で 「自分自身」 を指すキーワードです。
例えば、あるオブジェクトが自分自身のメソッドを呼び出す場合や、
クラス内で自分自身にアクセスする場合に使います。簡単に言えば、
そのコードの中で「私(自分自身)」を指すものと考えれば良いです。」

はい、どうでしょうか?イメージ出来ますか?
selfを学び始めの頃の自分には 「自分自身」 ってどういう事?ってなってました。
なのでこれから 「自分自身」についてイメージしやすくしていきます。

※以下の図を理解するにはRailsの基礎MVCについて
なんとなくでもいいので理解する必要があります。

Railsの処理の流れ
スクリーンショット 2024-01-17 1.08.59.png

短時間で作ったので見にくい箇所もあるかもしれませんが
Railsは上記の図の①から順に処理をしています。
selfを使うのはMVCのM、モデルファイルにて使用します。

ではモデルとは何をするファイルでしょうか?

モデルファイルはデータベース内のテーブルにアクセスし、
データの取得や保存を行うためのコードが記述するファイルです。
先ほどの図の④、⑤を見るとイメージしやすいと思います。

そしてモデルファイルはデータベースの一つのテーブルに対して一つのみ存在します。

実際にデータベースを作成した事がある方は分かると思いますが、
ターミナルでbin/rails generate model (モデル名)を実行すると
マイグレーションファイル(データベースの変更やテーブルの作成に関するコードが含まれるファイル。例: db/migrate/(タイムスタンプ)create(モデル名.pluralize).rb)と
モデルファイル(データベーステーブルの構造やデータの操作に関するコードが含む。
例: app/models/(モデル名).rb)が作成されます。

今回は以下のようにマイグレーションファイルに記述してマイグレーションするとします。
(マイグレーションとは、データベースの構造を変更するための手順を定義したファイルのことです。これによって、新しいテーブルを作成したり、既存のテーブルに新しいカラムを追加したりすることができます。マイグレーションファイルには、その変更内容が記述されています。)

        class CreateUsers < ActiveRecord::Migration[6.0]
          def change
            create_table :users do |t|
              t.string :name
              t.integer :age

              t.timestamps
            end
          end
        end

上記のコードでUsersテーブルを作成し、
カラムには名前が入る「name」年齢が入る「age」を入れています。

説明が長くなりましたがこれから実際にselfを使わない場合と使う場合を見ていきましょう。

モデルファイル(app/models/user.rb)

selfを使わない場合

app/models/user.rb
    class User < ApplicationRecord
        def User.create_new_user(name, age)
          user = User.new(name: name, age: age)
          user.save
          user
        end
    end

selfを使う場合

app/models/user.rb
    class User < ApplicationRecord
        def self.create_new_user(name, age)
          user = self.new(name: name, age: age)
          user.save
          user
        end
    end

実用的なコードではありませんが、
使う場合と使わない場合どちらも同じ処理です。

selfを使う場合と使わない場合を比較すると
User.と記述するかself.を記述するかの違いが分かります。
先程も書いた内容ですが、
「モデルファイルはデータベースの一つのテーブルに対して一つのみ存在します。」

つまりモデルファイル「user.rb」とUsersテーブルは繋がっていて、
Usersテーブルからデータの取得や保存を行うためのコードは
「user.rb」にしか 記述が出来ません。

上記の事から
Usersテーブルを利用したコードをuser.rb内に記述するのに
わざわざUser.と記述するのではなく、
self.(自分自身)と記述すれば
プログラムが「User.の事か」と解釈してくれます。

最後に

今回はself(自分自身)についてイメージしやすくする為に
出来るだけ専門用語を少なくして説明しました。

基本的な内容なので、例外もある内容だと思いますが
抜け漏れ誤りがある場合はご指摘頂けると助かります。

自分もまだ初学者の部類ですが、Rails勉強始めて間もない方の参考になれば嬉しいです。

ちなみにRails学習していくとselfは省略出来る事を学ぶので
学習後半には使わない場面があると思います。
例えば先ほどのコードだと

    class User < ApplicationRecord
        def self.create_new_user(name, age)
          user = new(name: name, age: age)
          user.save
          user
        end
    end

上記のようにself.newではなくnewだけで大丈夫です。

8
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?