mcpField
M
migrate-to-shoehorn

migrate-to-shoehorn

github.com/mattpocockテスト・品質305.7k489.1k 回インストール1 日前に更新
リポジトリ

migrate-to-shoehorn について

migrate-to-shoehorn は、テストコード内の as 型アサーションを @total-typescript/shoehorn の型安全な関数へ移行するエージェントスキルです。型チェックを保ったままテストで部分データや意図的な誤データを渡したい開発者に向いています。

主な機能

  1. 01as Type を fromPartial() に置き換え
  2. 02as unknown as Type を fromAny() に置き換え
  3. 03完全なオブジェクトを要求する fromExact() の提供
  4. 04検索コマンドを含む段階的な移行ワークフロー

活用シーン

  1. 01大きなオブジェクトに as アサーションを使うテストファイルの移行
  2. 02エラー処理のテストで意図的に誤ったデータを渡す
  3. 03移行後に型チェックを実行して結果を確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mattpocock/skills --skill migrate-to-shoehorn

インストール後、Claude Code で/migrate-to-shoehornを入力して読み込まれたか確認します。

同梱ファイルagents/openai.yaml

詳細

Shoehorn への移行

なぜ shoehorn なのですか?

shoehorn を使うと、TypeScript の型チェックを通しながら、テストで部分的なデータを渡せます。as アサーションを型安全な代替手段に置き換えます。

テストコードでのみ使用してください。 本番コードで shoehorn を使用しないでください。

テストで as を使用する場合の問題点:

  • 使用しないように指導されている
  • 対象の型を手動で指定する必要がある
  • 意図的に誤ったデータを渡すには、二重の as(as unknown as Type)が必要

インストール

npm i @total-typescript/shoehorn

移行パターン

必要なプロパティが少ない大きなオブジェクト

移行前:

type Request = {
  body: { id: string };
  headers: Record<string, string>;
  cookies: Record<string, string>;
  // ...20 more properties
};

it("gets user by id", () => {
  // Only care about body.id but must fake entire Request
  getUser({
    body: { id: "123" },
    headers: {},
    cookies: {},
    // ...fake all 20 properties
  });
});

移行後:

import { fromPartial } from "@total-typescript/shoehorn";

it("gets user by id", () => {
  getUser(
    fromPartial({
      body: { id: "123" },
    }),
  );
});
as Type → fromPartial()

移行前:

getUser({ body: { id: "123" } } as Request);

移行後:

import { fromPartial } from "@total-typescript/shoehorn";

getUser(fromPartial({ body: { id: "123" } }));
as unknown as Type → fromAny()

移行前:

getUser({ body: { id: 123 } } as unknown as Request); // wrong type on purpose

移行後:

import { fromAny } from "@total-typescript/shoehorn";

getUser(fromAny({ body: { id: 123 } }));

それぞれの使いどころ

関数用途
fromPartial()型チェックを通る部分的なデータを渡す
fromAny()意図的に誤ったデータを渡す(オートコンプリートを維持)
fromExact()オブジェクト全体を必須にする(後で fromPartial に置き換える)

ワークフロー

  1. 要件を確認する - ユーザーに次の点を尋ねます:

    • 問題の原因となっている as アサーションを含むテストファイルはどれですか?
    • 一部のプロパティだけが重要な、大きなオブジェクトを扱っていますか?
    • エラーのテスト用に、意図的に誤ったデータを渡す必要がありますか?
  2. インストールして移行する:

    • インストールする:npm i @total-typescript/shoehorn
    • as アサーションを含むテストファイルを探す:grep -r " as [A-Z]" --include="*.test.ts" --include="*.spec.ts"
    • as Type を fromPartial() に置き換える
    • as unknown as Type を fromAny() に置き換える
    • @total-typescript/shoehorn からインポートを追加する
    • 型チェックを実行して確認する

コメント