mcpField
G
generating-sorbet

generating-sorbet

github.com/midudev開発7.0k58 回インストール1 週間前に更新
リポジトリ

generating-sorbet について

Sorbetの型シグネチャを独立したRBIファイルに生成・更新するスキルです。Rubyのソースを変更せず、分析からシグネチャの確認、Sorbetによる検証まで段階的に進めます。

主な機能

  1. 01RBIシグネチャの生成・更新
  2. 02単一ファイルまたは全体の処理
  3. 03T.untyped、T.unsafe、T.castの回避
  4. 04複数ファイルの進捗管理
  5. 05Sorbetによる検証

活用シーン

  1. 01gemや生成コードへのシグネチャ追加
  2. 02動的に定義されたRubyメソッドの記述
  3. 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.rb
reference/references/stripe-ruby/lib/stripe/
api_requestor.rb
api_resource_test_helpers.rb
api_resource.rb
api_version.rb
connection_manager.rb
error_object.rb
errors.rb
event_types.rb
instrumentation.rb
list_object.rb
multipart_encoder.rb
oauth.rb
object_types.rb
params.rb
reference/references/stripe-ruby/lib/stripe/api_operations/
create.rb
delete.rb
list.rb
nested_resource.rb
request.rb
save.rb
search.rb
singleton_save.rb
reference/references/stripe-ruby/lib/stripe/events/
unknown_event_notification.rb
v1_billing_meter_error_report_triggered_event.rb
v1_billing_meter_no_meter_found_event.rb
v2_core_event_destination_ping_event.rb
reference/references/stripe-ruby/lib/stripe/params/
account_capability_list_params.rb
account_capability_retrieve_params.rb
account_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 ファイルを処理する場合は、すべてのファイルを確実に処理するため、進捗管理ファイルを作成してください。

  1. 進捗管理ファイル .sorbet-rbi-generation-todo.tmp を作成します。

    [ ] app/models/user.rb
    [ ] app/models/post.rb
    [ ] app/services/auth_service.rb
    
  2. ファイルを1つずつ処理します。

    • 次の未処理の [ ] エントリを選びます
    • そのファイルのすべての手順(1~5)を完了します
    • 処理済みとして [x] にします
    • 進捗管理ファイルを保存します
    • 次の未処理のエントリに進みます
  3. クリーンアップ:すべてのファイルを処理した後、進捗管理ファイルを削除します。

    rm .sorbet-rbi-generation-todo.tmp
    

中断された場合、進捗管理ファイルを使って、作業を中断した箇所から再開できます。

1. Ruby ソースを分析する

必ずこの手順を実行してください。

Ruby ソースファイルを読み、内容を把握します。

  • すべてのクラス、モジュール、メソッド、定数、インスタンス変数を特定します。
  • 継承、モジュールのインクルード、メタプログラミングに基づく定義を確認します。
  • 可視性の修飾子(public、private、protected)を確認します。
  • ジェネリッククラスの型パラメーターを確認します。

2. RBI ファイルを生成する

必ずこの手順を実行してください。

  1. 適切な RBI ディレクトリを決定します。

    RBI ファイルは ./rbi ディレクトリに配置します。Sorbet はこの場所にあるすべての .rbi ファイルを読み込みます。

    RBI ファイルは、Sorbet が静的に理解できないコードを記述するために必要です。

    • gem の定義
    • define_method または method_missing で作成されるメソッド
    • const_get/const_set による定数
    • extend で追加される動的な祖先
    • DSL によって生成されるメソッド(Rails、ActiveRecord など)
  2. 型指定シジルを含む RBI ファイルを作成します。

    # typed: strict
    
  3. 各クラス/モジュールに extend T::Sig を追加します。

    class MyClass
      extend T::Sig
    end
    
  4. シグネチャを含むメソッドスタブを追加します(メソッド本体は記述しません)。

例 — 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

これにより、以下を確認できます。

  • シグネチャの構文が正しいこと
  • 型の整合性
  • メソッドのパラメーターと戻り値の型が一致していること
  • クラス/モジュールの構造がソースと一致していること

報告されたエラーを修正し、検証に合格するまで繰り返してください。

参考資料

コメント