1
/
5

Rails appでrbs prototype runtimeを使う

Photo by Zhouxing Lu on Unsplash

rbs prototype runtime はRubyの型定義ファイルであるRBSを自動生成する方法のひとつで、実際にプログラムを読み込んだ結果からリフレクションで定義を抽出します。

現在は

# Faraday moduleの型定義の雛形を出力する
bundle exec rbs prototype runtime -r faraday Faraday

といった形でライブラリの型定義の雛形を作るのに使われていますが、Rails appに対して使うには若干の工夫が必要そうです。具体的には

  1. Rails.application.initialize までの全ての処理を行わせる必要がある
  2. 加えて、現状のrbs commandはZeitwerkのautoloadに対応していないようなので、先にZeitwerk側のモジュールツリーをeager loadさせる必要がある

という点に気をつける必要があります。

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の今後の進化次第でベストプラクティスが変わりうる部分かと思いますが、現状での対応方法の参考程度にはなるかと思います。

Invitation from Wantedly, Inc.
If this story triggered your interest, have a chat with the team?
Wantedly, Inc.'s job postings
3 Likes
3 Likes

Weekly ranking

Show other rankings
Like Masaki Hara's Story
Let Masaki Hara's company know you're interested in their content