neo-dotnet-tag-helper について
neo-dotnet-tag-helperは、C#でカスタムRazor Tag Helperを設計・生成するスキルです。タグや属性の要件を整理して実装と検証を支援し、`.cshtml`ファイルは生成しません。
主な機能
- 01タグと属性の要件整理
- 02C# Tag Helperクラスの生成
- 03TagBuilderによるHTML構築
- 04依存性注入とコンテキスト処理の指針
- 05型とスレッド安全性の確認
活用シーン
- 01再利用可能なカスタムHTMLタグの作成
- 02C#でのUIロジックのカプセル化
- 03サービス依存のTag Helperの生成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ benknightdark/ neo-skills --skill neo-dotnet-tag-helperインストール後、Claude Code で/neo-dotnet-tag-helperを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
reference/anti-patterns.mdcoding-style.mdpatterns.md詳細
.NET Tag Helper エキスパートスキル
トリガー条件
- ユーザーが、C# でカスタム Razor Tag Helper の作成、生成、設計を依頼した場合。
- Partial View や CSHTML を使わずに、複雑な HTML/UI ロジックを再利用可能なカスタムタグにカプセル化したい場合。
- 対象フレームワークが .NET 6.0(LTS)以降の場合。
ワークフロー(ジェネレーターパターン)
堅牢で高性能な C# Tag Helper を作成するには、以下の手順に厳密に従ってください。
ステップ 1:要件の把握と収集(逆質問)
コードを書く前に、まだ提示されていない場合は、以下についてユーザーに確認してください。
- 対象 HTML タグ:HTML 内で使用するカスタムタグの名前は何ですか?(例:
<my-button>、<user-card>) - プロパティ:このタグが受け付けるパラメーター/属性は何ですか?(例:
theme、is-active、user-id) - 依存関係(DI):このタグはデータベースへのクエリやサービスの呼び出しを行う必要がありますか?(依存性注入が必要です)
- コンテキスト:
ViewContextにアクセスする必要がありますか?(例:URL の生成やモデルの状態の確認)
ステップ 2:検討と設計(計画)
回答に基づいて、以下を行います。
- クラス名:クラス名の末尾が
TagHelperになるようにします(例:MyButtonTagHelper)。 - 対象要素:
[HtmlTargetElement("my-button")]を適用します。 - プロパティ:HTML の kebab-case 属性を C# の PascalCase プロパティに割り当てます。必要に応じて
[HtmlAttributeName("is-active")]を適用します。 - メソッドの選択:
- IO/非同期処理がない場合は、
Processをオーバーライドします。 - DI を使ってデータベース/API を呼び出す場合は、
ProcessAsyncをオーバーライドします。
- IO/非同期処理がない場合は、
ステップ 3:実行(コード生成)
C# クラス全体を生成します。以下のルールを厳守してください。
Microsoft.AspNetCore.Razor.TagHelpers.TagHelperを継承します。.cshtmlファイルは生成しないでください。すべての HTML は、C# クラス内でTagBuilderを使って構築する必要があります。ViewContextが必要な場合は、[ViewContext]と[HtmlAttributeNotBound]を使用します。output.TagName、output.Attributes.SetAttribute、output.Content.SetHtmlContentを使用して、コンテンツを適切に処理します。- スレッドセーフ性を確保します(注入されたスコープ付き/一時的なものを除き、インスタンスフィールドにリクエスト固有の状態を保存しないでください)。
ステップ 4:検証(品質チェック)
提示する前に、生成したコードが以下の基準を満たしているか確認します。
- すべてのプロパティが強い型付けになっていますか?
- HTML 要素に文字列連結ではなく
TagBuilderを使用していますか? - タスクを待機する場合、
ProcessAsyncを正しく使用していますか?
成果物
C# コードを Markdown のコードブロックで囲んで提示します。_ViewImports.cshtml に登録する方法(例:@addTagHelper *, YourAssemblyName)も簡潔に説明します。
ドキュメント
公式リファレンス
内部リファレンス
コメント
Markdown 対応