generating-sorbet-inline について
Ruby ソースファイルに Sorbet の `sig {}` 型シグネチャをインラインで追加・更新するスキルです。全体生成とファイル単位の更新に対応し、プロジェクトの Ruby コードを実行せず Sorbet で検証します。
主な機能
- 01Sorbet シグネチャのインライン生成
- 02ファイル全体と部分的な更新
- 03`T.untyped`、`T.unsafe`、`T.cast` の回避
- 04既存の typed シジルレベルの維持
- 05複数ファイルの進捗管理
- 06Sorbet による型チェック検証
活用シーン
- 01Ruby メソッドへのシグネチャ追加
- 02変更ファイル内のシグネチャ更新
- 03複数ファイルのシグネチャ変更の順次処理
- 04Sorbet を使ったシグネチャ検査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ midudev/ autoskills --skill generating-sorbet-inlineインストール後、Claude Code で/generating-sorbet-inlineを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
reference/sorbet_examples/packwerk/packwerk.rbreference/sorbet_examples/packwerk/packwerk/application_validator.rbassociation_inspector.rbcache.rbchecker.rbcli.rbcommands.rbconfiguration.rbconst_node_inspector.rbconstant_context.rbconstant_discovery.rbconstant_name_inspector.rbdisable_sorbet.rbextension_loader.rbfile_processor.rbfiles_for_processing.rbgraph.rbreference/sorbet_examples/packwerk/packwerk/commands/base_command.rbcheck_command.rbhelp_command.rbinit_command.rblazy_loaded_entry.rbupdate_todo_command.rbuses_parse_run.rbvalidate_command.rbversion_command.rbreference/sorbet_examples/packwerk/packwerk/formatters/default_offenses_formatter.rbprogress_formatter.rbreference/sorbet_examples/packwerk/packwerk/generators/configuration_file.rbroot_package.rb詳細
Sorbet インライン生成スキル
Ruby のソースファイルに sig {} ブロックを直接記述して、Sorbet の型シグネチャを生成または更新します。新規ファイルへの完全な生成と、変更された個別ファイルへの部分的な更新の両方に対応しています。Sorbet のシグネチャは有効な Ruby コードであり、静的型チェックと実行時の型チェックを可能にします。
手順
Sorbet のインラインシグネチャを生成する際は、必ず次の手順に従ってください。
このチェックリストをコピーして、進捗を管理してください。
Sorbet Inline Generation Progress:
- [ ] Step 1: Analyze the Ruby source
- [ ] Step 2: Add Sorbet signatures
- [ ] 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ファイルを使用または生成してはいけません。このスキルはインラインシグネチャ専用です。- 既存の
# typed:宣言レベルがある場合は維持してください。ユーザーの明示的な同意なしに、厳格さを上げたり変更したりしてはいけません。 - 複数ファイルを処理する場合、ファイル漏れを防ぐために追跡ファイルを必ず使用してください。
複数ファイルの処理
複数の Ruby ファイルを処理する場合は、対象ファイルをすべて処理するため、追跡ファイルを作成してください。
-
追跡ファイル
.sorbet-inline-generation-todo.tmpを作成します。[ ] app/models/user.rb [ ] app/models/post.rb [ ] app/services/auth_service.rb -
ファイルを1つずつ処理します。
- 次の未処理
[ ]エントリを選びます - そのファイルについて手順(1~5)をすべて完了します
- 処理済みとして
[x]にします - 追跡ファイルを保存します
- 次の未処理エントリに進みます
- 次の未処理
-
クリーンアップ:すべてのファイルを処理したら、追跡ファイルを削除します。
rm .sorbet-inline-generation-todo.tmp
処理が中断された場合、追跡ファイルを使って中断した箇所から再開できます。
1. Ruby ソースを分析する
この手順は必ず実行してください。
Ruby のソースファイルを読み、内容を把握します。
- すべてのクラス、モジュール、メソッド、定数、インスタンス変数を特定します。
- 継承、モジュールのインクルード、メタプログラミングに基づく定義を確認します。
- 可視性修飾子(
public、private、protected)を確認します。 - ファイルの先頭にある既存の
# typed:宣言レベルを確認します。 - ジェネリッククラスの型パラメーターを確認します。
2. Sorbet シグネチャを追加する
この手順は必ず実行してください。
-
まず、ファイルの先頭に
# typed:宣言があるか確認します。- 宣言がある場合:既存のレベルを維持します。ユーザーの同意なしに変更してはいけません。
- 宣言がない場合:段階的な型付けに適した既定値として
# typed: trueを追加します。
宣言レベル(厳格さの低い順):
ignore<false<true<strict<strong -
クラス/モジュールに
extend T::Sigを追加します。class MyClass extend T::Sig end -
次に、
sig {}ブロックを使って型シグネチャを追加します。
例 - 変更前:
class User
attr_reader :name, :age
def initialize(name, age)
@name = name
@age = age
end
def greet(greeting)
"#{greeting}, #{@name}!"
end
end
例 - 変更後:
# typed: true
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)
@name = name
@age = age
end
sig { params(greeting: String).returns(String) }
def greet(greeting)
"#{greeting}, #{@name}!"
end
end
- メソッドと属性のシグネチャのみに注力してください
- Sorbet 構文の詳細については、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 シグネチャ構文ガイド
- sorbet_examples/ - 実運用の gem で使われている Sorbet の実例
- Sorbet documentation - Sorbet の公式ドキュメント