12/13(金)にあった銀座Rails#16で登壇しました。
スライド
話したかったこと
- 1〜3年目のRailsエンジニアに参考になる話がしたい
- 7年やって私が覚えたことは、たぶん何かしら参考になるだろう
- 来週の仕事ですぐ参考になる話がしたかった
- 懇親会で他のシニアエンジニアの考えを聞きたかった
補足: なぜクラス内クラスを使うのか?
スライドの最後の方が説明不足だったので、ブログで補足を書いておきます。
👮♀️RuboCop の取締りは厳しい
RuboCop の標準ルールを守ろうとすると、以下を行うことになる。
- 行数が長くなると、変数を抽出する
- 変数代入によって AbcSize が増えるので、プライベートメソッドを抽出する
- メソッド追加によって ClassLength が増える
- ?
対策方法は2つある
- Module を抽出する
- Class を抽出する
しかし、Module はプライベートメソッドを使えない。(スライドを参照)
Class を抽出する
- 普通にクラスを作る
- 内部クラス(クラス内クラス)を作る
内部クラスだと僅かにですが使用箇所を制限できる。
例えば、スライド例で挙げた User::Ranking
を他のクラス(例えば Blog
)で使うのは避けるはず。
これにより User::Ranking
を消すときに調べる範囲を減らして、消しやすくしている。
結論
このような思考過程で内部クラス(クラス内クラス)を利用したクラス設計を好んで使っています。