mtp-hot-reload について
Microsoft Testing Platform のコンソールホストを設定し、対応するコード編集後にテストを再実行するスキルです。MTP プロジェクトでの反復的なテスト修正向けで、IDE の Test Explorer のホットリロードには対応しません。
主な機能
- 01MTP 使用状況の確認
- 02HotReload パッケージ設定の案内
- 03環境変数によるホットリロード有効化
- 04常駐ホストでのテスト実行とフィルター
- 05非対応の編集への対処方法
活用シーン
- 01コード修正中のテスト再実行
- 02MTP テストプロジェクトのホットリロード設定
- 03指定テストに絞った反復実行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dotnet/ skills --skill mtp-hot-reloadインストール後、Claude Code で/mtp-hot-reloadを入力して読み込まれたか確認します。
詳細
反復的なテスト修正のための MTP ホットリロード
コードの編集を反映し、テストを自動で再実行する、長時間稼働する Microsoft Testing Platform ホストをセットアップして使用します。
使用する場合
- ユーザーがテストのホットリロードを明示的に求めている場合
- ホストを起動したままにし、編集を繰り返すたびに自動で再実行したい場合
- プロジェクトで MTP ホットリロードをセットアップする必要がある場合
使用しない場合
- ユーザーがテストを一から新規作成する必要がある場合(一般的なコーディング支援を使用)
- テストが失敗する原因を診断する必要がある場合(診断スキルを使用)
- Visual Studio または VS Code Test Explorer のホットリロード、あるいは IDE に統合された再実行機能について質問している場合(これは別の機能であり、MTP コンソールホストのホットリロードではありません)
- MTP コンソールホストを使わずに、ソース編集後にエディターが影響を受けるテストを自動で再実行できるか質問している場合
- 再ビルドせずに通常の実行を 1 回行いたい場合(
run-testsを使用) - CI/CD パイプラインの設定が必要な場合
入力
| 入力 | 必須 | 説明 |
|---|---|---|
| テストプロジェクトのパス | いいえ | テストプロジェクト(.csproj)へのパスです。既定では現在のディレクトリを使用します。 |
| 失敗したテスト名またはフィルター | いいえ | 反復して実行する特定のテスト |
回答の分量
- セットアップがすでに完了しており、ユーザーが使用するコマンドだけを尋ねている場合は、
dotnet run --project <path>コマンドを 1 つと、永続ホストを起動することを説明する 1 文だけを返します。パッケージ、起動プロファイル、ルード編集に関する説明を繰り返さないでください。 - パッケージがすでにインストールされている場合は、残りの有効化と実行の手順だけを示します。再インストールを提案したり、求められていない永続化・復旧手段を追加したりしないでください。
- テスト名が指定されている場合は、フレームワークを特定し、そのフレームワークのフィルター構文を使った実行可能なコマンドを 1 つ返します。xUnit v3 の
--filter-methodや TUnit の--treenode-filterの代わりに、MSTest/NUnit の--filterを使ってはいけません。 - MTP ホストを直接起動すると、それ自体が永続的なウォッチャーになります。
dotnet runは起動したままになり、HotReload 拡張機能が編集に応答します。通常の MTP 経路ではdotnet watch runに置き換えないでください。dotnet watchは、以下に示す明示的な再起動フォールバックに限って使用してください。
ワークフロー
手順 1:変更を加える前にプラットフォームを検出する
ホットリロードには MTP が必要です。VSTest では動作しません。
platform-detection スキルの、評価済みプロパティをすべて確認する手順に従ってください。プロジェクトファイルだけでなく、インポートされた props とパッケージのバージョンも確認してください。パッケージのインストール、ファイルの編集、MTP 起動コマンドの提示より先に行ってください。
VSTest の場合は必ず停止: 現在のプロジェクト設定では MTP ホットリロードを利用できないことを伝え、MTP のセットアップ手順を中止してください。拡張機能をインストールしたり、launchSettings.json を作成したり、環境変数を設定したり、ランナーのプロパティやパッケージを変更したり、MTP ホットリロード用の dotnet run コマンドを提示したりしないでください。セットアップ依頼を暗黙の VSTest から MTP への移行に変えてはいけません。
プロジェクトを維持できる、有効な MTP 以外の代替手段を 1 つ提示してください。
dotnet watch --project <project-path> test
これは、ファイルが変更されたときに既存の VSTest プロジェクトを再ビルドして再実行するものであり、MTP ホットリロードではありません。明示的な移行は別の選択肢として提示できますが、ユーザーが求めない限り実行しないでください。1 回限りの正確なテストコマンドは、引き続き run-tests の担当です。
手順 2:ホットリロード用 NuGet パッケージを追加する
まず、有効なパッケージ参照を確認してください。Microsoft.Testing.Extensions.HotReload がすでにインストールされている場合は、バージョンを維持してこの手順を省略します。それ以外の場合は、次のようにインストールします。
dotnet add <project-path> package Microsoft.Testing.Extensions.HotReload
注:MSTest、NUnit、xUnit のランナーに推移的に含まれる
Microsoft.Testing.Platform.MSBuildを使用している場合は、NuGet パッケージをインストールすると拡張機能が自動登録されます。コードの変更は不要です。
手順 3:ホットリロードを有効にする
ホットリロードは、TESTINGPLATFORM_HOTRELOAD_ENABLED 環境変数を 1 に設定すると有効になります。
オプション A -- テスト実行前にシェルで設定する:
# PowerShell
$env:TESTINGPLATFORM_HOTRELOAD_ENABLED = "1"
# bash/zsh
export TESTINGPLATFORM_HOTRELOAD_ENABLED=1
オプション B -- launchSettings.json に追加する(繰り返し使用する場合に推奨):
テストプロジェクトの Properties/launchSettings.json を作成または更新します。
{
"profiles": {
"<ProjectName>": {
"commandName": "Project",
"environmentVariables": {
"TESTINGPLATFORM_HOTRELOAD_ENABLED": "1"
}
}
}
}
ステップ 4:ホットリロードでテストを実行する
コンソールモードでホットリロードを使用するには、dotnet test 経由ではなく、テストプロジェクトを直接実行します。
dotnet run --project <project-path>
特定の失敗したテストに絞り込むには、-- の後にフィルターを渡します。フレームワークの構文が以下の例で解決できない場合に限り、提供された、または実行時に一覧表示された filter-syntax カタログファイルを読み取ってください。この参照専用ヘルパーは呼び出さないでください。簡単な例:
| フレームワーク | フィルター構文 |
|---|---|
| MSTest | dotnet run --project <path> -- --filter "FullyQualifiedName~TestMethodName" |
| NUnit | dotnet run --project <path> -- --filter "FullyQualifiedName~TestMethodName" |
| xUnit v3 | dotnet run --project <path> -- --filter-method "*TestMethodName" |
| TUnit | dotnet run --project <path> -- --treenode-filter "/*/*/ClassName/TestMethodName" |
テストホストが起動してテストを実行し、コードの変更を待つために実行を継続します。
ステップ 5:修正を繰り返す
- エディターでソースコード(テストコードまたは製品コード)を編集します
- テストホストが変更を検出し、影響を受けるテストを自動的に再実行します
- コンソールで更新された結果を確認します
- 対象のテストがすべて合格するまで繰り返します
重要:ホットリロードは現在、コンソールモードのみで動作します。Visual Studio または Visual Studio Code の Test Explorer ではホットリロードをサポートしていません。
サポート対象外の編集と不適切な編集
メソッドのシグネチャの変更、新しい型の追加など、サポート対象外の編集は実行中のプロセスに適用できません。古いホストがそれらの変更を取り込んだと決して示唆しないでください。
MTP ホストを直接起動した場合:
- 現在のホストを起動したコマンド、プロファイル、環境、フィルター、引数を正確に保持します。
Ctrl+Cで停止します。- 同じプロジェクトをビルドします:
dotnet build <project-path>。 - 元のホスト起動コマンドと同じコマンドを再実行します。不明な既存の起動方法を、一般的な
dotnet runコマンドに置き換えないでください。
サポート対象外の編集が繰り返し予想される場合は、ウォッチ管理による再起動の代替手段を提示します:
# PowerShell
$env:TESTINGPLATFORM_HOTRELOAD_ENABLED = "1"
$env:DOTNET_WATCH_RESTART_ON_RUDE_EDIT = "1"
dotnet watch --project <project-path> run -- <existing-MTP-arguments>
dotnet watch は、不適切な編集を適用できない場合にプロセスを再起動します。自動再起動の変数を指定していない場合は、再起動のプロンプトを受け入れるか、Ctrl+R を押してください。-- の後に既存のテストフィルターがあれば、そのまま保持してください。
DOTNET_WATCH_RESTART_ON_RUDE_EDIT は文書化された .NET SDK のスイッチであり、MTP の拡張機能設定ではありません。正確性が疑問視される可能性がある場合は、dotnet watch のドキュメントを引用し、プロンプトを表示する代わりにウォッチャーが再起動することを説明してください。元のフィルターを省略したり、要求されたウォッチ管理による代替手段を単発の dotnet run に置き換えたりしないでください。
ステップ 6:完了する
すべてのテストに合格したら:
- テストホストを停止します(Ctrl+C)
- ユーザーが正確な単発の検証コマンド、フラグ、フィルター、TRX、またはダンプを要求した場合は、
run-testsを使用します - 必要に応じて、環境から
TESTINGPLATFORM_HOTRELOAD_ENABLEDを削除するか、今後の利用のためにlaunchSettings.jsonを保持します
検証
- プロジェクトが VSTest ではなく Microsoft Testing Platform を使用している
-
Microsoft.Testing.Extensions.HotReloadパッケージがインストールされている -
TESTINGPLATFORM_HOTRELOAD_ENABLED環境変数が1に設定されている - テストが実行され、ホストが変更を待ってアクティブな状態を維持している
- 手動で再起動しなくてもコードの変更が取り込まれる
よくある落とし穴
| 落とし穴 | 解決策 |
|---|---|
dotnet run ではなく dotnet test を使用する | ホットリロードでは、テストホストをコンソールモードで直接実行するために dotnet run --project <path> が必要です |
| プロジェクトが MTP ではなく VSTest を使用している | 変更を加えないでください。ビルドと再実行の代替手段として dotnet watch --project <path> test を提示するか、個別の明示的な移行を提示してください |
| 環境変数の設定を忘れる | 実行前に TESTINGPLATFORM_HOTRELOAD_ENABLED=1 を設定します |
| Test Explorer との統合を想定する | コンソールモードのみです -- VS/VS Code の Test Explorer はサポートされていません |
| サポート対象外のコード変更(不適切な編集)を行う | 停止してビルドし、同じホスト起動方法で再実行するか、不適切な編集時の再起動動作を設定して dotnet watch を使用します |