銀座Railsで「Railsアプリの設計」というタイトルで発表しました #ginzarails

12/13(金)にあった銀座Rails#16で登壇しました。

スライド

speakerdeck.com

話したかったこと

  • 1〜3年目のRailsエンジニアに参考になる話がしたい
    • 7年やって私が覚えたことは、たぶん何かしら参考になるだろう
    • 来週の仕事ですぐ参考になる話がしたかった
  • 懇親会で他のシニアエンジニアの考えを聞きたかった

補足: なぜクラス内クラスを使うのか?

スライドの最後の方が説明不足だったので、ブログで補足を書いておきます。

👮‍♀️RuboCop の取締りは厳しい

RuboCop の標準ルールを守ろうとすると、以下を行うことになる。

  1. 行数が長くなると、変数を抽出する
  2. 変数代入によって AbcSize が増えるので、プライベートメソッドを抽出する
  3. メソッド追加によって ClassLength が増える

対策方法は2つある

  • Module を抽出する
  • Class を抽出する

しかし、Module はプライベートメソッドを使えない。(スライドを参照)

Class を抽出する

  • 普通にクラスを作る
  • 内部クラス(クラス内クラス)を作る

内部クラスだと僅かにですが使用箇所を制限できる。

例えば、スライド例で挙げた User::Ranking を他のクラス(例えば Blog )で使うのは避けるはず。

これにより User::Ranking を消すときに調べる範囲を減らして、消しやすくしている。

結論

このような思考過程で内部クラス(クラス内クラス)を利用したクラス設計を好んで使っています。