2023年1月27日、「ActiveDecoratorを読む」の勉強会に参加しました。
rubygems-code-reading.connpass.com
結果、最高だったので感想を書いていきます。
Gem製作者本人からお話が聞けた
今回の題材はタイトル通りactive_decoratorだったわけですが、なんと製作者の松田明さんから直接お話を聞くことができました。
そもそもなぜこのgemを作ったか(ActionViewHelperの手触り感がちょっと、、、の話)という製作者がスピーカーだからこその話から聞けたのは貴重でした。
Rubyパワー全開のgem
勉強会では、主にinitial implementationのコミットの内容を見ながらソースコードの意味(真意)を解説いただきました。
例えば、
- RailsがSQLを発行するタイミングとdecoratorを仕込むタイミングの話
- Controllerで定義したインスタンス変数がViewで使える肝となっているview_assignsを利用したdecotateの話
など、active_decoratorがいかにRailsの仕組みの根本に根付いたgemかということも知ることができました。
「便利」と「あるべきかたち」の話
そのほか、個人的にとても興味深かったのは、初期のバージョンでは、
DHHの思想に基づき、関連づけで何階層かになっているインスタンスでも、controllerからviewに渡る時点でdecorateするのは最上位のもののみにしていたという話でした。
View側では1つのパーシャルに複数のモデルの情報を描画するべきではない(例: book.titleとbook.author.nameは1つのパーシャル内で書かれるべきではない)という思想で、パーシャルのlocalsで渡すタイミングでそのインスタンスにもdecorateをするという仕組みになっていたことは「どうあるべきか」が徹底されていて感動しました。
まとめて関連インスタンスもdecorateするという仕様にするとき、本当はあまりやるたくなかった、というお話をされていたのもめちゃくちゃかっこいいなと思いました。
active_decoratorが好きになった
gemを作られた方から直接コードの真意、背景をお聞きしつつ、Rubyパワー全開のgemであることを知れて、active_decoratorがすごく好きになりました。
業務で使っていますが、何だか今後ちょっと使うだけでもこの勉強会の話を思い出して楽しい気持ちになれそうです。
OSSの活動に関する他の知見も得られた
勉強会のお話から、いろいろとOSSに関する知見を得ることができました。
- (仮に便利だから、ということで機能追加のPRが届いたとしても)自分がメンテできるかどうかを考えてからマージする必要があること
- 読むと面白いgem(逆のgem)の話
この辺りも聞けて満足でした。
decoratorに関する質問できたのでとにかく最高
さらに、勉強会の最後に、思い切って(gemのソースコードに関連する話ではなかったんですが、)decorater関係で考えていたことを質問もできて、とにかくお腹いっぱい最高でした。