LoginSignup
16
9

More than 3 years have passed since last update.

【Rails】現場Railsメモ

Last updated at Posted at 2020-04-04

執筆中

  • 復習
  • アウトプット前提のインプット

環境

Ruby 2.6.5
Rails 5.2.4.2
MySQL 5.7.28

Chapter1 RailsのためのRuby入門

オブジェクト

  • 言葉によって区別できるあらゆる「モノ」
  • 全てのオブジェクトはobject_idという固有番号をもち、固有の存在として認識される
  • 仕事は何らかの振る舞い(メソッド)をすること

クラス

  • オブジェクトの原型になるもの(設計図)

人間

太郎くん
花子さん
hogeくん
fugaくん

人間がクラスに該当。

インスタンス

  • クラスを元に作成された実態

人間

太郎くん
花子さん
hogeくん
fugaくん

人間未満(言葉不適切?)がインスタンスに該当。

変数

  • 何かのオブジェクトをさし示すことができる、ラベルのような存在

ローカル変数

  • プログラム中の一定の処理の範囲で使われ、その範囲が終わったら捨てられる

インスタンス変数

  • オブジェクトの内部に保持されてオブジェクトが存在する限り一緒に存在する

メソッド

  • オブジェクトの何らかの振る舞い
  • クラスメソッドとインスタンスメソッド

人間
- 名前
- 体
- 喜怒哀楽

太郎くん
- 1秒間にタイピングを10回打てる
花子さん
- 3桁の数字の15個の和を2秒で求められる
hogeくん
- 100mを9.58で走れる
fugaくん
- 1時間で料理を10品作れる

人間クラスのインスタンスである4人は歩く、食べる、笑うことができる。
名前、体、喜怒哀楽クラスメソッドに該当。

人間クラスのインスタンスである4人のそれぞれにしかできない
特殊能力がインスタンスメソッドに該当。

レシーバー

  • メソッドを呼ぶ元のオブジェクト

hoge = 'ほげ'
hoge.length
hoge.class

hoge.lengthhogeがレシーバーに該当。
.lengthStringクラス(前述の人間クラス)がもつメソッドに該当。

返り値(戻り値)

  • メソッドが呼ばれた時に帰ってくる値のこと

属性(Attribute)

  • オブジェクトの抱えるデータ

1-4~スタート

Chapter3 タスク管理アプリケーションを作ろう

テンプレートエンジン

  • HTMLの構造が直感的にわかりやすいテンプレート

ERBやHamlやSlim

Strong Parameters

  • 想定しているリクエストパラメーターのみ受け取る仕組みのこと

flashとflash.nowの違い

  • flash → 次のリクエストに対してデータを伝える → redirect
  • flash.now → 同じリクエスト内で伝えることができる → render

simple_format

  • 入力時の改行を、表示させる時に改行としてviewに表示させることを可能にする

リファレンス

Chapter4 現実の複雑さに対応する

環境別rails db:migrate

ターミナル
# 開発用
$ rails db:migrate
# テスト用
$ rails db:migrate RAILS_ENV=test
# 本番用
$ rails db:migrate RAILS_ENV=production

change_cloumn_null

  • 既存テーブルの既存カラムのNOT NULL制約をつけたり外したりできる

共同開発を意識し、今後はrails db:rollbackは極力使用しないようにする

ターミナル
$ rails g migration Changeテーブル名NameNotNull
db/上記コマンドによって生成されるマイグレーションファイル
def change
  change_column_null :テーブル名, :カラム名, false or true
end

オリジナルの検証コード(重要)

  • P141~142

本書ではカンマを許可しないメソッドを実装

ぼっち演算子(&.)

  • nilガード

if name&.include?(',')

nameがnilだった場合(空欄)にメソッドが実行されないようにする

コールバック

  • 登録や削除などの重要なイベントの前後に任意の処理を挟むことができる仕組み

然るべきタイミングが来たら処理を呼ぶことができる

トランザクション

  • 一連の複数の処理によるデータベースの生合成を保つための機能

セッション

  • 1つのブラウザから
  • 連続して送られている複数のリクエストの間で
  • ブラウザとサーバーで共有したい「情報」を
  • サーバー側に保存する仕組み

Cookie

  • 1つのブラウザから
  • 連続して送られている複数のリクエストの間で
  • ブラウザとサーバーで共有したい「情報」を
  • ブラウザ側に保存する仕組み

セッションとCookie

digest

  • ハッシュ化を行った文字列

パスワードの保存時に使用

ハッシュ化

  • 元の値に戻すことができない一方的な変換

Userモデルにadminフラグを追加

マイグレーションファイル
def change
  add_column :users, :admin, :boolean, default: false, null: false
end

:boolean, default: falseadminカラムに0が入る?
データ取得時にはtrueorfalseが入っている

true or falseの言語化?

ターミナル
$ rails c
user1 = User.first
user1.admin
→ false

user2 = User.find(2)
user2.admin
→ true

user1.admin? ? '権限あり' : '権限なし'
→ 権限なし

user2.admin? ? '権限あり' : '権限なし'
→ 権限あり

? 'true(1)時の表示' : 'false(0)時の表示'

ログイン機能

  • ログインする = セッションというリソースを作る
  • リソース = コントローラが扱う概念的なデータのこと

helper_method

  • 全てのビューから使用可能に
application_controller.rb
helper_method :current_user

private

  def current_user
    hogehogehogehoge
  end

application_controller.rbに記載することで全てのコントローラから使用可能に
helper_method指定することで全てのビューから使用可能に

scope

  • 繰り返し利用される絞り込み条件を読みやすくできる

rails_autolink

  • クリックで外部リンクへ遷移させる動作を簡単にする

Chapter5 テストをはじめよう

RSpec

  • テスティングフレームワーク

Capybara

  • WebアプリケーションのE2Eテスト用フレームワーク
  • テスティングフレームワークと組み合わせて使用
  • Webアプリケーションのブラウザ操作をシミュレーションできる
  • JavaScriptの動作を含めたテストを行える

FactoryBot

  • テスト用のデータを簡単に用意し、テストから呼び出して利用することができる

System Spec

  • ブラウザを通してアプリケーションの挙動を外部的に確認できる
  • テストの粒度として一番外側に位置しており、特に重要と考えられるSpec

ドライバ

  • Capybaraを使ったテストに置いてブラウザ相当の機能を利用するために必要なプログラムのこと

chromedriver-helperはサポート終了

Selenium::WebDriver::Error::SessionNotCreatedError:が表示
ググると代替えgemを入れれば問題ないとのこと

Gemfile

group :test do
  - gem 'chromedriver-helper'
  + gem 'webdrivers'

共通化

  • 同じ階層にある全てのdescribe/context内で共通する処理は一つ上の階層のbeforeに書くことで共通化できる

let

  • 変数のように(実際に変数を作るわけではない)テストケースの値を代入できる
  • describe/context内に定義すると、その外側でも内側でも代入した値を呼び出して使用できる

letが実行されるのはletが呼ばれた時のみで、
確実に実行してほしい場合は let! を使う

Chapter6 Railsの全体像を理解する

RESTful

  • 設計原則に従うシステムを指す形容詞

ログの出力

  • loggreオブジェクトのdebugメソッドを呼ぶ
ログレベル(数字) ログレベル  意味
5 unknown 原因不明のエラー
4 fatal エラーハンドリング不可能な致命的エラー
3 error エラーハンドリング可能なエラー
2 warn 警告
1 info 通知
0 devug 開発者向けデバッグ用詳細情報
logger.ログレベル

デフォルトのログレベルはdebug

条件別にparams分岐

task_params = if user.premium?
  params.require(:task).permit(:name, :description, :special)
else
  params.require(:task).permit(:name, :description)
end

アセットパイプライン

  • JavaScript、CSS、画像などのリソースを効率的に扱うための仕組み

開発者が書いたJavaScriptやCSSを、最終的にアプリを使う上で都合の良い状態にするためのパイプライン処理を行う

16
9
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
16
9