8
1

More than 1 year has passed since last update.

rbs subtractを使ってみる

Last updated at Posted at 2023-05-26

この記事は何

記事投稿キャンペーン「【RubyKaigi 2023連動イベント】みんなでRubyの知見を共有しよう」の参加記事です。
この記事では、「Let's write RBS!」で取り上げられていたrbs subtractについて紹介します。

スライドは↓です。

rbs subtractについて

rbs subtractについては以下の記事に詳しく書かれていますが、二つのrbsファイルのうち、定義が重複しているものを片方から削除することができるようなコマンドです。

以下のような二つのRBSファイルがあったときの例を考えます。

a.rbs
class Example
  def hello: (untyped name) -> ::String
  def good_morning: (untyped name) -> ::String
end
b.rbs
class Example
  def hello: (::String name) -> ::String
end

この二つのRBSファイルに以下のコマンドを実行をします。

$ rbs subtract a.rbs b.rbs

このコマンドの実行結果は以下のとおりです。

実行結果
class Example
  def good_morning: (untyped name) -> ::String
end

このように、b.rbsで定義されている型がa.rbsから削除されたRBSが結果として返ってきました。

rbs subtractを使うことでできること

このコマンドが必要になる場面はズバリ「自動生成された型を自分で修正したい場合」です。
このコマンドがない場合、rbs prototypeなどで生成された型をより厳密に記述するようにしたい場合、
RBSファイルは重複した定義があるとエラーになるため、直接自動生成されたファイルを修正する必要があります。

しかしこのような対応を行うと、ぱっと見で「どの型は修正済みで、どの型は修正できていないのか」を把握するのが難しくなります。

rbs subtractを使うと、以下のようなフローでインクリメンタルに型の改善を行えます。

  1. 自動生成されたRBSファイルから、修正したい型を把握する
  2. 自動生成された型を修正したものを別ファイルに記述する
  3. rbs subtractコマンドを用いて、修正した型を自動生成されたRBSファイルから削除する

このサイクルを回すことで、自動生成されたRBSファイルをTODOリストのように扱うことが可能になります。

参考文献

8
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
1