継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

RubyとRuby on Railsの学習メモ(1)

タダです。

最近、プログラミングをなんとかできるようになりたいと思って、TECH::CAMPさんにお世話になっているのですが、そこでRubyRuby on Railsをまず学びました。

基本的な学習は一周したのですが、概念として理解しきれていないものがあるので、整理するためにブログを書いていこうというシリーズをやっていきます。

初回は、以下の事について整理します。

なお、自分のプログラミングに関するステータスは次のような状態です。

  • 新卒1年目で入った会社で、マークアップ言語(HTML、CSSJavaScript)と、Javaを研修として学ぶ
    • コードレビューの概念はほどんどなく、プログラミングのお作法や、どう書くべきかは教わらず自己流で進める
  • 2社目でJavaを業務では触ったが既存のコード改修と指示された要件を軽く追加するだけの作業であったためバリバリコードをかけるかというと書けない部類になる

プログラミングに関する言葉や文法はそこそこ知っているけど、実際に設計や設計を元に実装するという力は弱い状況です。

Ruby

Rubyで整理しておきたいのは以下のものです

  • オブジェクト
    • Rubyで扱えるデータはすべてオブジェクト(文字、数字、色、時間etc)
  • メソッド
    • メソッドはオブジェクトを呼び出すための道具(何らかの処理を付与する
    • オブジェクトからメソッドを介して返却されるデータを返り値という
  • クラス
    • オブジェクトの管理・生成方法として、クラスとインスタンスがあり、クラスは、オブジェクトの共通の属性(情報)とメソッドをまとめて定義しておく型のようなもの
  • インスタンス

クラスとインスタンスに関連する概念も合わせて整理していきます。

クラスとインスタンスについて

クラスの定義は、以下のように行いクラス名は半角大文字で始めます。

class クラス名
  # 変数/メソッドの定義
end

インスタンスは以下のように定義します。

class Test
  # 変数/メソッドの定義
end

test = Test.new

クラスメソッドとインスタンスメソッド

クラスメソッド = クラスが使用できるメソッド。クラス地震でも使用でき、クラスで共通の情報を持った処理に使用する インスタンスメソッド = インスタンスが使用できるメソッド。インスタンスメソッドを定義したクラスのインスタンスにしようできる。インスタンスごとの個別の属性値を持った処理に使う。

クラスメソッドの定義と呼び出し方

# 定義
class Test
  def self.メソッド名
    # 処理
  end
end

# 呼び出し方
クラス名.メソッド名(引数)
*代表的なクラスメソッドはnewメソッド

インスタンスメソッドの定義と呼び出し方

# 定義
class Test
  def メソッド名
    # 処理
  end
end

# 呼び出し方
インスタンス名.メソッド名(引数)

クラスメソッドとインスタンスメソッドの違い

クラスメソッドとインスタンスメソッドの違いを以下のようにまとめられます。

特徴 インスタンスメソッド クラスメソッド
定義方法 メソッドの前にselfはつけない メソッドの前にselfをつける
用途 インスタンスごとの属性を用いる場合 属性は関係のない共通の処理
呼び出せるオブジェクト クラスのインスタンス クラス自身

クラス変数とインスタンス変数について

いずれも共通の属性の定義方法になりますが、クラス変数とインスタンス変数に別れます。 クラス変数はクラス全体で使用できる変数で、クラス内であればどこでも使えるため、クラスメソッド、インスタンスメソッドの両方で使える変数です。 対して、インスタンス変数は、インスタンス毎に定義され、インスタンスメソッドのみで使用可能です。

インスタンス変数を定義する場合は次のように行います。

# 定義
class Test
  def メソッド名
    @test = "hoge"
  end
end

クラス変数を定義する場合は次のように行います。

# 定義
class Test
  @@test = "hoge"
end

Ruby on Rails

次に、Ruby on Railsで整理しておきたいのは以下の概念です。

ルーター/コントローラー/ビューについて

Railsの処理は幾つかのパートが存在し、ルーティング、コントローラー、ビューがそれぞれの役割を持って処理を行います。

ルーティングは、クライアントからのリクエストに対してどのコントローラのどのアクションを動かすかの設定を行います。 config/routes.rbで定義を行います。

コントローラーは、ルーティングとビューをつなぐ役割を持っています。 リクエストに対してコントローラーの処理を行った後、コントローラーから指定したビューが読み込まれます。 コントローラーを作成するためにはrails g controllerコマンドを実行します。

ビューはクライアントのリクエストに対してのレスポンスとして返されるファイルデータになります。 ビューはコントローラーのメソッド一つにつき、一つ存在します。

モデルについて

モデルは、Railsの中でデータエースへのアクセスをはじめとする情報のやり取りに関する処理を担当しているパートです。 モデルがなければ、ルーター/コントローラー/ビューで返されるデータは毎回同じデータになってしまいます。 実態は一つのクラスが定義された、◯◯.rbファイルです。 コントローラーからモデルを利用してデータベースのデータをよんで、ビューに渡すことを行っています。

以上が今回のまとめになります。