better-result-migrate-v2 について
`better-result` のエラー定義と呼び出し箇所を、v1 の `TaggedError` API から v2 のファクトリ API へ移行するスキルです。旧 API の検索、コンストラクターやヘルパーの書き換え、移行後の確認を案内します。
主な機能
- 01旧 API の使用箇所を調査
- 02エラークラスとコンストラクターの書き換え
- 03マッチング・型判定ヘルパーの置換
- 04検索による移行漏れの確認
活用シーン
- 01コードベースを `better-result` v1 から v2 へ更新
- 02旧 `TaggedError` サブクラスの特定と更新
- 03編集後に旧 API 呼び出しが残っていないか確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dmmulroy/ better-result --skill better-result-migrate-v2インストール後、Claude Code で/better-result-migrate-v2を入力して読み込まれたか確認します。
同梱ファイルreferences/migration-patterns.md
詳細
better-result v2 への移行
better-result のエラー定義を、v1 の TaggedError API から v2 のファクトリーベースの API にアップグレードします。
使用するタイミング
次のような場合に、このスキルを使用します。
better-resultを v1 から v2 にアップグレードしているTaggedErrorを直接extendするクラスがあるTaggedError.match、TaggedError.matchPartial、またはTaggedError.isTaggedErrorをまだ使用している- コンストラクター呼び出しを新しいオブジェクト形式に書き換える必要がある
読む順序
| タスク | 読むファイル |
|---|---|
| 移行を計画して実行する | このファイル |
| 具体的な変換前後の例を確認する | references/migration-patterns.md |
| 現在のライブラリーの動作を確認する | 存在する場合は opensrc/ |
API の差分
| v1 | v2 |
|---|---|
class FooError extends TaggedError | class FooError extends TaggedError("FooError")<Props>() {} |
readonly _tag = "FooError" as const | ファクトリーによって _tag を生成 |
new FooError("123") | new FooError({ id: "123", message: "..." }) |
TaggedError.match(...) | matchError(...) |
TaggedError.matchPartial(...) | matchErrorPartial(...) |
TaggedError.isTaggedError(...) | isTaggedError(...) または TaggedError.is(...) |
移行ワークフロー
- コードベース全体で
extends TaggedErrorを検索します。 - 各クラスについて、次の項目を抽出します。
_tagのリテラル- コンストラクターパラメーターとランタイムプロパティ
- 計算されるメッセージや検証ロジック
- クラスを
TaggedError("Tag")<Props>()に書き換えます。 - コンストラクターロジックがある場合は、オブジェクトを受け取り
super({...})を呼び出すカスタムコンストラクターを維持します。 - 呼び出し箇所を位置引数からオブジェクト引数に更新します。
- 静的ヘルパーの使用箇所を、新しい独立したヘルパーに置き換えます。
- インポートを更新します。
- テストを実行し、古い API の残りがないか再度検索します。
変換ルール
- シンプルなクラス:
_tagを削除し、基底クラスを置き換えて、フィールドをジェネリックの props オブジェクトに移します。 - 計算されるメッセージ:カスタムコンストラクターを維持し、
super(...)の前にmessageを導出します。 - 検証ロジック:カスタムコンストラクター内の検証を維持します。
- 追加のランタイムフィールド:
super(...)に渡す props オブジェクトに含めます。 - 使用箇所:
new FooError(a, b)をnew FooError({ a, b, message })、または同等の導出メッセージを使うコンストラクターに移行します。
対象のクラスが単純でない場合は、編集する前にreferences/migration-patterns.mdを読んでください。
検索チェックリスト
移行の前後に、次のすべてを検索します。
extends TaggedErrorreadonly _tag =TaggedError.matchTaggedError.matchPartialTaggedError.isTaggedError- 移行対象のエラークラスの
new呼び出し箇所
完了条件
次のすべてを満たすと、移行は完了です。
- 古い v1 の
TaggedError基底クラスを直接拡張するクラスがない - 移行したクラスが
TaggedError("...")<...>()を使用している - 呼び出し箇所が新しいコンストラクター形式を使用している
- 静的ヘルパーの呼び出しが
matchError、matchErrorPartial、またはisTaggedErrorに置き換えられている - インポートが新しいヘルパー関数を反映している
- アップグレードしたパッケージバージョンでテストが成功する
よくある落とし穴
- 書き換え時にカスタムの検証ロジックを削除してしまう
- props の型に
messageを含め忘れる - クラス宣言だけを更新し、コンストラクターの呼び出し箇所を更新し忘れる
TaggedError.matchは置き換えたものの、matchPartialやisTaggedErrorを見落とす- 型を移行しても、タイムスタンプやコードなどの追加のランタイムフィールドを維持できていない
このリファレンスについて
| ファイル | 目的 |
|---|---|
references/migration-patterns.md | v1 → v2 の詳細な変更前/変更後の例と、インポートヘルパーの変更 |
opensrc/ が存在する場合は、それを使ってインストール済みパッケージが公開する正確な v2 API を確認してください。
コメント
Markdown 対応