2025年9月6日に開催されたながらRuby会議01において、お手伝い先のSmartHRさんのスポンサーLTとして登壇させていただきました。岐阜は初めて訪れましたが自然が豊富でありつつも街もそれなりに大きくて良い場所だなと感じました。
天命反転してきました #nagara01 pic.twitter.com/eM1sZuHl0Y
— willnet (@netwillnet) September 7, 2025
今回は一人でしたが今度は家族を連れて旅行したいと思います。
発表について
発表資料はこちら。
資料を見ていただくとわかるように、このLTは元々ながらRuby会議01に出したプロポーザルの内容を5分に短縮したものになっています。最近はRailsの細かい話をする場所が少なく*1この話を供養するのに困っていたのでちょうど良い機会をもらえて良かったです。
お作法に則っていないgemがあるとRailsの設定を安心して変更できない
僕は仕事としてお手伝い先のconfig.load_defaultsのバージョンを上げていく作業をすることがあります。Railsの設定をアップグレードしていく技術に書いたようなやりかたで一つずつ設定を有効にするのですが、お作法に則っていないgemを使っているのが原因でなぜか適用したつもりの設定が有効になっていない問題に遭遇しました。原因はスライドにあるとおりです。
この問題のワークアラウンドとしてRails関連の設定はすべてconfig/application.rbに書くというのがあります。とりあえずはそれで解決できるのですが、将来的に僕以外のエンジニアがRails関連の設定を変更していくことになったらどうなるでしょう?rails app:updateを実行するとconfig/initializers配下に新規の設定用ファイルができてしまいます。高確率で同じ問題を踏みそうですね。
また今回の発表ではRailsの設定が有効にならないという話だけをしましたが、Rails初期化時に適用されるコードの順番が変わることによって設定以外でもなんらかの不具合につながるケースがあるんじゃないかなと思っています。
a-nti_manner_kick_courseの誕生
というわけでワークアラウンドじゃなくて恒久的な対策がしたい。そこで作ったのがa-nti_manner_kick_courseです。これを使うことでGemfile中にお作法に則っていないgemを検出することができます。
名前がキラキラしているのには一応理由があります。このgemはその特性上他のgemより先にrequireすることが求められます。rubocopのBundler/OrderedGemscopを有効にするとgemがアルファベット順に並びますが、その時に自然に一番上に来るようにしたい。aという名前のgemはすでにあり、次にくるのはa-…というところから名前を考え出しました。あとはお行儀が悪いgemをなんとかしたいところからの連想ゲームです。
みんなでお作法に則っていないgemを減らしていこう
a-nti_manner_kick_courseを利用して、お手伝い先や自分のRailsアプリケーションに関するgemをざっと調べ対象となるものには可能な限りPRを出しました。が、たぶんお作法に則っていないgemはまだたくさんあるはず。もしお手持ちのRailsアプリケーションにそのようなgemがあるのを見つけたらPRを出すなど、なんらかの形でお作法に則るようにしてほしいです。
僕は「新しくgemをいれただけで関係ないRailsの設定が変わるかもしれない」というのは結構な罠だと感じています。そもそも個人的にはこのお作法自体あまり筋が良いとは思えないのですが、代替案がないのでいまのところすべてのgemをお作法に則った状態にするしかありません。それにはみんなで力を合わせて取り組む必要があります。gemに対してPRを出すぞ、というときになにか技術的な疑問などあったらお気軽にご相談ください。
関連記事
Rails: new_framework_defaultsの設定が反映されるタイミングを無邪気に信じてはいけない(翻訳)|TechRacho by BPS株式会社
*1:今月からRailsTokyoができたのでこの問題は解消されたように思えます