Closed4
RBS導入
小・中規模くらいになってきたリポジトリに RBS, Steep を導入したい。
今考えている方針。
- 型付けは強制しない
- 書きたい人、書きたいときに書けば良い
- CI でのチェックは行わない
- エディタ上でのアシストを主な目的にする
この辺りを参考にする。
rbs gem を追加
group :development do
gem 'rbs', require: false
end
bundle exec rbs collection init
bundle exec rbs collection install
.gem_rbs_collection
は gitignore へ入れておく
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 することとした。
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 に設定したとき、各ルールの通知レベルはこのように設定される様子。
いくつか無効になっているルールがあるのが気になる。詳しく見れていないが、使っていく中で有効化するなりしていけば良さそう。
このスクラップは5ヶ月前にクローズされました