xaf-logic-explainer
XAF Logic Explainer
あなたのAIコーディングエージェントに、あなたの XAFアプリケーションが実際に何をするかを教えてください。
XAFモジュールを指定します。エンティティ、コントローラー、アクション、ビジネスルール、ナビゲーション、Model Editorのカスタマイズをソースから直接読み取り、その結果をあなたがコードを書く任意のエージェントに渡します。
なぜこれが存在するのか
DevExpressは、AIエージェントがXAFに精通するようにする優れた作業を行ってきました。すでに2つのツールが存在し、これが3つ目です。
エージェントに教えること… | ツール |
XAFがどのように機能するか全般 | |
公式ドキュメントの内容 | |
あなたのアプリケーションの動作 | 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 Core、usingステートメントから自動検出されます。コントローラーとアクション —
SimpleAction、PopupWindowShowAction、SingleChoiceAction、それらのターゲット条件、および実行時に起動するハンドラコード。ビジネスルール — 検証属性とコードルール、およびそれらに付随する条件。
モジュールセットアップ —
ModuleUpdaterのシードデータと初回実行時に作成されるもの。ナビゲーション — ユーザーが実際に表示するグループとアイテム。
Model Editor(
.xafml) — XMLのみに存在し、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.md、CLAUDE.md、.github/copilot-instructions.mdが書き込まれます。アカウントもAPIキーもサーバーも不要です。エージェントは次の質問でアプリケーションを理解します。
書き込むもの、そしてなぜ2つに分割されているのか
AGENTS.mdは、エージェントがリポジトリで行うすべてのリクエストの前に追加されるため、そのコストは永久に支払われます。そこに70KBのエンティティ詳細をダンプすると、実際の質問が押しのけられます。そのため、出力は階層化されています。
| ~11 KB | 常に読み込まれる:基本ルール、完全なインベントリ、規約、レシピ |
| ~70 KB | オンデマンドで開かれる:完全なプロパティ、ハンドラコード、ルールメッセージ、 |
最も価値のある部分は最小です。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モジュールを自動的に見つけるため、どちらの形式でもパスは必要ありません。
ツール | 回答内容 |
| このアプリケーションの概要と、その中にあるすべての完全なリスト |
| フィールド、概念、ビジネス用語が定義されている場所 |
| 1つのエンティティに関するすべてのプロパティ、リレーションシップ、ルール、計算 |
| アクションが何を行うか — 発火時に実行されるC#コードを含む |
| アプリケーションが検証、計算、非表示、無効化するもの |
| モデルエディタのカスタマイズ(C#ファイルには存在しないもの) |
| カスタムエディタ、それらが必要とするJavaScript、および実行時に変更される組み込みエディタ |
| 実稼働データベースに対して一度だけ実行されたものと、その理由を説明するコメント |
| 1つの画面にロードされるすべて — どのコントローラーがアクティブになるか、その理由 |
| ソースを再読み込み(変更は自動検出されます) |
存在しないものを尋ねると、その回答が役立ちます:
このアプリケーションには「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" --open1つのHTMLファイル。サーバー不要、ビルド不要、ネットワークリクエスト不要 — インターネットのないマシン上のメール添付ファイルから開きます。これが実際の引き継ぎの方法です。
これは、コードベース全体に散らばったアソシエーション属性からドメインモデルのマップを描画します。ほとんどのチームは自分のドメインモデルを見たことがありません。それは一人の頭の中に存在し、その人が去るときに失われる知識そのものです。

実際の出力。このリポジトリのサンプルアプリケーションから。エンティティにホバーすると、それに触れていないすべてがフェードアウト。紫色は親を削除すると子も削除されることを意味します。
それに加えて:すべてのエンティティと各プロパティの内容、実行されるコードを含むすべてのアクション、ユーザーが実際に目にするメッセージを含む検証、および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を参照してください。
コマンド
コマンド | 機能 |
| エージェント用の |
| MCPサーバーとして実行し、エージェントがアプリケーションをライブでクエリできるようにします |
| アプリケーションを人間に説明する自己完結型HTMLページを書き込みます |
| DevExpressのグラウンドトゥルースカタログを構築します( |
| プロジェクトを読み取り、Markdown + JSONをローカルに書き込みます |
| 前回の抽出と比較し、変更点を報告します |
| 変更検出ハッシュを表示し、再抽出が必要かどうかを示します |
| ファイル変更時に再抽出(デバウンス付き) |
| 抽出してリモートターゲットに公開します |
| 抽出されたプロジェクトについて質問します |
|
|
| 複数のXAFプロジェクトを管理します。ほとんどのコマンドは |
ドキュメントは英語またはスペイン語で生成されます(--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抽出 — エンティティ、コントローラー、ルール、アップデータ、ナビゲーション、 |
✅ | XPOおよびEF Core、自動検出 |
✅ | カスタムプロパティエディタとリストエディタ、そのクライアントアセット、および実行時に再構成された組み込みエディタ |
✅ | バージョンゲートされたデータマイグレーション — 新しいデータベースでなかったものに何が起こったか |
✅ | インクリメンタル変更検出、差分レポート、マルチプロジェクト、ウォッチモード |
✅ | コントローラーとアクションのAIエンリッチメント( |
✅ | Blazorアプリ内ヘルプパネル |
✅ |
|
✅ |
|
✅ | プラグイン可能な公開ターゲット( |
✅ | 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ライセンスは必要ありません。DevExpress、XAF、eXpressApp 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コミュニティのために。
Maintenance
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables AI-assisted X++ development for Dynamics 365 Finance and Operations by pre-indexing the entire codebase and providing 54 specialized tools for metadata lookup, code generation, and best practice validation.23326136MIT
- AlicenseNot gradedqualityAmaintenanceProvides project context for AI agents in VS Code by analyzing technologies, structure, AGENTS.md rules, current branch, and source code without allowing arbitrary commands.MIT
- AlicenseAqualityDmaintenanceCode 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.254MIT
- AlicenseAqualityCmaintenanceExtracts deterministic architecture maps from codebases for AI agents, enabling queries about blast radius, routes, security findings, and production readiness without sending code anywhere.6MIT
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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