😸

Rails学習

2022/04/12に公開
  • modelsのconcerns:共通部分をまとめる
  • 単一責任のクラスを作る:複数の役割を持たせない
    • 共通処理はモジュールにする
  • returnはできるだけ書かない
  • moduleのメリット
    • メソッドや定数を一箇所にまとめて整理しておくことができる。
    • クラスで読み込むこと(Mix-in)ができ、多重継承が実現できる。
    • 名前空間を分けて、メソッド名の重複を防げる。
    • https://26gram.com/ruby-module
  • 特異メソッド:オブジェクトに対して直接固有のメソッドを定義することができる
  • moduleのselfって何?
    • モジュールの外からメソッドを直接呼び出すことができるようになる
  • 変数
    • インスタンス変数(@で始まる変数)
      • クラスから生成されたオブジェクトがインスタンス
      • initializeメソッドとオブジェクトのインスタンスメソッドのみアクセス可
      • インスタンス変数を外から呼ぶ場合getter/setter要(attr_accessorを利用)
        • インスタンス変数はprivate扱いとなる
    • クラス変数(@@で始まる変数)
      • クラスの特異メソッド、インスタンスメソッドなどから参照/代入ができる
      • サブクラスから参照/代入が可能
  • 定数:https://moonstruckdrops.github.io/blog/2014/03/23/rails-consts/
    • freezeつける(rubocopで自動整形できるので自分で書かなくてもいい)
  • アノテーション
    • TODO:後日追加が必要な、不足の機能
    • FIXME:修正の必要な箇所
    • OPTIMIZE:パフォーマンス低下の原因となる箇所
    • HACK:リファクタリングの必要なマズいコード
    • REVIEW:意図したとおりに動くかどうかチェックが必要
  • rspec
  • Rakeタスク
  • モック
    • described_class:テストコードを書くモデルを直接対象としている
    • モック
      • 空のモックオブジェクトを作る:twitter_client_mock = double('Twitter client')
        • doubleの引数は任意(エラー時に表示されるのでわかりやすい名前をつける)
      • allow(実装を置き換えたいオブジェクト).to receive(置き換えたいメソッド名).and_return(返却したい値やオブジェクト)
    • なるべくsubjectは使わない方がいい
  • 乱数のテスト

Discussion