Rails

挫折しないRailsチュートリアルまとめ【第4章】

Railsチュートリアル第4章を走破しましたのでまとめを。

Railsチュートリアル第4章の内容

RailsではRubyで構築さrていますが、Rails特有なものになっているので「Rails風味のRuby」の基礎を学習します。

4.1 動機

4.1.1 組み込みヘルパー

  • Railsに予め組み込まれている関数のことを組み込みヘルパーと呼ぶ
    例:「app/views/layouts/application.html.erb」の「stylesheet_link_tag」など
  • Railsの組み込み関数、()を使わないメソッド呼び出し、シンボル、ハッシュというRubyの4つの概念がある

4.1.2 カスタムヘルパー

  • ヘルパーを自分で作成することができ、それをカスタムヘルパーと呼ぶ
  • カスタムヘルパは「app/helpers/」内のファイルに作成する

4.2 文字列とメソッド

  • Railsコンソールを使用して学習する
  • AWS Cloud9を使用している場合は「nano」というシンプルなテキストエディタがある
  • Railsコンソールはデフォルトで開発(development)環境で起動する
  • Railsコンソールを終了するには「Ctrl+C(強制終了)」「Ctrl+D(正常終了)」
  • 気になるコードがあればRuby API(英語)を参照する

4.2.1 コメント

  • Rubyのコメントは「#」

4.2.2 文字列

  • 文字列は「”」または「’」で囲む
  • 「+」演算子を使うと文字列を結合できる
  • 文字列の中(「”」で囲んだ中)に「#{変数名}」で変数を埋め込める(式展開と呼ぶ)
  • 「’」は文字列をそのまま出力する(特殊文字をエスケープする必要がない)
  • 「puts」「print」はいずれも文字列を出力するが、「puts」文末に改行がつく
  • nilは「何もない」ことを表す(他言語でいうNULL)

4.2.3 オブジェクトとメッセージ受け渡し

  • Rubyは全てがオブジェクト
  • オブジェクトはどのような場合もメッセージ(メソッド)に応答するもの
  • メソッドの応答(戻り値)が論理値(true、false)を返す場合はメソッドはメソッドの末尾に「?」をつける
  • nilもオブジェクトだが、「nil.empty?:には応答しない
  • 「nil.empty?」には応答しないが、「nil.to_s.empty?」には応答する
    (メソッドをつなげていくことを「チェーン」と呼ぶ)
  • 「オブジェクト.nil」でnilであるかを調べることができる
  • 処理の後にif文を記述するとifの条件が真の場合のみ処理が実行される(後続ifと呼ぶ)
  • nilは特別なオブジェクトでオブジェク自身の論理値がfalseのものは「false」と「nil」のみ
  • 「!!」演算子でオブジェクトを強制的に論理値に変換できる

4.2.4 メソッドの定義

  • メソッドを「def メソッド名(引数名 = 初期値)」のように定義すると呼び出し時に引数を省略できる
  • Rubyにはメソッド無いで最後に評価された結果が返される「暗黙の戻り値」がある
  • メソッドの引数名はメソッドの呼び出し側には全く影響はない

4.2.5 titleヘルパー、再び

  • 関連したメソッドをまとめる方法に「モジュール(module)」がある
  • モジュールは「includeメソッド」を使用して読み込む(ミックスイン(mixed in)とも呼ぶ)
  • Railsではヘルパーモジュールを自動的に読み込むので、includeを書く必要がない

4.3 他のデータ構造

文字列以外のRubyのデータ構造について学習する、

4.3.1 配列と範囲演算子

  • 配列(array)はて特定の順序を持つ要素のリスト
  • 「split」メソッドで文字列を配列に区切ることができる。区切り文字のデフォルトは空白で、任意に指定することもできる
  • 配列のインデックス番号は0からはじまり、配列名[インデックス番号]でアクセスする
  • 配列名.first、配列名.second、配列名.lastなどのメソッドでもアクセスできる
  • 配列名.sortなど配列の順番を変えて応答するものは、配列自体の値は変わっていない
  • 配列名.sortなどで配列自体の値を変える場合は、メソッド名の末尾に「!」をつける(配列名.sort!など。破壊的メソッドと呼ばれる)
  • 配列に値を追加するには「配列名.push(値)」や「配列名 << 値」で行う
  • 配列の中は型が混在できる
  • 「配列名.join」で配列の内容を結合できる
  • 配列名[min..max](minとmaxに数値が入る)で、指定した範囲内の値が取得できる
  • インデックス番号にはマイナス値を指定できる(-1が一番最後の要素)

4.3.2 ブロック

  • ブロックは「{}」で囲むか「do」と「end」で囲んで表現する
  • 1行のコードの場合「{}」で、複数行の場合は「do」と「end」で囲む
  • ブロック部分で「|」で囲んだ変数をブロック変数といいブロック内でのみ使用できる
  • 「mapメソッド」は配列の要素文ブロックを実行し、実行した結果の配列を返す

4.3.3 ハッシュとシンボル

  • ハッシュはキー(オブジェクト)に対して値を管理する(連想配列のようなもの)
    定義:ハッシュ名 = {}
  • ハッシュは並び順が保証されない(配列は保証されている)
  • 「:文字列」はシンボルという特殊なデータ
  • ハッシュの定義例
    キーを文字列:ハッシュ名  = { キー1 => 値, キー2 => 値, ・・・ }
    キーをシンボル①:ハッシュ名 = {:シンボル1 => 値, :シンボル2 => 値, ・・・  }
    キーをシンボル②:ハッシュ名 = {シンボル1: 値, シンボル2: 値, ・・・}
  • 未定義のキーにアクセスするとnilが返る
  • eachメソッドに応答する。キーと値が複数ある場合は1つ目のハッシュに対して処理される
  • inspectメソッドは指定されたオブジェクトを表現する文字列を返す
  • 「p オブジェクト名」は「puts オブジェクト名.inspect」と同じ

4.3.4 CSS再び

  • メソッドの引数を囲む丸カッコ「()」は省略可能
  • ハッシュがメソッド呼び出しの最後の引数の場合波カッコ「{}」は省略可能
  • Rubyはプログラム中の改行と空白を区別しない

4.4 Rubyにおけるクラス

  • Rubyはメソッドをまとめるのにクラスを使用する
  • クラスからインスタンスが生成されることでオブジェクトが作成される

4.4.1 コンストラクタ

  • 「変数名 = “文字列”」は「変数名 = String.new(“文字列”)」と同じ。
    (「変数名 = “文字列”」は暗黙でコンストラクタが作成されている)
  • 「変数名.class」は変数が所属しているクラスを返す
  • 配列のコンストラクタ「Array.new」は引数が必要だが、ハッシュのコンストラク「Hash.new」は引数は不要。(キーが存在しない場合のデフォルト値となる)
  • メソッドがクラス自身に対して呼び出されるものをクラスメソッドと呼ぶ
  • クラスをnewしたものに対して呼び出されるメソッドをインスタンスメソッドと呼ぶ

4.4.2 クラス継承

  • 「オプジェクト.class.superclass」を使うとクラス階層を追うことができる
  • 「self」はオブジェクト自身を指す

4.4.3 組み込みクラスの変更

  • Rubyでは予め組み込まれている「String」などのクラスも変更可能
  • RailsではStringクラスに「blank?メソッド」が追加されている
    nil.blank?:true
    “”.b;ank?:true
    ”     “.blank?:true
    ”     “.empty:false

4.4.4 コントローラクラス

  • RailsはRubyで書かれているが、厳密にはRubyとは別物(Rails特有のクラスになっている)

4.4.4 ユーザークラス

  • アクセサー(acccessor)を作成すると、そのデータを取り出すメソッド(getter)と、データを代入するメソッド(setter)をそれぞれ定義してくれる
  • Railsではコントローラでインスタンス変数を宣言するとビューで使用できるというところに使用されている
  • インスタンス変数は「@」で始まり、値が定義されていなければ、nilが返る
  • initializeはインスタンスを生成(クラス名.new)した時に自動的に呼び出される

感想

Rubyの基礎という内容ですが本当にサラッとなので、やっぱりProgateなどで事前にRubyの学習をしておいたほうが良いと感じました。

「早くWebアプリ作りたい」という思いからいきなりRailsにいくと逆に遠回りかなと。

僕は事前にProgateとドットインストールそれぞれでRubyとRailsをやってたおかげでなんとかなってますが、やってなかったら本当「?」ばっかりだったと思います。

急がば回れ。

Railsチュートリアルはまさにこれです。

あと、章毎にまとめ方というかブログの書き方が全く異なるのはそっとしておいてください。

ABOUT ME
Jyu2
ソフトウェア会社(SIer)で10年以上勤務のシステムエンジニア|ポケットWiFi使用歴2年以上|ポケットWiFi+αで快適でお得なインターネット環境を構築するための情報を発信|その他、IT情報やWebサービス、アプリ、ガジェットなどの情報を発信|自分と他の人のカバンの中身を紹介するメディア「カバンの中身ラボ(https://kaban-no-nakami-labo.com/)」も運営しています。 ポケットWiFi選びに迷ったらTwitter、お問合せフォームからご連絡ください。