Skip to main content
Glama
peopleworks

xaf-logic-explainer

XAF Logic Explainer

CI License: MIT NuGet CLI NuGet Core NuGet MCP .NET 10 MCP registry Available on CodeGuilds Listed on Glama XAF GitHub stars

あなたのAIコーディングエージェントに、あなたの XAFアプリケーションが実際に何をするかを教えてください。

動作を確認する →

XAFモジュールを指定します。エンティティ、コントローラー、アクション、ビジネスルール、ナビゲーション、Model Editorのカスタマイズをソースから直接読み取り、その結果をあなたがコードを書く任意のエージェントに渡します。


なぜこれが存在するのか

DevExpressは、AIエージェントがXAFに精通するようにする優れた作業を行ってきました。すでに2つのツールが存在し、これが3つ目です。

エージェントに教えること…

ツール

XAFがどのように機能するか全般

DevExpress agent-skills

公式ドキュメントの内容

DevExpress Docs MCP Server

あなたのアプリケーションの動作

XAF Logic Explainerここにいます

XAFドキュメントのすべてのページを読んだエージェントでも、あなたのInvoiceの合計が明細行から計算されること、ApproveControllerが期間が閉じているときに実行を拒否すること、またはModel Editorで3つの列が非表示にされていてどのC#ファイルにも現れないことを知りません。エージェントはこれら3つすべてを自信を持って捏造します。

そのギャップは、より良いプロンプトでは解決できません。抽出によって解決可能です。

これらのツールは組み合わせて使用します。 フレームワークの知識にはDevExpressのスキルをインストールし、公式リファレンスにはDocs MCPを使用し、独自のコードベースにはこれを使用します。どれも他のものを置き換えるものではありません。

Related MCP server: DevScope MCP

抽出するもの

以下はすべて、Roslynを使用して構文として読み取られます。プロジェクトをコンパイルする必要はなく、このツールはDevExpressアセンブリにリンクすることはありません。

  • エンティティ — プロパティ、型、関連付け、およびそれらに意味を与えるXAF属性([Association][Aggregated][RuleRequiredField][Appearance][ModelDefault]、…)。XPOおよびEF Coreusingステートメントから自動検出されます。

  • コントローラーとアクションSimpleActionPopupWindowShowActionSingleChoiceAction、それらのターゲット条件、および実行時に起動するハンドラコード。

  • ビジネスルール — 検証属性とコードルール、およびそれらに付随する条件。

  • モジュールセットアップModuleUpdaterのシードデータと初回実行時に作成されるもの。

  • ナビゲーション — ユーザーが実際に表示するグループとアイテム。

  • Model Editor(.xafmlXMLのみに存在し、C#を読む人には見えないカスタマイズ。モジュールファイルとプラットフォームファイルは、XAFがマージする方法でマージされます。

  • カスタムプロパティエディターとリストエディター — 動作に不可欠なJavaScript、および実行時にView.CustomizeViewItemControl<T>()を通じて再設定されるビルトインエディターを含みます。これらはモジュールのにあるプラットフォームプロジェクトに存在するため、ビジネスオブジェクトを読む人は誰もそれらに遭遇しません。

  • バージョンゲート付きマイグレーション — アップデータ内のCurrentDBVersion < new Version(…)ブロック。各ブロックはデータベースごとに最大1回実行され、現在のコードでは説明できないデータの唯一の説明です。

  • すべての画面と、それに読み込まれるもの — 以下を参照。

これらが、すべてのビジネスクラスを読んだエージェントがそれでもアプリケーションについて自信を持って間違う理由です。

この画面を開いたときに何が実行されるか

XAFリポジトリ内の何もそれに答えません。そして、両方の半分が異なる理由で欠落しています。

画面自体はどのファイルにもありません。 XAFはすべてのビジネスクラスに対してリストビュー、詳細ビュー、ルックアップビューを生成し、さらにすべてのコレクションに対してリストビューを生成します。Model Editorは誰かが変更したものだけを保存します。ソース内でPatient_Prescriptions_ListViewをgrepしても何も見つかりません。それは欠落している証拠ではありません。

どのコントローラーがそこで実行されるかは実行時に決定されます。XAFがAND条件で結合する4つの条件(ネスト、ビュータイプ、オブジェクトタイプ、ビューID)によって決まります。各条件は設定されていない場合は無制限であるため、どれも設定しないコントローラーは、あなたの持つすべての画面に読み込まれます。

これは、ViewController.IsFitToViewがそれらを評価する方法で4つすべてを読み取り、フレームワーク自身のIDジェネレーターから構築されたビューインベントリと照合し、各一致の理由を記録するため、答えを信頼するのではなく確認できます。

2つの層は分離されています。チームが書いたものは完全な処理を受けます。XAFが提供するものは1行の背後に折りたたまれています。なぜなら、それは大量にあり、変更するものではないからです。グラウンドトゥルースカタログを使用すると、名前も付けられます — 実際に登録するモジュールにスコープが限定されるため、WinFormsコントローラーがBlazor画面に表示されることはありません。

主張しないこと:ここにリストされているコントローラーは、データとユーザーに依存するActive["reason"]を通じて自身をオフにすることができます。これはXAFが画面に読み込むものであり、必ず何かをするものではありません。ソースから読み取れなかったものは、理由とともに別途リストされ、静かに「どこでも実行される」として扱われることはありません。

クイックスタート

dotnet tool install -g XafLogicExplainer.Cli

xaflogic agents --project "C:\MySolution\MyApp.Module"

これにより、ソリューションルートにAGENTS.mdCLAUDE.md.github/copilot-instructions.mdが書き込まれます。アカウントもAPIキーもサーバーも不要です。エージェントは次の質問でアプリケーションを理解します。

書き込むもの、そしてなぜ2つに分割されているのか

AGENTS.mdは、エージェントがリポジトリで行うすべてのリクエストの前に追加されるため、そのコストは永久に支払われます。そこに70KBのエンティティ詳細をダンプすると、実際の質問が押しのけられます。そのため、出力は階層化されています。

AGENTS.md

~11 KB

常に読み込まれる:基本ルール、完全なインベントリ、規約、レシピ

.xaflogic/*.md

~70 KB

オンデマンドで開かれる:完全なプロパティ、ハンドラコード、ルールメッセージ、.xafml

最も価値のある部分は最小です。AGENTS.md基本ルールで始まります — このアプリケーションはXPOを使用し、EF Coreは使用しないこと、インベントリは完全であるため、存在しないものは本当に存在しないこと、一部の動作はC#ではなくModel Editorに存在すること。これらの数段落で、エージェントが不慣れなXAFコードベースについて生成する自信に満ちた捏造のほとんどを防ぎます。

既存のファイルは決して上書きされません。生成されたテキストはマーカーの間に存在し、手書きで書いたものは保持され、再生成は何も変更されていない場合にバイト単位で同一です。

またはエージェントに直接質問させる

生成されたファイルはスナップショットです。MCPサーバーはライブ接続であり、エージェントは作業中にアプリケーションにクエリを実行し、古くなることはありません。

/plugin marketplace add peopleworks/XAFLogicExplainer
/plugin install xaf-logic-explainer@peopleworks-xaf

これにより、スキルとMCPサーバーが1ステップでインストールされます。他のMCPクライアントの場合は、インストールなしでNuGetから直接実行するか、

{
  "mcpServers": {
    "xaf": { "command": "dnx", "args": ["XafLogicExplainer.Mcp", "--yes"] }
  }
}

…またはすでに持っているCLIを指定します:

{ "mcpServers": { "xaf": { "command": "xaflogic", "args": ["mcp"] } } }

ソリューションディレクトリから起動すると、XAFモジュールを自動的に見つけるため、どちらの形式でもパスは必要ありません。

ツール

回答内容

xaf_overview

このアプリケーションの概要と、その中にあるすべての完全なリスト

xaf_search

フィールド、概念、ビジネス用語が定義されている場所

xaf_entity

1つのエンティティに関するすべてのプロパティ、リレーションシップ、ルール、計算

xaf_controller

アクションが何を行うか — 発火時に実行されるC#コードを含む

xaf_rules

アプリケーションが検証、計算、非表示、無効化するもの

xaf_model

モデルエディタのカスタマイズ(C#ファイルには存在しないもの)

xaf_editors

カスタムエディタ、それらが必要とするJavaScript、および実行時に変更される組み込みエディタ

xaf_migrations

実稼働データベースに対して一度だけ実行されたものと、その理由を説明するコメント

xaf_view

1つの画面にロードされるすべて — どのコントローラーがアクティブになるか、その理由

xaf_refresh

ソースを再読み込み(変更は自動検出されます)

存在しないものを尋ねると、その回答が役立ちます:

このアプリケーションには「PurchaseOrder」というエンティティは存在しません。 以下は、ソースツリー全体から抽出された19個のエンティティの完全なリストです:… ユーザーが「PurchaseOrder」の存在を期待している場合、それはまだ作成されていません。

公式のDevExpressスキルと組み合わせて使用します。 /plugin install dx-xaf@DevExpress-agent-skills はXAFの仕組みを教えます。こちらはアプリケーションが何を行うかを教えます。最初のスキルだけを持つエージェントは、存在しないエンティティに対して正しいXAFコードを書いてしまいます。

同じ知識を、人間向けに

エージェントはAGENTS.mdを読むか、MCPサーバーにクエリを送信します。10年前のXAFアプリケーションを引き継いだばかりの人は、まったく異なる形で整理された同じ事実を必要とします:

xaflogic explain --project "C:\MySolution\MyApp.Module" --open

1つのHTMLファイル。サーバー不要、ビルド不要、ネットワークリクエスト不要 — インターネットのないマシン上のメール添付ファイルから開きます。これが実際の引き継ぎの方法です。

これは、コードベース全体に散らばったアソシエーション属性からドメインモデルのマップを描画します。ほとんどのチームは自分のドメインモデルを見たことがありません。それは一人の頭の中に存在し、その人が去るときに失われる知識そのものです。

サンプルXAFアプリケーションのドメインモデル。エンティティにホバーすると、それに触れていないすべてが暗くなり、自身のリレーションシップだけが明るく表示されます。紫色は親を削除すると子も削除されることを示します。

実際の出力。このリポジトリのサンプルアプリケーションから。エンティティにホバーすると、それに触れていないすべてがフェードアウト。紫色は親を削除すると子も削除されることを意味します。

それに加えて:すべてのエンティティと各プロパティの内容、実行されるコードを含むすべてのアクション、ユーザーが実際に目にするメッセージを含む検証、およびC#ファイルには現れないモデルエディタの設定。

そしてアプリケーション内のすべての条件式のインデックス — SQLでもC#でもない方言で、ソース全体に散らばった属性から収集され、他ではどこにも集められていません:

自分のコードに触れずにサンプルで試す:

xaflogic explain --project tests/XafLogicExplainer.Tests/Fixtures/DemoSolution/PharmacyDemo.Module --open

オプション:自分のコードとDevExpressのコードを区別する

抽出は、対象のフレームワークについて何も知らずにソースを読み取ります。そのため、1つの疑問が未解決のまま残ります:DeleteObjectsViewControllerはチームが書いたものか、それともDevExpressが出荷しているものか?答えがなければ、生成されたドキュメントはフレームワークの動作と独自のロジックを同じものとして提示します。

DevExpressライセンスをお持ちの場合:

xaflogic catalog build

これにより、自身のインストールを読み取り、XAF自体が提供するもの(属性、コントローラー、モデルインターフェース、モジュール)を、DevExpressが出荷する公式の概要とドキュメントリンクとともに記録します。DevExpress 26.1では、約850のフレームワークタイプがあります。

さらにDevExpressのソースコードコンポーネントもインストールしている場合、各フレームワークコントローラーがどこでアクティブになるか — XAFが実行前にチェックする4つの条件 — を記録します。これはアセンブリからは読み取れません。組み込みコントローラーの5分の4は、コンストラクター内でターゲットを設定します。ソースがアセンブリの隣にない場合は、--dx-sources <Components/Sources>を渡してください。

その後、抽出は自動的にそれを取得し、そうでなければ言えないことを言えるようになります:

  • ArchiveControllerは組み込みのDeleteObjectsViewControllerを拡張しています」 — これは、アプリケーション全体で削除の動作を変更しているのであって、その横に機能を追加しているわけではありません。

  • [AuditedByFinance]はXAFや.NETの属性ではありません」 — チームが発明したものであり、その意味はこのコードベースにのみ存在し、どのドキュメントにもありません。

  • 「この画面にはさらに32のフレームワークコントローラーがロードされます」 — 名前付きで、それぞれの機能と、アプリケーションが実際に登録するモジュールにスコープされているため、WinFormsコントローラーがBlazor画面に表示されることはありません。

カタログは~/.xaflogic/catalog/に書き込まれ、決してリポジトリには書き込まれません。これはライセンスソフトウェアから派生したものです。カタログがなくてもすべて動作します — 出力をより鮮明にするだけです。NOTICE.mdを参照してください。

コマンド

コマンド

機能

agents

エージェント用のAGENTS.md / CLAUDE.md / Copilot指示を書き込みます

mcp

MCPサーバーとして実行し、エージェントがアプリケーションをライブでクエリできるようにします

explain

アプリケーションを人間に説明する自己完結型HTMLページを書き込みます

catalog

DevExpressのグラウンドトゥルースカタログを構築します(buildstatus

extract

プロジェクトを読み取り、Markdown + JSONをローカルに書き込みます

diff

前回の抽出と比較し、変更点を報告します

status

変更検出ハッシュを表示し、再抽出が必要かどうかを示します

watch

ファイル変更時に再抽出(デバウンス付き)

sync

抽出してリモートターゲットに公開します

chat

抽出されたプロジェクトについて質問します

config

~/.xaflogic/config.jsonにデフォルトを設定します

projects

複数のXAFプロジェクトを管理します。ほとんどのコマンドは--allを受け入れます

ドキュメントは英語またはスペイン語で生成されます(--lang en|es)。

便利なフラグ:--orm auto|xpo|efcore--lang en|es--enrich(コントローラーとアクションごとにAI生成のビジネスロジックサマリー)、--force--all

--enrichにはモデルが必要で、以下のいずれかで十分です — コマンドラインのキーが優先され、次に環境変数、最後にPeopleWorks Copilotアカウント(お持ちの場合):

xaflogic extract --enrich --api-key sk-...              # or any OpenAI-compatible endpoint:
xaflogic extract --enrich --api-key ... --ai-base-url http://localhost:11434/v1 --ai-model qwen2.5-coder

export OPENAI_API_KEY=sk-...        # picked up with no configuration at all
export ANTHROPIC_API_KEY=sk-ant-...

このツールの他のすべては、キー、アカウント、ネットワークなしで動作します。

抽出はインクリメンタルです — .csおよび.xafmlファイルに対するSHA-256により、変更のないプロジェクトは何も行いません。ビルド時に実行したい場合のMSBuild .targetsファイルもあります。

ステータス

v0.14.0。 抽出エンジンは成熟した部分です。実際のXAFアプリケーションに対して本番環境で動作しています。エージェント向けのインターフェースは現在、公開で導入されている部分です。

Roslyn抽出 — エンティティ、コントローラー、ルール、アップデータ、ナビゲーション、.xafml

XPOおよびEF Core、自動検出

カスタムプロパティエディタとリストエディタ、そのクライアントアセット、および実行時に再構成された組み込みエディタ

バージョンゲートされたデータマイグレーション — 新しいデータベースでなかったものに何が起こったか

インクリメンタル変更検出、差分レポート、マルチプロジェクト、ウォッチモード

コントローラーとアクションのAIエンリッチメント(--enrich

Blazorアプリ内ヘルプパネル

AGENTS.md / CLAUDE.md / Copilot指示 — インフラ不要、全員に機能します

xaflogic explain — 自己完結型HTMLページ1つ、エージェントではなく人間向け

プラグイン可能な公開ターゲット(IDocumentationSink

MCPサーバー — 10のツール、ソースに対してライブで動作

インストール可能なClaude Codeプラグイン(スキルとMCPサーバー付き)

345のテスト(合成XPOおよびEF Coreフィクスチャ上) — DevExpress不要

DevExpressグラウンドトゥルースカタログ、ライセンシーがローカルで生成可能

PeopleWorks Copilot(このツールが育った場所)は、今ではすべてが中心に構築されていた宛先ではなく、複数のシンクの1つです。最も重要な出力にはサーバーがまったく必要ありません。

詳細版

XAFアプリケーションの動作の3分の1がビジネスクラスの外に存在する理由、それが隠れる4つの場所、そして抽出された出力が実際にどのように見えるか:

それぞれが他から翻訳されるのではなく、それぞれの言語で書かれています。ソースはdocs/Blog/にあります。

リポジトリ構成

src/
  XafLogicExplainer.Core                 Roslyn extraction engine — no DevExpress reference
  XafLogicExplainer.Mcp                  MCP server (ModelContextProtocol 2.1)
  XafLogicExplainer.Cli                  the `xaflogic` command
  XafLogicExplainer.CopilotSync          PeopleWorks Copilot target + AI enrichment
  XafLogicExplainer.DescriptionAnnotator generates missing [Description] attributes
  XafLogicExplainer.Blazor               in-app help panel for XAF Blazor apps
plugins/
  xaf-logic-explainer                    the installable Claude Code plugin

.NET 10上に構築されています。

XafLogicExplainer.BlazorのみがDevExpressパッケージを参照します。ビルドにはDevExpress NuGetフィードとライセンスが必要です。他のすべてはどこでもビルドできるため、CIは無料で検証できます。

コントリビューション

最も価値のあるコントリビューションは、抽出ツールが見逃したものを教えていただくことです。XAFは非常に大きく、コードベースごとに異なる部分を使用しており、単一のプロジェクトでフレームワーク全体を網羅することはできません。このための抽出ギャップ issue テンプレートがあります:プロジェクトで使用しているXAFパターンと、ツールが認識できなかったものを示してください。

CONTRIBUTING.mdを参照してください。バグ報告、ドキュメント、翻訳はすべて歓迎します。

ライセンス

MIT。DevExpressとの関係についてはNOTICE.mdを参照してください。

独立したコミュニティプロジェクトです — Developer Express Inc.とは提携、承認、サポート関係にありません。DevExpressのソースコードは含まれておらず、ビルドや実行にDevExpressライセンスは必要ありません。DevExpressXAFeXpressApp FrameworkはDeveloper Express Inc.の商標です。

Pedro Hernández(PeopleWorks)、[Microsoft MVP for .NET](https://mvp.microsoft.com/en-US/mvp/profile/24060a02-dbc6-44ec-bca5-c213ff9835c5)によって構築されました — DevExpressおよびXAFコミュニティのために。

A
license - permissive license
A
quality
A
maintenance

Maintenance

UpdatingMaintainers
UpdatingResponse time
1dRelease cycle
10Releases (12mo)
Commit activity

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Code context for AI coding agents. Progressive, on-demand access to your internal .NET / NuGet package source — agents browse, search, and read private C# libraries autonomously, with zero workspace pollution.
    2
    54
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Extracts deterministic architecture maps from codebases for AI agents, enabling queries about blast radius, routes, security findings, and production readiness without sending code anywhere.
    6
    MIT

View all related MCP servers

Related MCP Connectors

  • Give your AI agent a persistent map of your project's structure, dependencies, and bugs.

  • AI Agent with Architectural Memory. Impact analysis (free), tests and code from the graph (pro).

  • End-to-end agent-managed company brain. Docs, diagrams, plans, Knowledge Graph. Lean & affordable.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/peopleworks/XAFLogicExplainer'

If you have feedback or need assistance with the MCP directory API, please join our Discord server