Wantedly, Inc.では一緒に働く仲間を募集しています
- バックエンド / リーダー候補
- PdM
- Webエンジニア(シニア)
- 他18件の職種
- 開発
- ビジネス
Photo by Zhouxing Lu on Unsplash
rbs prototype runtime はRubyの型定義ファイルであるRBSを自動生成する方法のひとつで、実際にプログラムを読み込んだ結果からリフレクションで定義を抽出します。
現在は
# Faraday moduleの型定義の雛形を出力する
bundle exec rbs prototype runtime -r faraday Faraday
といった形でライブラリの型定義の雛形を作るのに使われていますが、Rails appに対して使うには若干の工夫が必要そうです。具体的には
という点に気をつける必要があります。
1だけであれば
# User moduleの型定義の雛形を出力する (現時点では動作しない)
bundle exec rbs prototype runtime -R config/environment User
といった具合でできるはずですが、実際にはうまくいかないため、eager loadをするためのファイルを以下のように書きます。
# config/eager_load.rb
require_relative "environment"
Zeitwerk::Loader.eager_load_all
config/environment.rb のかわりにここで作成した config/eager_load.rb を呼ぶようにして、以下のようにコマンドを実行するとRBSが生成できます。
# User moduleの型定義の雛形を出力する
bundle exec rbs prototype runtime -R config/eager_load User
このあたりはruby/rbsの今後の進化次第でベストプラクティスが変わりうる部分かと思いますが、現状での対応方法の参考程度にはなるかと思います。