Ruby on Railsで使う最低限のRuby入門

どうも、tatsuです!

今回は、Ruby on Railsを始める前に知っておきたいRubyの記事になります!

Railsのルールに従っていれば簡単にウェブサービスを作ることができますが、データを加工するときのロジックなどRubyをそのまま使う場面も多々あります。

そこで、Railsで使われるソースコードを見ながら最低限Rubyの知識を付けておきましょう!
※本記事では多少プログラミングの知識がある前提でお話しているため、「変数ってなに?」という方はわからない単語を調べながら見ていただけると理解できると思います。

Railsで使われるRuby

ここではscaffoldで作成されたコントローラーのコードを例にします。
scaffoldについては以下の記事を参考にしてください。

Windowsで始めるRuby on Rails入門【2.scaffold】

2018.10.18

 
scaffoldで作成されたコントローラーのコードは以下の通りです。

class SamplesController < ApplicationController
  before_action :set_sample, only: [:show, :edit, :update, :destroy]

  # GET /samples
  # GET /samples.json
  def index
    @samples = Sample.all
  end

  # GET /samples/1
  # GET /samples/1.json
  def show
  end

  # GET /samples/new
  def new
    @sample = Sample.new
  end

  # GET /samples/1/edit
  def edit
  end

  # POST /samples
  # POST /samples.json
  def create
    @sample = Sample.new(sample_params)

    respond_to do |format|
      if @sample.save
        format.html { redirect_to @sample, notice: 'Sample was successfully created.' }
        format.json { render :show, status: :created, location: @sample }
      else
        format.html { render :new }
        format.json { render json: @sample.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /samples/1
  # PATCH/PUT /samples/1.json
  def update
    respond_to do |format|
      if @sample.update(sample_params)
        format.html { redirect_to @sample, notice: 'Sample was successfully updated.' }
        format.json { render :show, status: :ok, location: @sample }
      else
        format.html { render :edit }
        format.json { render json: @sample.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /samples/1
  # DELETE /samples/1.json
  def destroy
    @sample.destroy
    respond_to do |format|
      format.html { redirect_to samples_url, notice: 'Sample was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_sample
      @sample = Sample.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def sample_params
      params.require(:sample).permit(:title, :body)
    end
end

それではこのコードからいくつかに分けてRubyの書き方の説明をしていきます。

クラス

一番最初の行でクラス宣言が行われています。
class クラス名とすることでクラスを宣言することができます。

class SamplesController < ApplicationController

 
ここではSamplesControllerというクラスが宣言されています。

< ApplicationControllerってなに?
よく見ると(よく見なくても)SamplesControllerのあとに < ApplicationControllerとあります。

これはオブジェクト指向でいう継承です。

SamplesControllerクラスはApplicationControllerクラスを継承しているため、ApplicationControllerクラスで定義されている変数やメソッドを使用することができます。

メソッド

以下のようにdefendでくくられた部分がメソッドと呼ばれます。

  def index
    @samples = Sample.all
  end

 
ここではindexという名前のメソッドが定義されています。

privateメソッド

以下のようにprivateと記述した後に定義したメソッドは全てprivateメソッドとなります。

private
  # Use callbacks to share common setup or constraints between actions.
  def set_sample
    @sample = Sample.find(params[:id])
  end

 
privateメソッドにすると、外部から直接メソッドを呼ぶことができず、privateメソッドを呼べるのはクラス内からに限定されます。

変数

以下のように@変数名とすると、インスタンス変数を定義することができます。

@samples = Sample.all

 
ここでは@samplesというインスタンス変数が定義されています。

インスタンス変数とは
インスタンス変数とは、オブジェクト内ならどこからでも参照可能な変数のことです。

Aというメソッド内で定義されたインスタンス変数は、Bという別のメソッド内から呼び出すことができます。

ローカル変数
インスタンス変数とは違い、ローカル変数という変数が存在します。

ローカル変数はそのメソッド内でしか使用することができません。

定義の仕方としては、先頭に@をつけなければ(例:samples = XXX)ローカル変数となります。

if文

以下のようにifelse(省略可能)でくくられた部分がif文と呼ばれます。

if @sample.save
  format.html { redirect_to @sample, notice: 'Sample was successfully created.' }
  format.json { render :show, status: :created, location: @sample }
else
  format.html { render :new }
  format.json { render json: @sample.errors, status: :unprocessable_entity }
end

 
if文はif 条件といった部分の条件がtrueなら一段下がった部分の処理が行われ、条件がfalseの場合はelseのあとに一段下がった部分の処理が行われます。

条件がfalseのときに行う処理が無ければ、elseは省略可能です。

そしてif文の終わりはendで閉めましょう。

まとめ

今回は最低限ですが、Rubyの知識を説明しました。

全く読めないという状態よりは、少し読めて知らないところは調べるといった具合までステップアップできたのかなと思います。

興味のある方はRailsを使ってウェブサービスを作ってみましょう!

Windowsで始めるRuby on Rails入門【1.環境構築】

2018.10.17

それでは!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です