執筆中
- 復習
- アウトプット前提のインプット
環境
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.length
のhoge
がレシーバーに該当。
.length
は**Stringクラス
**(前述の人間クラス)がもつメソッドに該当。
返り値(戻り値)
- メソッドが呼ばれた時に帰ってくる値のこと
属性(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
def change
change_column_null :テーブル名, :カラム名, false or true
end
オリジナルの検証コード(重要)
- P141~142
本書ではカンマを許可しないメソッドを実装
ぼっち演算子(&.)
- nilガード
if name&.include?(',')
nameがnilだった場合(空欄)にメソッドが実行されないようにする
コールバック
- 登録や削除などの重要なイベントの前後に任意の処理を挟むことができる仕組み
然るべきタイミングが来たら処理を呼ぶことができる
トランザクション
- 一連の複数の処理によるデータベースの生合成を保つための機能
セッション
- 1つのブラウザから
- 連続して送られている複数のリクエストの間で
- ブラウザとサーバーで共有したい「情報」を
- サーバー側に保存する仕組み
Cookie
- 1つのブラウザから
- 連続して送られている複数のリクエストの間で
- ブラウザとサーバーで共有したい「情報」を
- ブラウザ側に保存する仕組み
digest
- ハッシュ化を行った文字列
パスワードの保存時に使用
ハッシュ化
- 元の値に戻すことができない一方的な変換
Userモデルにadminフラグを追加
def change
add_column :users, :admin, :boolean, default: false, null: false
end
:boolean, default: false
でadminカラムに0が入る?
データ取得時にはtrue
orfalse
が入っている
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
- 全てのビューから使用可能に
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を入れれば問題ないとのこと
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を、最終的にアプリを使う上で都合の良い状態にするためのパイプライン処理を行う