mcpField
C
create-datadriven-aspnetcore

create-datadriven-aspnetcore

github.com/dotnet開発5.8k2.9k 回インストール1 日前に更新
リポジトリ

create-datadriven-aspnetcore について

create-datadriven-aspnetcore は、プロジェクト既存の UI やコーディング規約に沿って ASP.NET Core の Web コードを生成するスキルです。MVC、Razor Pages、Blazor、Minimal API に対応し、スキャフォールディング用 CLI ツールは使いません。

主な機能

  1. 01MVC、Razor Pages、Blazor、Minimal API のコード生成
  2. 02既存の UI とコーディング規約への準拠
  3. 03Entity Framework エンティティの CRUD 生成
  4. 04外部キー依存を調べ関連リソースを生成
  5. 05ビルド、マイグレーション、API リクエストの検証

活用シーン

  1. 01モデル向け CRUD ページやコンポーネントの追加
  2. 02MVC コントローラーや Minimal API エンドポイントの生成
  3. 03エンティティ向け DbContext とマイグレーションの設定

インストール

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

$npx skills add https://github.com/dotnet/skills --skill create-datadriven-aspnetcore

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

詳細

ASP.NET Core コードの生成またはスキャフォールディング

ASP.NET Core のスキャフォールディングコード(コントローラー、ビュー、Razor Pages、Blazor コンポーネント、Minimal API エンドポイント)を生成します。生成されるコードは、プロジェクトで既に使用されている CSS フレームワーク、レイアウト規約、コーディングパターンに準拠します。CLI ベースのスキャフォールディング/コード生成ツールは使用しませんが、ビルド、復元、マイグレーションには標準の dotnet CLI コマンドを引き続き使用します。

使用する場面

  • ASP.NET Core プロジェクトのモデルに対する CRUD ページ、ビュー、またはコンポーネントの追加
  • Entity Framework Core を使用した API コントローラーまたは Minimal API エンドポイントのスキャフォールディング
  • DbContext に基づく Razor Pages、MVC ビュー、または Blazor コンポーネントの生成

使用しない場面

  • プロジェクトが ASP.NET Core プロジェクトではない場合
  • Web 以外の成果物(クラスライブラリ、コンソールアプリなど)をスキャフォールディングする必要がある場合

入力

入力必須説明
スキャフォールディングのリクエストはいスキャフォールディングする内容の自然言語による説明(以下の形式を参照)
プロジェクトファイルのパスはい対象の .csproj ファイルのフルパス
ソリューションルートのパス推奨複数プロジェクトのソリューションの場合、ソリューションルートへのパス
スキャフォールディングのリクエスト形式

スキャフォールディングのリクエストには、スキャフォールディングする内容を自然言語で記述します。正しいコードを生成するため、リクエストには対象プロジェクトのパスと十分な詳細を含める必要があります。例:

EF を使用した Razor Pages:

Scaffold Razor Pages with CRUD for the `<ModelName>` model (from `<Namespace>`) in project `<path-to-csproj>`.
Create a new DbContext `<DbContextName>` using <database-provider>.
Also scaffold CRUD for any entity that `<ModelName>` depends on via required foreign keys, so parent entities can be created first.

Blazor CRUD コンポーネント:

Scaffold Blazor CRUD components for the `<ModelName>` model (from `<Namespace>`) in project `<path-to-csproj>`.
Create a new DbContext `<DbContextName>` using <database-provider>.

Minimal API エンドポイント:

Scaffold Minimal API endpoints for the `<ModelName>` model (from `<Namespace>`) in project `<path-to-csproj>`.
Name the endpoints class `<EndpointsClassName>`.
Create a new DbContext `<DbContextName>` using <database-provider>.
Enable OpenAPI support.

ビューを含む MVC コントローラー:

Scaffold an MVC controller with views and Entity Framework for the `<ModelName>` model (from `<Namespace>`) in project `<path-to-csproj>`.
Name the controller `<ControllerName>`.
Use existing DbContext `<DbContextName>`.
Generate views.

空の項目(EF なし):

Scaffold an empty Razor Page named `<PageName>` in project `<path-to-csproj>`.

ワークフロー

ステップ 1:スキャフォールディングのリクエストを理解する

スキャフォールディングのリクエストを解析して、以下を特定します。

  • スキャフォールダーの種類:Razor Pages、Blazor コンポーネント、MVC コントローラー、Minimal API、空のページ/ビュー/コンポーネント
  • モデルクラスとその名前空間
  • DbContext:新規または既存、データベースプロバイダー(SQLite、SQL Server など)
  • 名前付き項目:コントローラー名、エンドポイントのクラス名、ページ名、ビュー名、エリア名
  • オプション:OpenAPI、非同期アクション、部分ビュー、カスタムレイアウト
  • 外部キーの範囲:必須の外部キーが参照する親エンティティについても CRUD をスキャフォールディングするかどうか
実行チェックリスト

該当するチェックリストを順番に完了してください。必要な外部キーにより親リソースが必要な場合は、要求された子リソースだけを作成して作業を終えないでください。

すべての EF スキャフォルダー

  1. 編集する前に、プロジェクトファイル、Program.cs、対象モデル、検証属性、ナビゲーションプロパティ、外部キーを確認してください。
  2. 要求された既存の DbContext を再利用してください。存在しない場合は、要求されたコンテキストを作成してください。必要なプロバイダーパッケージのみを追加し、指定されたプロバイダーと接続文字列を使って AddDbContext に登録してください。マイグレーションが必要で、まだ追加されていない場合は、Microsoft.EntityFrameworkCore.Design (PrivateAssets="all") を追加する必要があります。
  3. 要求されたエンティティと、必要なすべての親エンティティについて、完全な CRUD(一覧、詳細、作成、編集、削除)を生成してください。
  4. EF のマイグレーションのライフサイクルに従ってください。マイグレーションを作成して適用してください。Program.cs から EnsureCreated を呼び出したり、データベースにシードデータを追加したりしないでください。
  5. 生成したプロジェクトを復元し、ビルドしてテストしてください。完了を報告する前にエラーを修正してください。

MVC、Razor Pages、Blazor

  1. マークアップを生成する前に、既存のレイアウト、CSS、代表的な UI を確認してください。
  2. 子リソースと必要な親リソースの UI フローをすべて生成してください。親リソースを子リソースより先に作成できるよう、各リソースへのナビゲーション経路も含めてください。
  3. 既存の UI フレームワークと規約に合わせてください。Blazor の既存のレンダーモード設定は維持してください。

Minimal API

  1. 各リソースにルートグループを使用し、子リソースと必要な親リソースの両方に対して GET(一覧および ID 指定)、POST、PUT、DELETE エンドポイントをマッピングしてください。
  2. すべてのエンドポイントに OpenAPI メタデータを追加してください。一意の名前、タグ、説明、成功・エラー応答のメタデータを含め、OpenAPI が有効な場合は WithOpenApi を使用してください。
  3. すべての CRUD リクエストを記述した実行可能な .http ファイルを作成してください。親レコードを先に作成し、子リクエストでは返された ID を取得するか、明確に再利用してください。リクエストは依存関係の順序で実行してください。
ステップ 2:UI スタイルを確認する(API 以外のスキャフォルダーのみ)

API コントローラーおよび Minimal API エンドポイントでは、このステップをスキップしてください。

  1. プロジェクトのレイアウトファイル(_Layout.cshtml、MainLayout.razor、または同等のファイル)を確認します。
  2. メインの CSS ファイル(site.css、app.css、Tailwind の設定など)を確認します。
  3. プロジェクト内の既存ページ、ビュー、またはコンポーネントを 1~2 個確認します。

生成するすべてのファイルは、既存の UI フレームワーク、CSS クラス、規約に必ず合わせてください。Bootstrap が使われている場合は、Bootstrap のマークアップを生成してください。Tailwind が使われている場合は、Tailwind のマークアップを生成してください。

ステップ 3:Blazor 固有のルールを適用する(Blazor スキャフォルダーのみ)

Blazor 以外のスキャフォルダーでは、このステップをスキップしてください。

  • [SupplyParameterFromForm] プロパティは = new() を使用する必要があります(null! は使用しないでください)。これにより、初回 GET 時の EditForm のクラッシュを防ぎます。
  • Program.cs では、AddRazorComponents() に .AddInteractiveServerComponents() をチェーンし、MapRazorComponents<App>() に .AddInteractiveServerRenderMode() をチェーンする必要があります。生成するコンポーネントが実際に @rendermode InteractiveServer を使用する場合、またはプロジェクトがすでに使用している場合にのみ、インタラクティブサーバーサービス/レンダーモードを追加してください。
  • 既存のチェーンされたレンダーモード呼び出し(例:.AddInteractiveWebAssemblyRenderMode())を置き換えないでください。
ステップ 4:コードを生成する

コードファイルはすべて手動で生成してください。次の制約に従ってください。

  • 使用しないでください:スキャフォールディング CLI ツール
  • 追加しないでください:スキャフォールディング機能に必要なパッケージ以外のパッケージ(例:RuntimeCompilation や、その他の便利機能パッケージ)
  • プロジェクト内の既存ファイルのコーディングスタイル(命名規則、インデント、名前空間のパターン)に合わせてください。
OpenAPI メタデータを API エンドポイントに追加する(API スキャフォルダーのみ)

OpenAPI サポートを有効にして Minimal API または MVC API エンドポイントを生成する際は、OpenAPI ドキュメントが説明的で有用になるよう、すべてのエンドポイントに詳細なメタデータを追加します。

  • .WithName("GetTodoItems") — 各エンドポイントの一意なオペレーション ID
  • .WithTags("TodoItems") — エンドポイントをリソースごとにグループ化
  • .WithDescription("Returns all todo items") — 人が読める説明
  • .Produces<List<TodoItem>>(StatusCodes.Status200OK) — 成功レスポンスの型を記載
  • .Produces(StatusCodes.Status404NotFound) — エラーレスポンスを記載
  • .ProducesValidationProblem() — 入力を検証するエンドポイント用
  • .WithOpenApi() — エンドポイントを OpenAPI 生成の対象にする(グローバルで有効になっていない場合)

Minimal API の GET エンドポイントの例:

group.MapGet("/", async (TodoDbContext db) =>
        await db.TodoItems.ToListAsync())
    .WithName("GetAllTodoItems")
    .WithTags("TodoItems")
    .WithDescription("Returns all todo items")
    .Produces<List<TodoItem>>(StatusCodes.Status200OK);
ステップ 5:Entity Framework をセットアップする(該当する場合)

スキャフォールディングの依頼に Entity Framework が関係しない場合は、このステップをスキップします。

  • Program.cs でデータベースにシードデータを追加しないでください — 常にマイグレーションを使用します
  • dotnet ef には、ローカルのツールマニフェストから dotnet tool restore を使用することを優先します。マニフェストが存在しない場合に限り、グローバルにインストールします
  • ナビゲーションプロパティと外部キーについてモデルを調べます。参照先エンティティ用の CRUD エンドポイント/ページがあることを確認します
  • API スキャフォルダーの場合:.http ファイルでは、子エンティティより先に親エンティティを作成する必要があります。作成順序と整合する FK 値を使用します
ステップ 6:.http ファイルを生成する(API スキャフォルダーのみ)

API 以外のスキャフォルダーでは、このステップをスキップします。

  1. プロジェクトディレクトリに {ModelName}.http という名前の .http ファイルを作成します。同名のファイルが存在する場合は、一意になるまで数値のサフィックス(Product2.http、Product3.http)を追加します
  2. 親エンティティ/従属エンティティ用のエンドポイントを含め、スキャフォールディングしたすべての CRUD エンドポイント向けのサンプルリクエストを記述します
  3. すべてのリクエストは、実際にマッピングされたエンドポイントに対応する正しい URL パスを指定する必要があります
  4. リクエストのラベルは、処理内容を正確に表す必要があります(例:「カテゴリを作成」はカテゴリのエンドポイントに POST する必要があります)
  5. 依存関係に沿ってリクエストを並べます。子エンティティより先に親エンティティを作成します
  6. 可能であれば、HTTP クライアントの変数/テンプレート機能を使って親エンティティ作成レスポンスから ID を取得し、子エンティティの POST ペイロードの外部キー値として再利用します
  7. クライアントでレスポンス値を取得できない場合は、親エンティティ作成リクエストの実行後にどの FK ID を更新する必要があるか、コメントで示します。リクエストの実行時に実在する親レコードと一致しない、現実的でないプレースホルダー値や仮定の FK 値を残さないでください
ステップ 7:検証する
  1. プロジェクトディレクトリで dotnet restore && dotnet build を実行します
  2. Entity Framework を使用しており、今回が最初の検証の場合:
    • dotnet ef migrations add InitialCreate を実行します
    • dotnet ef database update を実行します
    • これを複数回実行する場合、EF Core ではマイグレーション名を一意にする必要があるため、InitialCreate を別の名前に変更する必要があります
  3. API スキャフォルダーの場合:
    • Properties/launchSettings.json を確認します — https という名前のプロファイルがある場合は、dotnet run --launch-profile https を使用します
    • すべての .http リクエストを依存関係順に、1 件ずつ実行します
    • 各リクエストについて、メソッド、URL、ステータスコードを報告します
    • 2xx 以外のレスポンスが返された場合は停止して修正します
  4. ビルドがエラーなしで成功するまで、すべてのエラーを修正します

検証

  • 生成されたすべてのファイルが、プロジェクトで既に使用されている CSS フレームワークと規約に準拠している
  • dotnet build がエラー 0 件で成功する
  • EF マイグレーションが問題なく適用される(該当する場合)
  • すべての .http リクエストが 2xx ステータスコードを返す(API スキャフォルダーの場合)
  • 禁止されたパッケージ(RuntimeCompilation など)が追加されていない
  • CLI スキャフォールディングツールが実行されていない
  • Blazor の [SupplyParameterFromForm] プロパティで = new() が使われている(Blazor スキャフォルダーの場合)

よくある問題

問題解決策
生成された UI がプロジェクトの CSS フレームワークと一致しないコードを生成する前に、必ずレイアウトファイルと CSS ファイルを確認してください(ステップ 2)
Blazor の EditForm が初回の GET でクラッシュする[SupplyParameterFromForm] プロパティには null! ではなく = new() を使用してください
親エンティティの CRUD が不足しているため EF のマイグレーションが失敗するリクエストで外部キーについて言及されている場合は、外部キーに依存するエンティティの CRUD をスキャフォールディングしてください
.http ファイルの外部キー値が正しくない依存関係に沿ってリクエストを並べ、作成順序に合った値を使用してください
dotnet ef が見つからないまず dotnet tool restore を試してください。グローバルインストールは、代替手段としてのみ使用してください
不要なパッケージが追加されているスキャフォールディングした機能に明示的に必要なパッケージのみ追加してください
生成されたコードの命名規則が異なる生成前に既存のプロジェクトファイルを確認し、命名パターンを合わせてください

参考資料

コメント