migrate-js-to-modern-typescript について
JavaScript のコードベースを厳格なモダン TypeScript へ段階的に移行するための、42 のルールを収録したリファレンススキルです。設定、型付け、実行時検証、慣用表現の変換、ビルドツールを扱い、移行中もコンパイルを維持する方針を示します。
主な機能
- 017 分野にわたる 42 のルール
- 02優先順位付きの段階的な移行指針
- 03厳格さと tsconfig の方針
- 04型付けと実行時検証の指針
- 05ビルド、ツール、CI の推奨事項
活用シーン
- 01JavaScript から TypeScript への段階的な移行計画
- 02混在コードベースで厳格なチェックを導入
- 03安全でない any、型アサーション、非 null アサーションの置換
- 04外部データや環境変数の型検証
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill migrate-js-to-modern-typescriptインストール後、Claude Code で/migrate-js-to-modern-typescriptを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
AGENTS.mdmetadata.jsonassets/templates/_template.mdreferences/_sections.mdidiom-default-export-to-named.mdidiom-enum-to-union-or-const.mdidiom-optional-chaining-over-guards.mdidiom-prototype-to-class.mdidiom-replace-arguments-object.mdidiom-require-to-import.mdidiom-type-only-imports.mdruntime-derive-types-from-schemas.mdruntime-type-environment-variables.mdruntime-type-guards-at-boundaries.mdruntime-type-json-parse.mdruntime-validate-external-data.mdsetup-allowjs-checkjs-bridge.mdsetup-jsdoc-before-rename.mdsetup-migrate-leaves-first.mdsetup-modern-module-resolution.mdsetup-noemitonerror-isolatedmodules.mdsetup-prefer-ts-expect-error.mdsetup-skiplibcheck-during-migration.mdstrict-enable-flags-incrementally.mdstrict-exact-optional-property-types.mdstrict-no-implicit-any.mdstrict-no-unchecked-indexed-access.mdstrict-prioritize-null-checks.mdstrict-use-unknown-in-catch.mdsurface-annotate-exported-signatures.md詳細
JavaScript から TypeScript への移行におけるベストプラクティス
大規模な一括書き換えを行わずに、JavaScript のコードベースを厳格でモダンな TypeScript に移行するためのガイドです。影響度に基づいて優先順位を付けた 7 カテゴリ・42 のルールを収録しており、ビルドを常に通る状態に保ちながら、ファイル単位で段階的に移行できます。
適用する場面
次のような場合に、これらのガイドラインを参照してください。
.jsのコードベースを.tsに変換するとき(プロジェクト全体、または一度に 1 モジュールずつ)- JSDoc やアノテーションを使って、既存の JavaScript に型を追加するとき
- JavaScript と TypeScript が混在するリポジトリで、
tsconfigとallowJsの方針を決めるとき - 大規模なコードベースで
strictモードや個別の strict フラグを有効にするとき - 手早い変換で残った
any、asキャスト、!アサーションを置き換えるとき - 外部データ(JSON、環境変数、API レスポンス)を検証して、記述した型が実行時にも正しいことを確かめるとき
- CommonJS を ESM に、プロトタイプをクラスに変換するなど、ほかの JavaScript のイディオムを TypeScript に変換するとき
- TypeScript の型チェックと公開に向けて、ビルド、ランナー、CI を更新するとき
移行の流れ
tsconfig & strategy → strictness ratchet → type the surfaces → kill any/casts
→ validate runtime boundaries → convert JS idioms → tooling/build/CI
前半の判断は後続の工程に連鎖します。tsconfig を誤って設定したり、上位から順に変換したりすると、モジュールに二度型を付け直すことになります。また、早い段階で any が大量に発生すると、後続のすべてに悪影響が及びます。このパイプラインの前半から始め、依存グラフの末端から内側へと進めてください。
優先度別のルールカテゴリ
| 優先度 | カテゴリ | 影響度 | プレフィックス |
|---|---|---|---|
| 1 | 移行のセットアップと tsconfig | CRITICAL | setup- |
| 2 | 厳格性の段階的な引き上げ | CRITICAL | strict- |
| 3 | 公開インターフェースの型付け | HIGH | surface- |
| 4 | any と安全でないキャストの置き換え | HIGH | unsafe- |
| 5 | 実行時データの検証 | MEDIUM-HIGH | runtime- |
| 6 | JavaScript から TypeScript へのイディオム変換 | MEDIUM | idiom- |
| 7 | ツールとビルドの移行 | LOW-MEDIUM | tooling- |
クイックリファレンス
1. 移行のセットアップと tsconfig(CRITICAL)
setup-allowjs-checkjs-bridge— 段階的な移行に向けて allowJs と checkJs を有効にするsetup-migrate-leaves-first— 依存先の末端から先に変換するsetup-jsdoc-before-rename— 名前を変更する前に、JSDoc と @ts-check で JavaScript に型を付けるsetup-prefer-ts-expect-error— エラー抑制には @ts-ignore より @ts-expect-error を優先するsetup-skiplibcheck-during-migration— skipLibCheck を設定してサードパーティの型によるノイズを抑えるsetup-modern-module-resolution— module と moduleResolution にモダンな組み合わせを設定するsetup-noemitonerror-isolatedmodules— 安全に出力するため isolatedModules と noEmitOnError を有効にする
2. 厳格性の段階的な引き上げ(CRITICAL)
strict-enable-flags-incrementally— strict フラグを一度にすべてではなく、1 つずつ有効にするstrict-prioritize-null-checks— 最も高いバグ検出効果が得られる strictNullChecks を優先するstrict-no-implicit-any— 型指定のない値をすべて検出するため noImplicitAny を有効にするstrict-no-unchecked-indexed-access— インデックスの安全性を高めるため noUncheckedIndexedAccess を有効にするstrict-use-unknown-in-catch— 捕捉したエラーには any ではなく unknown を指定するstrict-exact-optional-property-types— exactOptionalPropertyTypes で、プロパティがない場合と undefined の場合を区別する
3. 公開 API の型付け(HIGH)
surface-annotate-exported-signatures— エクスポートされた関数シグネチャに明示的な型注釈を付けますsurface-replace-jsdoc-with-types— JSDoc の型タグを実際の型注釈に置き換えますsurface-type-default-params— デフォルト引数と省略可能な引数に正確な型を付けますsurface-interface-for-object-args— 型の緩いオブジェクト引数を名前付きインターフェースに変換しますsurface-type-callbacks— コールバックと高階関数の引数に型を付けますsurface-type-class-fields— 代入に頼らず、クラスフィールドの型を宣言します
4. any と安全でない型アサーションの置き換え(HIGH)
unsafe-prefer-unknown-over-any— 信頼できない境界では any を unknown に置き換えますunsafe-eliminate-as-casts— as による型アサーションを型の絞り込みや検証に置き換えますunsafe-avoid-double-assertion— 無関係な型を強制する二重アサーションを避けますunsafe-type-dynamic-property-access— Record またはインデックスシグネチャで動的なプロパティアクセスに型を付けますunsafe-replace-function-type— Function 型を具体的な呼び出しシグネチャに置き換えますunsafe-narrow-instead-of-nonnull— 非 null アサーションを使わずに値の型を絞り込みます
5. 実行時のデータ検証(MEDIUM-HIGH)
runtime-validate-external-data— 境界で外部データを検証しますruntime-type-environment-variables— 環境変数を一度だけ解析して型を付けますruntime-derive-types-from-schemas— 実行時スキーマから静的な型を導出しますruntime-type-guards-at-boundaries— 型情報のないライブラリの戻り値に対する型ガードを記述しますruntime-type-json-parse— 検証を通じて JSON.parse の結果に型を付けます
6. JS から TS のイディオムへの変換(MEDIUM)
idiom-require-to-import— require と module.exports を ESM 構文に変換しますidiom-prototype-to-class— プロトタイプコンストラクターを class 構文に変換しますidiom-type-only-imports— 型のみをインポートする場合は import type を使用しますidiom-replace-arguments-object— arguments オブジェクトをレストパラメーターに置き換えますidiom-enum-to-union-or-const— 凍結オブジェクトの列挙型を const オブジェクトまたはユニオン型に変換しますidiom-default-export-to-named— default export より名前付きエクスポートを優先しますidiom-optional-chaining-over-guards— 手動の存在確認ガードをオプショナルチェーンに置き換えます
7. ツールとビルドの移行(低〜中)
tooling-declare-untyped-modules— 型定義のない依存関係にアンビエント宣言を提供しますtooling-install-types-packages— ライブラリの戻り値を型キャストする前に @types パッケージをインストールしますtooling-use-tsx-over-ts-node— ts-node のフラグの代わりに tsx を使って TypeScript を直接実行しますtooling-emit-declaration-files— 移行したライブラリの宣言ファイルを出力しますtooling-typecheck-in-ci— ビルドとは別に、CI に型チェックのステップを追加します
使用方法
詳細な説明とコード例については、個別のリファレンスファイルをお読みください。
- セクションの定義 — カテゴリー構成と影響レベル
- ルールのテンプレート — 新しいルールを追加するためのテンプレート
関連スキル
typescript-refactor— すでに TypeScript で書かれたコードのリファクタリングとモダナイズtypescript-advanced-patterns— 移行完了後に使う高度な型レベルのパターン
リファレンスファイル
| ファイル | 説明 |
|---|---|
| references/_sections.md | カテゴリーの定義と順序 |
| assets/templates/_template.md | 新しいルール用のテンプレート |
| metadata.json | バージョンとリファレンス情報 |
コメント
Markdown 対応