Closed4

RBS導入

daisaru11daisaru11

rbs gem を追加

group :development do
  gem 'rbs', require: false
end
bundle exec rbs collection init
bundle exec rbs collection install

.gem_rbs_collection は gitignore へ入れておく

daisaru11daisaru11

rbs_rails の追加

group :development do
  gem 'rbs_rails', require: false
end

初期化(rakeファイルが作られる)

bin/rails g rbs_rails:install

型定義の生成をする。

bin/rails rbs_rails:all

ここで、下記のようなエラーが出た。

NoMethodError: undefined method `class_name' for nil (NoMethodError)

          options[:source_type] || source_reflection.class_name
                                                    ^^^^^^^^^^^
Did you mean?  class_eval

一部アソシエーションの定義をミスっているところがあったっぽく、それに起因するエラーだった。
怪しそうなアソシエーション定義をコメントアウト/インしながら探って修正した。

成功すると sig/ 以下にファイルが生成される。
sig/ は gitignore するかどうかは流派がありそうだが、いったん ignore することとした。

daisaru11daisaru11

steep の追加

group :development do
  gem 'steep', require: false
end

Steepfile を作成

Steepfile
target :app do
  check 'app'
  signature 'sig'
end

binstub を作っておく

bundle binstubs steep

一応一回 type check してみる。たくさんエラーが出る。

bin/steep check

VS Code extension をインストール。

VS Code が真っ赤になるので、検査レベルを lenient にする。

Steepfile
  configure_code_diagnostics(D::Ruby.lenient)

lenient に設定したとき、各ルールの通知レベルはこのように設定される様子。
https://github.com/soutaro/steep/blob/master/lib/steep/diagnostic/ruby.rb#L1184

いくつか無効になっているルールがあるのが気になる。詳しく見れていないが、使っていく中で有効化するなりしていけば良さそう。

このスクラップは5ヶ月前にクローズされました