generating-sorbet について
Sorbetの型シグネチャを独立したRBIファイルに生成・更新するスキルです。Rubyのソースを変更せず、分析からシグネチャの確認、Sorbetによる検証まで段階的に進めます。
主な機能
- 01RBIシグネチャの生成・更新
- 02単一ファイルまたは全体の処理
- 03T.untyped、T.unsafe、T.castの回避
- 04複数ファイルの進捗管理
- 05Sorbetによる検証
活用シーン
- 01gemや生成コードへのシグネチャ追加
- 02動的に定義されたRubyメソッドの記述
- 03ソース変更後のRBIファイル更新
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ midudev/ autoskills --skill generating-sorbetインストール後、Claude Code で/generating-sorbetを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
reference/references/stripe-ruby/lib/stripe.rbreference/references/stripe-ruby/lib/stripe/api_requestor.rbapi_resource_test_helpers.rbapi_resource.rbapi_version.rbconnection_manager.rberror_object.rberrors.rbevent_types.rbinstrumentation.rblist_object.rbmultipart_encoder.rboauth.rbobject_types.rbparams.rbreference/references/stripe-ruby/lib/stripe/api_operations/create.rbdelete.rblist.rbnested_resource.rbrequest.rbsave.rbsearch.rbsingleton_save.rbreference/references/stripe-ruby/lib/stripe/events/unknown_event_notification.rbv1_billing_meter_error_report_triggered_event.rbv1_billing_meter_no_meter_found_event.rbv2_core_event_destination_ping_event.rbreference/references/stripe-ruby/lib/stripe/params/account_capability_list_params.rbaccount_capability_retrieve_params.rbaccount_capability_update_params.rb詳細
Sorbet RBI 生成スキル
別個の .rbi ファイルに Sorbet の型シグネチャを生成または更新します。ゼロからの完全な生成と、変更された個々のファイルに対する部分的な更新の両方に対応しています。RBI ファイルは、gem、生成コード、レガシーコードベースなど、元の Ruby ソースを変更できない、または変更すべきでない場合に使用します。
手順
Sorbet の RBI シグネチャを生成する際は、必ず以下の手順に従ってください。
このチェックリストをコピーし、進捗を記録してください。
Sorbet RBI Generation Progress:
- [ ] Step 1: Analyze the Ruby source
- [ ] Step 2: Generate RBI files
- [ ] Step 3: Eliminate `T.untyped` in signatures
- [ ] Step 4: Review and refine signatures
- [ ] Step 5: Validate signatures with Sorbet
ルール
- プロジェクトの Ruby コードを実行してはいけません。
T.untypedを使用してはいけません。適切な型を推論してください。T.unsafeを使用してはいけません。これは型チェックを完全に回避します。T.castを使用してはいけません。これは検証せずに型を強制します。- 不明な点がある場合は、ユーザーに詳細を確認してください。
- プロジェクトに Gemfile がある場合、すべてのコマンドの前に
bundle execを付けてください。 - メソッドのシグネチャには
sig { }ブロック構文を使用してください。 sigを使用する前に、クラスまたはモジュールにextend T::Sigを追加してください。- RBI ファイルにメソッド本体を追加してはいけません。シグネチャと空のメソッド定義のみを記述してください。
- RBI ファイルは
./rbiディレクトリに配置してください。 - 複数のファイルを処理する際は、ファイルの見落としを防ぐため、進捗管理ファイルを使用してください。
複数ファイルの処理
複数の Ruby ファイルを処理する場合は、すべてのファイルを確実に処理するため、進捗管理ファイルを作成してください。
-
進捗管理ファイル
.sorbet-rbi-generation-todo.tmpを作成します。[ ] app/models/user.rb [ ] app/models/post.rb [ ] app/services/auth_service.rb -
ファイルを1つずつ処理します。
- 次の未処理の
[ ]エントリを選びます - そのファイルのすべての手順(1~5)を完了します
- 処理済みとして
[x]にします - 進捗管理ファイルを保存します
- 次の未処理のエントリに進みます
- 次の未処理の
-
クリーンアップ:すべてのファイルを処理した後、進捗管理ファイルを削除します。
rm .sorbet-rbi-generation-todo.tmp
中断された場合、進捗管理ファイルを使って、作業を中断した箇所から再開できます。
1. Ruby ソースを分析する
必ずこの手順を実行してください。
Ruby ソースファイルを読み、内容を把握します。
- すべてのクラス、モジュール、メソッド、定数、インスタンス変数を特定します。
- 継承、モジュールのインクルード、メタプログラミングに基づく定義を確認します。
- 可視性の修飾子(
public、private、protected)を確認します。 - ジェネリッククラスの型パラメーターを確認します。
2. RBI ファイルを生成する
必ずこの手順を実行してください。
-
適切な RBI ディレクトリを決定します。
RBI ファイルは
./rbiディレクトリに配置します。Sorbet はこの場所にあるすべての.rbiファイルを読み込みます。RBI ファイルは、Sorbet が静的に理解できないコードを記述するために必要です。
- gem の定義
define_methodまたはmethod_missingで作成されるメソッドconst_get/const_setによる定数extendで追加される動的な祖先- DSL によって生成されるメソッド(Rails、ActiveRecord など)
-
型指定シジルを含む RBI ファイルを作成します。
# typed: strict -
各クラス/モジュールに
extend T::Sigを追加します。class MyClass extend T::Sig end -
シグネチャを含むメソッドスタブを追加します(メソッド本体は記述しません)。
例 — Ruby ソース:
class User
attr_reader :name, :age
def initialize(name, age)
@name = name
@age = age
end
def greet(greeting)
"#{greeting}, #{@name}!"
end
end
例 — RBI ファイル(rbi/user.rbi):
# typed: strict
class User
extend T::Sig
sig { returns(String) }
attr_reader :name
sig { returns(Integer) }
attr_reader :age
sig { params(name: String, age: Integer).void }
def initialize(name, age); end
sig { params(greeting: String).returns(String) }
def greet(greeting); end
end
- RBI ファイルは構造を反映しますが、シグネチャと空のメソッドスタブのみを含みます
- Sorbet の RBI 構文の完全なガイドについては、syntax.md を参照してください
3. シグネチャ内の T.untyped をなくす
必ずこの手順を実行してください。
- すべてのシグネチャを確認し、
T.untypedを適切な型に置き換えます。 - コードの文脈、メソッド呼び出し、テストを使って型を推論します。
- 型を特定できない場合に限り、最終手段として
T.untypedを使用します。
4. シグネチャを確認し、改善する
必ずこの手順を実行してください。
- シグネチャが正確で、一貫性があり、完全であることを確認します。
- 不要な
T.untyped型を削除します。 - すべてのメソッドと属性にシグネチャがあることを確認します。
- クラス階層とモジュールのインクルードがソースと一致していることを確認します。
- エラーを修正し、シグネチャが正しくなるまで確認を繰り返します。
5. Sorbet でシグネチャを検証する
この手順は必ず実行してください。
Sorbet の型チェッカーを実行して、シグネチャを検証します。
srb tc
または、bundle を使用します。
bundle exec srb tc
これにより、以下を確認できます。
- シグネチャの構文が正しいこと
- 型の整合性
- メソッドのパラメーターと戻り値の型が一致していること
- クラス/モジュールの構造がソースと一致していること
報告されたエラーを修正し、検証に合格するまで繰り返してください。
参考資料
- syntax.md - Sorbet RBI 構文ガイド
- references/ - stripe-ruby の実例に基づく RBI の例
- Sorbet RBI ドキュメント - RBI の公式ドキュメント