typescript-refactor について
typescript-refactor は、TypeScriptのモダナイズとリファクタリングに関する43の優先順位付きルール集です。開発者やコード生成・レビューのワークフロー向けに、型設計、安全性、コンパイラー性能、よくある落とし穴を扱います。
主な機能
- 018カテゴリにわたる43のルール
- 02影響度に基づく優先順位
- 03型設計と型の絞り込みパターン
- 04モダンなTypeScriptとジェネリクス
- 05コンパイラー、エラー、実行時の実践
活用シーン
- 01型安全性を高めるTypeScriptのリファクタリング
- 02TypeScriptの落とし穴をコードレビュー
- 03自動コード生成の指針
- 04大規模コードベースのコンパイラー性能改善
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ shipshitdev/ skills --skill typescript-refactorインストール後、Claude Code で/typescript-refactorを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
plugin.jsonassets/templates/_template.mdreferences/_sections.mdarch-avoid-partial-abuse.mdarch-branded-types.mdarch-const-assertion.mdarch-discriminated-unions.mdarch-interfaces-over-intersections.mdarch-readonly-by-default.mdarch-satisfies-over-annotation.mdcompile-avoid-deep-recursion.mdcompile-base-types-over-unions.mdcompile-explicit-return-types.mdcompile-project-references.mderror-discriminated-error-unions.mderror-exhaustive-error-handling.mderror-never-for-unreachable.mderror-result-type.mderror-typed-catch.mdgeneric-avoid-distributive-surprises.mdgeneric-constrain-dont-overconstrain.mdgeneric-infer-over-annotate.mdgeneric-mapped-type-utilities.mdgeneric-return-type-inference.mdmodern-accessor-keyword.mdmodern-const-type-parameters.mdmodern-noinfer-utility.mdmodern-template-literal-types.mdmodern-using-keyword.mdmodern-verbatim-module-syntax.md詳細
TypeScript リファクタリングのベストプラクティス
TypeScript のリファクタリングとモダナイゼーションに関する 8 カテゴリ、43 のルールを、影響度の高い順にまとめています。自動リファクタリング、コードレビュー、コード生成の指針としてご活用ください。
適用する場面
- 型安全性と保守性を高めるために TypeScript コードをリファクタリングする場合
- 型アーキテクチャ(判別可能なユニオン、ブランド型、ジェネリクス)を設計する場合
- 型を絞り込んで安全でない
asキャストをなくす場合 - 最新の TypeScript 4.x-5.x の機能(
satisfies、using、const 型パラメーター)を導入する場合 - 大規模なコードベースでコンパイラーのパフォーマンスを最適化する場合
- 型安全なエラー処理パターンを実装する場合
- TypeScript 特有の挙動や落とし穴を考慮してコードをレビューする場合
優先度別のルールカテゴリ
| 優先度 | カテゴリ | 影響度 | プレフィックス |
|---|---|---|---|
| 1 | 型アーキテクチャ | CRITICAL | arch- |
| 2 | 型の絞り込みとガード | CRITICAL | narrow- |
| 3 | 最新の TypeScript | HIGH | modern- |
| 4 | ジェネリックパターン | HIGH | generic- |
| 5 | コンパイラーのパフォーマンス | MEDIUM-HIGH | compile- |
| 6 | エラー安全性 | MEDIUM | error- |
| 7 | 実行時パターン | MEDIUM | perf- |
| 8 | 特有の挙動と落とし穴 | LOW-MEDIUM | quirk- |
クイックリファレンス
1. 型アーキテクチャ(CRITICAL)
arch-discriminated-unions— 網羅的なパターンマッチングには、文字列列挙型ではなく判別可能なユニオンを使用しますarch-branded-types— 値の取り違えを防ぐため、ドメイン識別子にはブランド型を使用しますarch-satisfies-over-annotation— リテラル型を保持するため、設定オブジェクトにはsatisfiesを使用しますarch-interfaces-over-intersections— エラーメッセージを改善するため、型を交差させるのではなくインターフェースを拡張しますarch-const-assertion— 不変のリテラル型を推論するためにas constを使用しますarch-readonly-by-default— 関数の引数と戻り値には、デフォルトで読み取り専用の型を使用しますarch-avoid-partial-abuse— ビルダーパターンでPartial<T>を乱用しないようにします
2. 型の絞り込みとガード(CRITICAL)
narrow-custom-type-guards— 型アサーションの代わりにカスタム型ガードを記述しますnarrow-assertion-functions— 前提条件のチェックにはアサーション関数を使用しますnarrow-exhaustive-switch—neverを使って switch 文の網羅性を保証しますnarrow-in-operator— インターフェースのユニオン型を絞り込むにはin演算子を使用しますnarrow-eliminate-as-casts— 適切な絞り込みの連鎖によってasキャストをなくしますnarrow-typeof-chains— プロパティにアクセスする前にtypeofで型を絞り込みます
3. 最新の TypeScript(HIGH)
modern-using-keyword— リソースのクリーンアップにはusingキーワードを使用しますmodern-const-type-parameters— リテラル型を推論するために const 型パラメーターを使用しますmodern-template-literal-types— 文字列パターンにはテンプレートリテラル型を使用しますmodern-noinfer-utility— 型パラメーターの推論を制御するにはNoInferを使用しますmodern-accessor-keyword— 自動生成されるゲッターとセッターにはaccessorを使用しますmodern-verbatim-module-syntax— インポートする型を明示するにはverbatimModuleSyntaxを有効にします
4. ジェネリックの一般的なパターン(HIGH)
generic-infer-over-annotate— 明示的な型注釈ではなく、TypeScript の型推論を活用しますgeneric-constrain-dont-overconstrain— ジェネリック型には必要最小限の制約を指定しますgeneric-avoid-distributive-surprises— 分配条件型を制御しますgeneric-mapped-type-utilities— 繰り返し行う変換用にカスタムのマップ型を作成しますgeneric-return-type-inference— ジェネリック関数の戻り値の型推論を維持します
5. コンパイラーのパフォーマンス(MEDIUM-HIGH)
compile-explicit-return-types— エクスポートする関数に明示的な戻り値の型を追加しますcompile-avoid-deep-recursion— 深く再帰する型定義を避けますcompile-project-references— モノレポのビルドにはプロジェクト参照を使用しますcompile-base-types-over-unions— 大きなユニオン型ではなく、基底型を使用します
6. エラー安全性(MEDIUM)
error-result-type— スローされる例外ではなく、Result 型を使用しますerror-exhaustive-error-handling— 型付きエラーのバリアントには網羅的なチェックを使用しますerror-typed-catch— catch 節の変数をunknownとして型付けしますerror-never-for-unreachable— 到達不能なコードパスを示すためにneverを使用しますerror-discriminated-error-unions— ドメインエラーを判別可能なユニオンとしてモデル化します
7. ランタイムのパターン(MEDIUM)
perf-union-literals-over-enums— enum ではなく、ユニオンリテラルを使用しますperf-avoid-delete-operator— オブジェクトに対するdelete演算子の使用を避けますperf-object-freeze-const— 真の不変性を実現するため、as constとObject.freezeを併用しますperf-object-keys-narrowing—Object.keysによる型の拡大を避けますperf-map-set-over-object— 動的なコレクションにはプレーンオブジェクトではなく、MapとSetを使用します
8. 特有の挙動と落とし穴(LOW-MEDIUM)
quirk-excess-property-checks— オブジェクトリテラルに対する余分なプロパティチェックについて理解しますquirk-empty-object-type—{}型は nullish でない値を意味するため、使用を避けますquirk-type-widening-let—let宣言による型の拡大を防ぎますquirk-variance-annotations— ジェネリックインターフェースには変性注釈を使用しますquirk-structural-typing-escapes— 構造的部分型付けの抜け道に対するガードを設けます
使用方法
詳しい説明とコード例については、個々のリファレンスファイルを参照してください。
- セクションの定義 — カテゴリー構成と影響度
- ルールのテンプレート — 新しいルールを追加するためのテンプレート
リファレンスファイル
| ファイル | 説明 |
|---|---|
| references/_sections.md | カテゴリーの定義と順序 |
| assets/templates/_template.md | 新しいルール用のテンプレート |
コメント
Markdown 対応