fv17の日記

Webエンジニアの備忘用ブログです。主にWeb界隈の技術に関して書いています。

Rails - byebug gemを導入してdebuggerでデバッグする

debuggerの使い方メモ (RubyMineでいいじゃん感)

導入と使い方

  1. byebug gemを導入
  2. debuggerをソースに組み込む
  3. Railsを実行するとコマンドラインで該当箇所で止まって色々調査できる
  4. Ctrl-Dで抜ける

代表的なコマンド

コマンド 説明
eval 変数の値、メソッドの戻り値を表示する。
s(step) 1ステップ進める。メソッドがあればその中に入る。
n(next) 1ステップ進める。メソッドがあってもその中には入らない。
f(finish) 今いるメソッドを最後まで実行し、呼び出し元へ。
c(continue) 処理を再開。ブレークポイントがない場合は最後まで実行し終了。
q(quit) Byebug / Railsを終了。

Ruby - Refinementsとは

書籍「メタプログラミング Ruby」の写経兼復習用。

Refinementsとは、Rubyにおけるオープンクラスのスコープを特定の範囲に限定するもの。

具体的に見ていくと、下記のようなオープンクラスを用いた場合、その影響範囲はアプリケーション全体となり、予期せぬところでコードを破壊するなどの危険性があった。

class String
  def to_alphanumeric
    gsub(/[^\w\s]/, '')
  end
end


そのため、Refinementsによりオープンクラスの効果範囲を特定のモジュールだけに限定できるようにした。下記のように、refine クラス名 do ... end の形式で宣言し、モジュール内でusingすることでオープンクラスの効果を限定することができる。

module StringExtentions
  refine String do
    def to_alphanumeric
      gsub(/[^\w\s]/, '')
    end
  end
end

module SomeModule
  using StringExtentions
  "#3, the *Magic, Number*?".to_alphanumeric # => "3 the Magic Number"
end

【オブジェクト指向】SOLID原則について

ググったけどリスコフの置換原則などに関して分かりやすい良記事が見つからなかった。

TODO(後で読む)

https://www.amazon.co.jp/dp/4797347783
アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技

【デザインパターン】テンプレードメソッドパターン

下記がわかりやすい。