template-comparison について
インストール済みテンプレートのオプションと機能対応をもとに、2つ以上の `dotnet new` テンプレートを比較するスキルです。要点を絞った比較表を作り、状況に応じた推奨を示します。
主な機能
- 01テンプレートのオプションと対象フレームワークを確認
- 02機能対応の比較
- 03要点を絞った比較表の作成
- 04状況に応じたテンプレートの推奨
活用シーン
- 01類似テンプレートからの選択
- 02プロジェクト要件に合うテンプレート探し
- 03指定項目の対応状況の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dotnet/ skills --skill template-comparisonインストール後、Claude Code で/template-comparisonを入力して読み込まれたか確認します。
詳細
テンプレートの比較
このスキルを使うと、エージェントは 2 つ以上の dotnet new テンプレートを並べて比較し、ユーザーが適切なテンプレートを選べるようにします。各テンプレートのパラメーターと機能の対応状況を調べ、比較表を作成します。
使用するタイミング
- ユーザーが似たテンプレート(例:
webapiとwebapp、blazorとblazorwasm)のどちらにするか検討している - ユーザーが「X にはどのテンプレートを使うべきですか?」と尋ねている
- ユーザーがプロジェクトを作成する前に、2 つ以上のテンプレートの違いを把握したい
使用しないタイミング
- ユーザーがプロジェクトを作成したい場合 —
template-instantiationに案内します - ユーザーがカスタムテンプレートを作成または検証したい場合 —
template-authoringまたはtemplate-validationに案内します - ユーザーが単一のテンプレートを見つけるか調べるだけの場合 —
template-discoveryに案内します
入力
| 入力 | 必須 | 説明 |
|---|---|---|
| テンプレートの短い名前 | はい | 比較する 2 つ以上のテンプレートの短い名前(例:webapi、webapp) |
| 比較の焦点 | いいえ | 強調する任意の観点(認証、AOT、フレームワーク、インタラクティブ性) |
ワークフロー
エビデンスに関する取り決め: 選択肢を並べた表が役立つのは、各選択肢についての主張が、現在インストールされているテンプレートに基づいている場合に限られます。各テンプレートに対して --help コマンドを順番に実行し、各テンプレートから同じ項目を収集してください。利用できないオプションは、推測したり別のテンプレートのフラグを流用したりせず、Not exposed と記載してください。
判断に関する取り決め: 表の大きさではなく、ユーザーが示した判断基準に合わせて比較してください。指定された項目をすべて網羅し、関係のないオプションの行は省き、シナリオに即した理由を示してください。また、推奨する開始点について、提案を具体的な行動につなげるのに役立つ場合は、安全な --dry-run コマンドを 1 つ提示してください。
ステップ 1:各テンプレートを調べる
比較対象の各テンプレートに対して dotnet new <template> --help を実行し、パラメーター(名前、型、既定値、選択肢)とサポートされているフレームワークを収集します。
dotnet new webapi --help
dotnet new webapp --help
テンプレートがインストールされていない場合は、そのプロバイダーを検索し、前提条件が不足していることを報告してください。環境の変更をユーザーが依頼したか、インストールを承認した場合にのみ、インストールしてください。
--helpの呼び出しは順番に実行してください。 テンプレートエンジンはグローバルミューテックスを使用するため、複数のdotnet new <template> --helpコマンドを同時に実行すると、一時的な「mutex」/「persistence」エラーが発生し、出力が空になることがあります。テンプレートは一度に 1 つずつ調べてください。呼び出しに失敗した場合は、次に進む前に 1 回だけ再試行し、回答なしで終わらせるのではなく、把握できているパラメーターの情報を使って比較を作成してください。
ステップ 2:比較表を作成する
次の項目を含む、テンプレートを並べた比較表を作成します。
- パラメーター — 名前、型、既定値、選択肢
- 機能の対応状況 — 認証、AOT、Docker、コントローラー、インタラクティブ性
- 利用可能なフレームワーク — 例:net8.0、net9.0、net10.0
- 分類 — テンプレートが提示するカテゴリ(Web、API、Blazor など)
指定された判断基準ごとに 1 行を設け、各セルに実際に確認したオプション名を記載してください。テンプレートが生成または公開する内容について尋ねられている場合、一般的なフレームワークの知識で指定された行を埋めないでください。
プロジェクトの作成が許可されていない状態で、ユーザーが生成される依存関係について尋ねた場合は、インストール済みのテンプレートパッケージに含まれるソース .csproj ファイルを調べてください。--help と --dry-run ではパッケージ参照は明らかになりません。調査のために一時プロジェクトを作成しないでください。また、現在のパッケージ ID やテストプラットフォームの既定値を推測しないでください。
例の形式:
| 観点 | webapi | webapp |
|---|---|---|
認証(--auth) | None、Individual、SingleOrg、Windows | None、Individual、SingleOrg、... |
AOT(--aot フラグ) | dotnet new webapi --help に --aot が表示される場合に対応 | dotnet new webapp --help に --aot が表示される場合に対応 |
コントローラー(--use-controllers) | はい | 該当なし |
| インタラクティブ性 | 該当なし | 該当なし |
| フレームワーク | net8.0 / net9.0 / net10.0 | net8.0 / net9.0 / net10.0 |
| 分類 | Web、WebAPI | Web、Razor Pages |
ステップ 3:推奨
最後に、決定的な 推奨 の行を示します。表だけで終わらせてはいけません。次の形式を使います。
推奨:
<template>— 選択の理由を、ユーザーが示したシナリオに結び付けた1文で説明します。(<condition>の場合は、もう一方を選びます。)
その後、template-instantiation にリンクして作成します。勝者を示さない(または「X によります」と明確に示さない)まま比較を終えるのは不完全です。この優柔不断さが、このスキルを単なる回答と同等にしてしまいます。
よくある組み合わせの判断の目安
これらは推奨にのみ使用し、現在のパラメーター対応状況の根拠にはしないでください。比較表を作成する前に、必ず --help で確認してください。
| 組み合わせ | 既定の選択 | 理由 |
|---|---|---|
webapi vs webapp | JSON/REST バックエンドには webapi、サーバーでレンダリングする HTML/Razor Pages には webapp | webapi にはコントローラー/最小 API と OpenAPI が含まれ、UI はありません |
blazor vs blazorwasm | オフライン対応が必要、またはサーバーが不要な場合は blazorwasm、サーバーとクライアントのインタラクティブ性を柔軟に組み合わせる場合は blazor(Web App) | スタンドアロンの WASM は完全にクライアント側で動作し、オフラインでも使えます |
worker vs console | 長時間実行する処理/キュー処理/バックグラウンド処理には worker | Generic Host により、DI、ログ、構成、正常なシャットダウン、IHostedService のライフサイクルが利用できます |
mvc vs webapp | ページ中心のアプリには webapp(Razor Pages)、大規模なアプリでコントローラーとビューを分離する場合は mvc | Razor Pages は CRUD スタイルのページに適した軽量な選択肢です |
次の制約は、上記の簡易的な判断基準より優先されます。
- 大規模なアプリケーション、または共有コントローラーロジックをユーザーが明示的に想定している場合は、最初のページが CRUD 中心であっても
mvcを選びます。 - 高度なインタラクティブフォームが中心でありながら、有用な HTML を最初のレスポンスで返す必要がある場合は、
webappより Server インタラクティビティを備えたblazorを選びます。初回レンダリングはサーバーで行われ、インタラクティブコンポーネントは Razor Pages のPageModelではなく、Blazor のフォーム/コンポーネントモデルを使用することを説明してください。 - オフライン対応には
blazorwasmを選び、PWA/サービスワーカーが必要であること、初回読み込み後はキャッシュが使用されること、実行に稼働中のサーバーは不要であることを説明してください。 - 永続性のあるキュープロセッサーには
workerを選び、Generic Host のライフサイクル、依存関係の挿入、構成、ログ、正常なシャットダウン、およびインメモリループではなく実際の永続キューを選択理由に結び付けてください。
検証
- 要求されたすべてのテンプレートを
dotnet new <template> --helpで確認した - 比較でパラメーター、機能のサポート状況、フレームワーク、分類を取り上げた
- ユーザーのシナリオに関係する違いを明示した
- 推奨(または明確なトレードオフ)を示した
- サポートされていない、または存在しないオプションは推測せず、その旨を明記した
- 最終的な推奨は、決定的な
Recommendation:の1行で示した
よくある落とし穴
| 落とし穴 | 解決策 |
|---|---|
| 未インストールのテンプレートを記憶だけで比較する | 各テンプレートをインストールして確認し、実際のパラメーターと選択肢に基づいて比較します。 |
| 機能が同等だと思い込む | パラメーター名と機能のサポート状況はテンプレートごとに異なります。--help でそれぞれ確認してください。 |
| 根本的に異なる種類のテンプレートを比較する | 重複する問題を解決するテンプレートのみを比較します。対象となるシナリオが異なる場合は、その点を明記してください。 |
詳細情報
- dotnet new テンプレート — 組み込みテンプレートのリファレンス
- dotnet new — CLI リファレンス