XMLは手頃なDSLです
概要
- IRSが新しい**Tax Withholding Estimator (TWE)**をリリース
- TWEはオープンソースで、初めて一般からの貢献を受け入れ
- XMLによる宣言的な仕様で税計算ロジックを記述
- Fact Graphエンジンを利用し、計算の透明性と追跡性を実現
- JSONよりもXMLが適している理由を解説
IRS新Tax Withholding Estimator (TWE)の概要
- 2026年3月13日、IRSが新しい**Tax Withholding Estimator (TWE)**を発表
- TWEは無料かつオープンソース、初めて一般からのコントリビューションも歓迎
- 利用者は収入や控除額などを入力し、年末の納税額を推定・給与天引き額を調整可能
- TWE開発を通じて得られたパブリックセクターソフトウェア開発の知見の共有
- 本記事は個人の立場で執筆、公式見解ではない点を明記
XMLの再評価とFact Graphの仕組み
- XMLは古臭い・冗長との評価が多いが、宣言的な仕様言語として現代でも有用
- Fact Graphは、税法を**Fact Dictionary(事実辞書)**としてXMLで記述し、依存関係をもとに計算
- 例:/totalOwedは/totalTaxから/totalPaymentsを引いた値として定義
- XML例:
<Fact path="/totalOwed"> <Derived> <Subtract> <Minuend> <Dependency path="/totalTax"/> </Minuend> <Subtrahends> <Dependency path="/totalPayments"/> </Subtrahends> </Subtract> </Derived> </Fact>
- XML例:
- 冗長だが構造が明快で、数式の意味を直感的に把握可能
具体的なXML定義例とその意義
- リファンダブルクレジット(還付可能税額控除)は複数の控除を合算
- ノンリファンダブルクレジットは税額をゼロまで減らせるが、マイナスにはならない
- <GreaterOf>演算子で「ゼロまたは差額の大きい方」を選択
- 入力値は<Writable>で定義、金額なら<Dollar/>, 真偽値なら<Boolean/>を指定
- Fact同士の依存関係により、最終的な税額を導出
宣言的仕様のメリット
- JavaScriptなどの命令型言語では計算過程や中間値が失われやすい
- 例:const totalOwed = totalTax - totalPayments
- 宣言的なFact Graphでは「何をどう計算するか」のみ記述し、計算順序や実装詳細を意識しない
- 監査性・追跡性が高く、「なぜその値になったか」を容易に説明・検証可能
- 例:TurboTaxの“Tax Knowledge Graph”も同様の思想だが、IRSのFact Graphはオープンソースかつパブリックドメイン
- 複雑な税制ロジックの透明性・拡張性を確保
XMLとJSONの比較
- 計算ロジックの宣言的表現にはXMLが適している
- JSONはデータ転送や設定ファイルには良いが、複雑なDSL(ドメイン固有言語)には不向き
- XMLは階層構造・拡張性に優れ、Fact Graphのような複雑な依存関係を扱う用途に最適
- JSONによる同等の記述は冗長で可読性が低下しやすい
まとめ:パブリックセクター開発におけるXMLの意義
- 税制のような複雑なビジネスロジックは宣言的DSLで明示的に表現すべき
- XMLベースのFact Graphは、拡張性・透明性・監査性が高い
- オープンソース化により、誰でも仕様を確認・拡張・修正可能
- 今後の公共ITシステム開発において、XMLと宣言的設計思想の活用が期待