No day younger than today

RubyとかRailsとか蒙古タンメンとか

gem_rbs_collectionでジェネレーターが推奨されなくなった

こんばんは、ふーがです。

gem_rbs_collection は gem の型定義が集約されているリポジトリですが、まだまだ型定義されている gem が少ないこともあり「型やっていくぞ!」という人々が一生懸命パッチを送っていたりします。
その際、rbs prototype などのコマンドで Ruby コードから型定義を自動生成することができるのですが、これが推奨されなくなりました。正確に言うとジェネレーターによる型生成を推奨しないことが主題ではなく、「必要な API の型定義に注力することを推奨するようになった」という感じです。

詳細は以下の Pull Request で確認できます。

github.com

要約すると、

ジェネレータは便利ですが、生成された型定義は使い物にならないことがあります。自動生成するよりも、主要な機能について RBS を手書きする方がより価値のある型定義になるのではないか。

というようなことが書かれています。

実際、僕も何度かジェネレーターで生成した型定義のパッチを送ったことがありますが、一気に自動で生成できて便利な反面、よく知らない(自分が使っていない)API の型定義の正当性がわからない、テストが書けない、などは感じていたところであります。

「ジェネレーターを使わないで、ということではない」とも書かれているのでまったくの非推奨というわけではなさそうです。
が、書かれている理由は確かにその通りだなあと思ったので、今後はジェネレーターを使わず自分が必要となる API について丁寧に型とテストを書く方がよさそうだなと個人的には思っています。


ところでなぜ僕がこの記事を書いたかというと、先月に開催された RubyKaigi 2022 で gem_rbs_collection へのコントリビュート方法について発表し、発表の中でジェネレーターを使ったコントリビュート方法を紹介していたからです。

speakerdeck.com

この方法でコントリビュートできなくなったわけではないのですが、状況が変わったということは記しておいた方がいいかと思い書いた次第です。