Xmloxide: AIエージェント支援で作成されたlibxml2のRust再実装

Xmloxideとは?
Xmloxideは、XMLおよびHTMLドキュメントの解析、作成、操作に広く使用されているCライブラリであるlibxml2を、純粋なRustで再実装したプロジェクトです。このプロジェクトは、libxml2が2025年12月に公式にメンテナンスが停止し、既知のセキュリティ問題が残された後に作成されました。開発者はClaude Codeを使用し、AIエージェントに既存のテストスイートを通過するまで作業させることで、このライブラリを再現しました。
主な機能と能力
- メモリセーフ — アリーナベースのツリー構造で、公開APIにはunsafeコードがゼロ
- 準拠性 — W3C XML適合性テストスイートで100%の合格率(1727/1727の適用可能なテスト)
- エラー回復 — 不正な形式のXMLを解析し、libxml2と同様に使用可能なツリーを生成
- 複数の解析API — DOMツリー、SAX2ストリーミング、XmlReaderプル、プッシュ/インクリメンタル解析
- HTMLパーサー — エラートレラントなHTML 4.01解析で、自動クロージングと空要素に対応
- XPath 1.0 — すべてのコア関数を含む完全な式パーサーと評価器
- 検証 — DTD、RelaxNG、XMLスキーマ(XSD)検証
- 正規XML — C14N 1.0および排他的C14Nシリアライゼーション
- XInclude — ドキュメント包含処理
- XMLカタログ — URI解決のためのOASIS XMLカタログ
- xmllint CLI — XMLの解析、検証、クエリのためのコマンドラインツール
- 可能な限りゼロコピー — 高速比較のための文字列インターニング
- グローバル状態なし — 各ドキュメントは自己完結型でSend + Sync
- C/C++ FFI — C/C++プロジェクトへの組み込み用の完全なC APIとヘッダーファイル(include/xmloxide.h)
- 最小限の依存関係 — encoding_rsのみ(ライブラリ自体の依存関係はゼロ;clapはCLI専用)
パフォーマンスと互換性
ほとんどの解析操作ではlibxml2と同等のパフォーマンスで、シリアライゼーションでは優れています。このライブラリは互換性スイートとW3C XML適合性テストスイートの両方を通過しています。
コード例
基本的な解析:
use xmloxide::Document;
let doc = Document::parse_str("<root><child>Hello</child></root>").unwrap();
let root = doc.root_element().unwrap();
assert_eq!(doc.node_name(root), Some("root"));
assert_eq!(doc.text_content(root), "Hello");
シリアライゼーション:
use xmloxide::Document;
use xmloxide::serial::serialize;
let doc = Document::parse_str("<root><child>Hello</child></root>").unwrap();
let xml = serialize(&doc);
assert_eq!(xml, "<root><child>Hello</child></root>");
XPathクエリ:
use xmloxide::Document;
use xmloxide::xpath::{evaluate, XPathValue};
let doc = Document::parse_str("<library><book><title>Rust</title></book></library>").unwrap();
let root = doc.root_element().unwrap();
let result = evaluate(&doc, root, "count(book)").unwrap();
assert_eq!(result.to_number(), 1.0);
SAX2ストリーミング:
use xmloxide::sax::{parse_sax, SaxHandler, DefaultHandler};
use xmloxide::parser::ParseOptions;
struct MyHandler;
impl SaxHandler for MyHandler {
fn start_element(&mut self, name: &str, _: Option<&str>, _: Option<&str>, _: &[(String, String, Option<String>, Option<String>)]) {
println!("Element: {name}");
}
}
parse_sax("<root><child/></root>", &ParseOptions::default(), &mut MyHandler).unwrap();
HTML解析:
use xmloxide::html::parse_html;
let doc = parse_html("<p>Hello <br> World").unwrap();
let root = doc.root_element().unwrap();
assert_eq!(doc.node_name(root), Some("html"));
エラー回復:
use xmloxide::parser::{parse_str_with_options, ParseOptions};
let opts = ParseOptions::default().recover(true);
let doc = parse_str_with_options("<root><unclosed>", &opts).unwrap();
for diag in &doc.diagnostics {
eprintln!("{}", diag);
}
CLIの使用法
xmllint CLIツールは以下を提供します:
# 解析して整形表示
xmllint --format document.xml
スキーマに対して検証
xmllint --schema schema.xsd document.xml
xmllint --relaxng schema.rng document.xml
xmllint --dtdvalid
AIエージェント開発の背景
開発者は、libxml2をターゲットにする前に、Claude CodeにRedisとSQLiteを再現させる実験を行いました。このアプローチでは、AIエージェントに既存のテストスイートを通過するまでプロジェクトに取り組ませることを含みました。これは、コーディングエージェントがテストスイートを与えられれば、レガシーコードのメンテナンス問題に対処するために迅速に反復できる可能性を示しています。
📖 完全なソースを読む: HN AI Agents
👀 See Also

ピクセルエージェント:コード、サイト、履歴書のレビューに特化した24種類の専門クロードエージェント
Pixel Agentsは、Claude Sonnet 4.6 API上に構築された24種類のタスク特化型AIエージェントのコレクションです。各エージェントは調整された個性と構造化されたJSON出力を持ち、コードレビュー、サイト分析、履歴書批評、スタートアップ評価などのエージェントが直接的なフィードバックを提供します。

モバイルからのClaude Code CLI制御用Telegramボット
開発者が、/commit、/code_review、/simplifyなどのモバイルコマンドで制御できるClaude Code CLIへのブリッジとなるTelegramボットを構築しました。このボットはカスタムスキルを自動検出し、写真/ドキュメント/音声メモを処理し、グループチャットセッションをサポートします。

パイロットシェル:Claude Codeのための構造化ワークフローレイヤー
Pilot ShellはClaude Code上にインストールするオープンソースのレイヤーで、スペック駆動のTDDワークフロー、品質フック、コンテキストエンジニアリング、トークン最適化を提供します。マルチエージェントフレームワークの複雑さはありません。

RelayCode VS Code拡張機能は、Claudeのコードを主権的なRDU経由でルーティングします
OpenGPUはRelayCodeをリリースしました。これはVS Code拡張機能で、ローカルプロキシとして機能し、Claude CodeやCopilotのリクエストを分散ネットワーク経由で、主権的な再構成可能データフロー・ユニット上で動作するDeepSeek-R1やMiniMax M2.5などのオープンウェイトモデルにルーティングします。