template-discovery について
Template Discovery は、要件に合う `dotnet new` テンプレートを探し、確認して選ぶための開発者向けスキルです。意図のマッピングと CLI による検索、一覧表示、パラメーター確認を組み合わせ、作成前に選択肢や出力を把握できます。
主な機能
- 01自然言語の要件をテンプレートに対応付け
- 02NuGet とインストール済みテンプレートを検索
- 03パラメーターと既定値を確認
- 04生成ファイルをプレビュー
- 05テンプレートのワークロードとインストール要件を案内
活用シーン
- 01説明されたアプリに合うテンプレートを探す
- 02ローカルにインストール済みのテンプレートを確認
- 03テンプレートのパラメーターと既定値を確認
- 04プロジェクト作成前に生成ファイルを調べる
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dotnet/ skills --skill template-discoveryインストール後、Claude Code で/template-discoveryを入力して読み込まれたか確認します。
詳細
テンプレートの検索
このスキルでは、dotnet new CLI コマンドを使って検索、一覧表示、パラメーターの確認を行い、特定のタスクに適した dotnet new テンプレートをエージェントが見つけ、調査し、選択できるようにします。
使用する場合
- ユーザーが「X に利用できるテンプレートは何ですか?」と尋ねた場合
- ユーザーがプロジェクトの内容を自然言語で説明した場合(例:「認証機能付きの Web API が必要です」)
- ユーザーがプロジェクトの作成前に、テンプレートを比較したりパラメーターを把握したりしたい場合
- ユーザーが作成を決める前に、テンプレートで生成される内容(ファイル、構成)を確認したい場合
使用しない場合
- ユーザーがプロジェクトの作成を希望する場合 —
template-instantiationスキルに案内します - ユーザーがカスタムテンプレートの作成または検証を希望する場合 —
template-authoringスキルに案内します - ユーザーがテンプレートの詳細な比較を希望する場合 —
template-comparisonスキルに案内します - ユーザーが作成時のパラメーター間でスマートなデフォルト値を適用したい場合 —
template-smart-defaultsスキルに案内します - ユーザーがビルドの問題をトラブルシューティングしている場合 —
dotnet-msbuildプラグインに案内します
おすすめを求められた場合は、まず回答し、その後で確認します。調査を求められた場合は、まず調査します。 一般的な「どのテンプレートがよいですか?」という質問には、CLI の一時的なエラーでユーザーに回答できなくなることを防ぐため、ステップ 1 の対応表を参考にします。インストール済みのテンプレート、正確なオプションやデフォルト値、ドライランの出力を明示的に尋ねられた場合は、最終回答を作成する前に該当する
dotnet newコマンドを実行します。dotnet newの呼び出しや「確認します……」という予告で応答を終えてはいけません。
調査の依頼には実際の調査が必要です。 インストール済みの選択肢、正確なパラメーターやデフォルト値、互換性の制約、ドライランで生成されるファイルの正確な一覧をユーザーが尋ねた場合は、対応する
dotnet newコマンドを実行します。実際に確認したデータを、記憶しているフラグで置き換えてはいけません。現在のテンプレートの--help出力に含まれているフラグのみを報告します。
入力
| 入力 | 必須 | 説明 |
|---|---|---|
| ユーザーの意図またはキーワード | はい | 自然言語による説明またはキーワード(例:「Web API」、「コンソールアプリ」、「MAUI」) |
| 言語の設定 | いいえ | C#、F#、または VB — デフォルトは C# |
| フレームワークの設定 | いいえ | 対象フレームワーク(例:net10.0、net9.0) |
ワークフロー
おすすめを提示する場合は、ステップ 2〜4 より先にステップ 1 を使用します。明示的な調査を求められた場合は、依頼された調査を先に実行し、ステップ 1 は代替手段としてのみ使用します。
ステップ 1:意図をテンプレート候補に対応付ける
以下の対応表を使って、ユーザーの自然言語による説明をテンプレートの短縮名とパラメーターに対応付けます。
意図 → テンプレート短縮名:
| 意図/フレーズ | テンプレート短縮名 |
|---|---|
| web api、web service、rest api、restful、api、minimal api | webapi |
| web app、web application | webapp、blazorserver |
| mvc | mvc |
| razor、razor pages | webapp |
| blazor、blazor web app | blazor |
| blazor server | blazorserver |
| blazor wasm、blazor webassembly | blazorwasm |
| grpc | grpc |
| signalr | webapi、webapp |
| console、console app、command line、cli | console |
| worker、background service、daemon、windows service | worker |
| class library、library、lib、nuget package | classlib |
| maui、mobile、cross-platform app、ios、android | maui |
| desktop | maui、wpf、winforms |
| wpf | wpf |
| winforms、windows forms | winforms |
| winui、winui3 | winui3 |
| test、unit test | xunit、nunit、mstest |
| xunit/nunit/mstest | xunit/nunit/mstest |
| solution | sln |
| aspire、.net aspire | aspire-starter、aspire |
| azure functions、function app、serverless | func |
| orleans | orleans |
| razor component、web component | razorcomponent |
| razor class library | razorclasslib |
| gitignore/editorconfig/nuget config/global json | gitignore/editorconfig/nugetconfig/globaljson |
キーワード → パラメーター:
| キーワード/フレーズ | パラメーター | 値 |
|---|---|---|
| authentication、auth、individual auth、individual accounts | --auth | Individual |
| windows auth | --auth | Windows |
| azure ad、entra id | --auth | SingleOrg |
| no auth、no authentication | --auth | None |
| controllers、with controllers | --use-controllers | (フラグ) |
| minimal api | (デフォルト) | — |
| aot、native aot | --aot | (フラグ) |
| docker、container | テンプレートの Docker/コンテナーオプション | テンプレートによって異なります。--help で確認してください(オプションを公開していないテンプレートもあります) |
| net8/.net 8/dotnet 8 | --framework | net8.0 |
| net9/.net 9/dotnet 9 | --framework | net9.0 |
| net10/.net 10/dotnet 10 | --framework | net10.0 |
これらは初期推測です。テンプレートによってパラメーター名は異なるため(例:--auth と --Authentication)、必ず dotnet new <template> --help で実際のパラメーター名と選択肢を確認してください。
対応表にある短縮名の一部は、標準の SDK インストールには含まれていません。maui、winui3、aspire-starter/aspire、func、orleans などのテンプレートでは、通常、ワークロード(dotnet workload install <id>)や追加のテンプレートパッケージ(dotnet new install <package>)が必要です。対応する短縮名が dotnet new list に表示されない場合は、推奨する前に dotnet new list/dotnet new search を使って適切なテンプレートと、それを提供するパッケージ/ワークロードを見つけてください。
回復性 — CLI が失敗しても必ず回答してください。 上記の意図の対応表だけでも回答として利用できます。
dotnet newコマンドは一つずつ順番に実行してください。テンプレートエンジンはグローバルミューテックスを使用するため、複数のdotnet new <template> --help/--dry-run呼び出しを同時に実行すると、一時的な「mutex」/「persistence」エラーが発生し、出力が空になる場合があります。コマンドが失敗した場合は一度再試行してください。それでも失敗する場合は、意図/パラメーターの対応表を使い、具体的な推奨を提示してください。正確なパラメーター名や選択肢を CLI で確認できなかったことを伝えてください。CLI 呼び出しのエラーを理由に、回答を提示せずにターンを終えてはいけません。
ステップ 2:テンプレートを検索する
dotnet new search を使うと、ローカルにインストール済みのテンプレートと NuGet.org の両方から、キーワードでテンプレートを検索できます。
dotnet new search blazor
dotnet new list を使うと、インストール済みのテンプレートのみを表示できます。必要に応じてフィルターを指定できます。
dotnet new list --language C# --type project
dotnet new list web
ユーザーからインストール済みのテンプレートと NuGet.org の両方を確認するよう明示的に依頼された場合、SDK に適切なテンプレートが含まれていても、両方を検索して結果を報告してください。組み込みの選択肢とインストール可能な代替案を区別してください。
- SDK に付属するテンプレートの場合は、**「インストール不要 — SDK に付属」**と記載し、パッケージが必要だと作り上げないでください。
- 推奨する関連 NuGet 検索結果ごとに、実際の検索出力からパッケージ ID をコピーし、
dotnet new install <package-id>を提示してください。 - NuGet の検索で信頼できる代替案が見つからない場合は、その旨を明記してください。ローカルの一致候補で依頼には回答できます。
ステップ 3:テンプレートの詳細を確認する
dotnet new <template> --help を使うと、特定のテンプレートのパラメーター名、型、既定値、許可される値など、パラメーターの詳細を確認できます。
dotnet new webapi --help
確認できたオプション名、選択肢、既定値、互換性に関する注意事項を回答に記載してください。
たとえば、Windows Service のサポートは、すべての worker テンプレートで利用できるフラグではありません。インストール済みの worker --help に該当するオプションが表示されない場合は、その旨を伝え、テンプレートの作成と作成後のホスティング設定を区別してください。--windows や --use-windows-service を決して作り上げないでください。
ステップ 4:出力をプレビューする
dotnet new <template> --dry-run を使うと、ディスクに書き込まずに、テンプレートが作成するファイルとディレクトリを確認できます。
dotnet new webapi --name MyApi --auth Individual --dry-run
ドライランが一時的な「mutex」/「persistence」エラーで失敗した場合は、1 回だけ再試行してください。それでも失敗する場合は、代表的な構成(テンプレートのファミリーと一般的なファイルの種類)を提示し、CLI で確認できていないことを記載してください。具体的な値、選択肢、ファイルパスを作り上げないでください。ドライランが成功した場合は、出力に含まれる実際のパスをすべて保持してください。長い一覧は、パスを省略したり作り上げたりせず、フルパスの羅列ではなくディレクトリツリーとして表示してください。ツリーの後に、主要なエントリーポイント(たとえば Program.cs、App.razor、プロジェクトファイル)の役割をそれぞれ 1 行で説明してください。説明のないファイル一覧では不十分です。
コマンドを実行できない場合、「自分で実行してください」で終わらせないでください。既知のテンプレートファミリーに基づく代表的なツリーと主要ファイルの説明を、未確認であることを明示して提示し、ユーザーが有用なプレビューを得られるようにしてください。
ユーザーがファイルを作成しないよう指示した場合、コピーして実行できる作成コマンドにはすべて --dry-run を含めてください。自分で実行していない場合でも、通常の dotnet new ... コマンドを提示するのはその指示に反します。
ステップ 5:調査結果を提示する
回答の冒頭に、すぐ実行できるコマンドを提示してから、その理由を説明してください。 必須の形式は次のとおりです。
<template>を使用してください — 理由を 1 行で説明します。dotnet new <template> --name <Name> [--key params]
次に、補足情報を追加してください。
- 主要なパラメーターと推奨値(例:
--auth:None | Individual | SingleOrg | Windows などの選択肢) - 生成されるファイルとプロジェクト構造
- 前提条件 — 正確なパッケージ名(
dotnet new install <id>)を示すか、組み込みテンプレートの場合は**「インストール不要 — SDK に付属」**と記載してください。
具体的でコピーして実行できるコマンドがない回答は、通常の返答と変わらず、このスキルを使う意味がありません。次に実行するコマンドを必ず示してください。
検証
- ユーザーの意図に合うテンプレートが少なくとも 1 つ見つかった
- テンプレートのパラメーターについて、型と既定値を説明した
- 作成に進む前に、テンプレートで生成されるものをユーザーが把握できる
- オプションについての正確な記述は、このテンプレートの
--help出力で確認した - ファイルを作成してはならない案内用コマンドには
--dry-runを含めた
よくある落とし穴
| 落とし穴 | 解決策 |
|---|---|
| ローカルテンプレートがあるため、明示的に要求された NuGet の検索を省略する | dotnet new list <keyword> と dotnet new search <keyword> の両方を実行し、組み込みテンプレートと実際にインストール可能な代替テンプレートを区別します。 |
| ローカルに一致するテンプレートがない場合に NuGet を検索しない | dotnet new search <keyword> を使って、NuGet.org でインストール可能なテンプレートを探します。 |
| テンプレートの制約を確認しない | 一部のテンプレートには、特定の SDK やワークロードが必要です。推奨する前に dotnet new <template> --help を使って制約を確認します。 |
| 出力をプレビューせずにテンプレートを推奨する | テンプレートがユーザーの期待する内容を生成することを確認するため、必ず dotnet new <template> --dry-run を使います。 |
dotnet new の呼び出しが「mutex」/「persistence」エラーで失敗し、何も返さない | これらは一時的なエラーです(多くの場合、同時実行が原因です)。dotnet new の呼び出しを順番に実行して一度再試行し、それでも失敗する場合はステップ 1 の意図のマッピングに切り替えて、具体的な回答をユーザーに提示します。 |
| 別の SDK/テンプレートの情報から Windows Service または AOT のフラグを推測する | dotnet new <template> --help で確認できたオプションのみを記載します。それ以外の場合は、作成後の手順を説明します。 |
詳細情報
- dotnet new テンプレート — 組み込みテンプレートのリファレンス
- Template Engine Wiki — テンプレートエンジンの内部情報