mcpField
E
efcore-d2-db-diagram

efcore-d2-db-diagram

github.com/githubデータ・データベース40.5k59 回インストール今日更新
リポジトリ

efcore-d2-db-diagram について

efcore-d2-db-diagramは、Entity Framework CoreプロジェクトからD2データベース図を作成するスキルです。EFのマッピングやマイグレーションを調べ、d2 CLIで描画できる図のソースを生成する手順を案内します。

主な機能

  1. 01EF Coreのマッピングとマイグレーションの調査
  2. 02キーとリレーションの表現
  3. 03インデックスと所有型の反映
  4. 04生成前の図の設定確認
  5. 05D2出力の検証と描画

活用シーン

  1. 01EF Coreデータベースモデルの文書化
  2. 02エンティティの関係とキーの可視化
  3. 03SVGやPNGに描画するD2図の生成

MCP 対応

このスキルにMCPサーバーは不要です。d2 CLIで描画できるD2ソースをテキストとして生成します。

インストール

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

$npx skills add https://github.com/github/awesome-copilot --skill efcore-d2-db-diagram

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
d2-erd-style.md
efcore-model-extraction.md
grouping-modes.md
quality-gate.md
relationship-rules.md

詳細

EF Core D2 データベース図ジェネレーター

使用する場面

ユーザーが Entity Framework Core のコードベースからデータベース/ERD 図の生成を求めている場合に、このスキルを使用します。

一般的な依頼の例:

  • EF Core のエンティティから D2 データベース図を生成する。
  • テーブル、列、主キー、外部キー、リレーションシップを可視化する。
  • DbContext、DbSet<T>、IEntityTypeConfiguration<T>、Fluent API、マイグレーションを分析する。
  • d2 CLI で SVG/PNG にレンダリングできる .d2 ファイルを作成する。
  • ASP.NET Core/.NET プロジェクトのデータベースモデルを文書化する。

目標

C# クラスの形状だけでなく、実際の EF Core の永続化モデルを反映した、読みやすい D2 のエンティティ・リレーションシップ図を作成します。

図では、次の項目を優先します。

  1. データベースのテーブルとリレーションシップ。
  2. 主キー、外部キー、必須/任意の列。
  3. 所有型と値オブジェクト。
  4. 多対多のリレーションシップと結合テーブル。
  5. インデックス、一意制約、テーブル名。
  6. 明示的なマッピングがない場合に限り、EF Core の規約。

出力は .d2 のソースコードです。d2 CLI を使用して SVG または PNG にレンダリングできます。

ツール

  • d2 CLI:.d2 ファイルを SVG/PNG にレンダリングします。
    • d2 input.d2 output.svg
    • d2 --layout=elk input.d2 output.svg
  • d2 fmt:D2 ファイルを整形します。
    • d2 fmt input.d2
  • MCP サーバーは不要です。このスキルは D2 のソースコードをテキストとして生成します。

推奨ワークフロー

  1. EF Core プロジェクトの構成を確認します。
  2. すべての DbContext クラスを特定します。
  3. すべての DbSet<T> 宣言を特定します。
  4. エンティティクラス、所有型、列挙型、値オブジェクトを特定します。
  5. OnModelCreating とすべての IEntityTypeConfiguration<T> クラスを確認します。
  6. テーブル名、結合テーブル、インデックス、削除動作を確認するため、利用可能な場合はマイグレーションを確認します。
  7. D2 を記述する前に、正規化されたデータベースモデルを構築します。
  8. 生成前に必須の図に関する質問を行います。
  9. 生のクラスのネストではなく、データベースモデルを使って .d2 ファイルを生成します。
  10. 納品前に d2 fmt で D2 の構文を検証します。
  11. 可能であれば d2 --layout=elk schema.d2 schema.svg でレンダリングします。
  12. 再生成する場合は、まず EF Core のマッピングとマイグレーションを再確認します。

図の生成前に必ず確認する質問

新しい図を生成する場合と再生成する場合は、ユーザーが同じ依頼内ですでに回答している場合を除き、毎回次の質問をします。

  1. どの DbContext を図にしますか?(自動検出/すべて/特定の名前)
  2. 列を表示しますか?(すべて/キーのみ/なし)
  3. 列の型を表示しますか?(はい/いいえ)
  4. NULL 許容/必須を示すマーカーを表示しますか?(はい/いいえ)
  5. インデックスと一意制約を表示しますか?(はい/いいえ)
  6. 列挙型の値を表示しますか?(はい/いいえ)
  7. 所有型を表示しますか?(インライン/個別/非表示)
  8. 多対多の結合テーブルを表示しますか?(明示/コンパクト/非表示)
  9. 監査用/技術用テーブルを表示しますか?(はい/いいえ)
  10. エンティティとして存在しない、マイグレーションのみのテーブルを表示しますか?(はい/いいえ)
  11. どのグループ化モードを使用しますか?(境界づけられたコンテキスト/スキーマ/名前空間/フラット)
  12. どのレイアウトエンジンを使用しますか?(elk/dagre/tala)
  13. どの出力形式を使用しますか?(d2/svg/png)

簡易生成を依頼された場合のデフォルト値:

  • DbContext:auto-detect
  • 列:key-only
  • 列の型:Yes
  • NULL 許容マーカー:Yes
  • インデックス:Yes
  • 列挙型:No
  • 所有型:inline
  • 結合テーブル:explicit
  • 監査用/技術用テーブル:No
  • マイグレーションのみのテーブル:Yes
  • グループ化:bounded-context
  • レイアウト:elk
  • 出力:d2

リファレンス文書

必要に応じて、次の文書を読み込みます。

リファレンス読み込むタイミング
references/efcore-model-extraction.mdDbContext、DbSet、Fluent API、構成、マイグレーションの読み取りルールを確認するとき
references/d2-erd-style.mdERD 図の D2 構文と視覚的な規約を確認するとき
references/relationship-rules.md1 対 1、1 対多、多対多、所有リレーションシップの推論方法を確認するとき
references/grouping-modes.md境界づけられたコンテキスト、スキーマ、名前空間、フラットの各グループ化ルールを確認するとき
references/quality-gate.md生成した図を納品する前の最終チェックリストを確認するとき

EF Core の抽出ルール

ソースの優先順位

ソース間で食い違いがある場合は、次の優先順位を使用します。

  1. 最新の適用済みマイグレーション/マイグレーションスナップショット。
  2. OnModelCreating または IEntityTypeConfiguration<T> の Fluent API 設定。
  3. データアノテーション。
  4. EF Core の規約。
  5. 生の C# クラス構造。
検出が必要な EF Core の概念

次の項目を検出して表現します。

  • DbContext と DbSet<T>。
  • エンティティクラス名と、ToTable による実際のテーブル名。
  • ToTable("Table", "schema") によるスキーマ名。
  • HasKey、[Key]、規約、マイグレーションから取得した主キー。
  • 複合キー。
  • HasForeignKey、ナビゲーションプロパティ、マイグレーション操作から取得した外部キー。
  • 明示されている場合の削除動作:Cascade、Restrict、NoAction、SetNull、ClientSetNull。
  • 必須/任意のリレーションシップを示すマーカー。
  • OwnsOne、OwnsMany、[Owned] による所有型。
  • UsingEntity と暗黙的な EF Core 結合テーブルによる多対多リレーションシップ。
  • HasIndex、IsUnique、マイグレーションから取得したインデックス。
  • 代替キー(HasAlternateKey)。
  • Fluent API で構成されたシャドウプロパティ。
  • 永続化される型や読みやすさに影響する値変換。
  • 列挙型プロパティ。
  • 無視されるプロパティとエンティティ。

図のレンダリング規則

テーブル

永続化されるテーブルはそれぞれ、可能であれば shape: sql_table の D2 ノードとして表現します。

この内容規約を使用します。

Clients: {
  shape: sql_table
  constraint: primary_key
  Id: uuid {constraint: primary_key}
  Name: text
  Status: enum
}

sql_table が利用できない場合や、検証エラーの原因になる場合は、構造化テキストを含む長方形にフォールバックします。

リレーションシップ

依存テーブルからプリンシパルテーブルへ向かう方向付きエッジを使用します。

ラベルには、リレーションシップの多重度と、判明している場合は FK 名を含めます。

Offers.ClientId -> Clients.Id: "N:1 FK_Offers_Clients_ClientId"

次の多重度ラベルを使用します。

  • 1:1
  • 1:N
  • N:1
  • N:N
  • owned
所有型

所有型は、デフォルトでインライン表示します。

インライン表示の例:

Clients: {
  shape: sql_table
  Id: uuid {constraint: primary_key}
  Address.Street: text
  Address.ZipCode: text
  Address.City: text
}

ユーザーが separate を選択した場合は、所有型を視覚的に従属するテーブルとして表現し、owned リレーションシップを使用します。

多対多

EF Core が実際のテーブルを作成するため、デフォルトでは明示的な結合テーブルを使用します。

暗黙的な多対多リレーションシップの場合は、生成された結合テーブルノードを作成し、implicit join と示します。

技術テーブル

要求されない限り、技術テーブルはデフォルトで非表示にします。

例:

  • __EFMigrationsHistory
  • Hangfire のテーブル
  • ASP.NET Identity のテーブル
  • 監査ログ
  • Outbox テーブル

技術テーブルを非表示にした場合は、図の後の概要でそのことに触れます。

グループ化モード

  • bounded-context:検出したドメイン領域またはフォルダー/モジュールでグループ化します。
  • schema:データベーススキーマ(例:public、auth、billing)でグループ化します。
  • namespace:C# 名前空間でグループ化します。
  • flat:コンテナーを使わず、すべてのテーブルを同じ階層に配置します。

スタイル規則

一貫したスタイルを使用します。

  • 主エンティティのテーブル:実線の枠線。
  • 結合テーブル:破線の枠線。
  • 所有型:薄い線、または入れ子のインラインフィールド。
  • 技術テーブル:控えめなスタイル。
  • 外部テーブルまたはマイグレーションのみに存在するテーブル:点線の枠線。
  • 必須のリレーションシップ:実線。
  • 任意のリレーションシップ:破線。
  • カスケード削除:ラベルの接尾辞 cascade。

提出前の品質確認

図を提出する前に、次の項目を確認します。

  • 選択した DbContext が明確である。
  • すべての DbSet<T> エンティティを検討している。
  • Fluent API の構成を確認している。
  • マイグレーションが存在する場合は確認している。
  • テーブル名とスキーマ名が EF Core のマッピングと一致している。
  • 主キーが含まれている。
  • 外部キーと多重度が表現されている。
  • 所有型がユーザーの選択に従って処理されている。
  • ユーザーが別の方法を求めていない限り、多対多の結合テーブルが明示されている。
  • 非表示の技術テーブルが最終概要に記載されている。
  • d2 fmt で D2 構文が有効である。
  • コンテナー内のエッジ端点が完全なドット表記を使用している。
  • 図が読みやすく、エッジの交差が多いレイアウトを避けている。

出力形式

ユーザーがスキルのインストールを依頼した場合は、次のフォルダー構成を提示します。

.github/
  skills/
    efcore-d2-db-diagram/
      SKILL.md
      references/
        efcore-model-extraction.md
        d2-erd-style.md
        relationship-rules.md
        grouping-modes.md
        quality-gate.md

ユーザーが図の生成を依頼した場合は、次の内容を提示します。

  1. .d2 ソースファイルの内容。
  2. 選択したレイアウトエンジンを使用したレンダリングコマンド。
  3. 前提条件と非表示のテーブルの簡潔な概要。

コメント