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

CtxSnap VS Code拡張機能は、Claudeセッションのファイル変更を追跡します
CtxSnapは、前回のClaudeセッション以降に変更されたファイルを追跡し、ファイル内容とClaudeの200kコンテキストウィンドウに合わせて調整されたトークン予算バーを含む、貼り付け可能な引き継ぎブロックにパッケージ化するVS Code拡張機能です。

開発者がClaude Codeを用いて17の生物学的原理を組み込んだAIフレームワークを構築
開発者は、従来のオーケストレータパターンの代わりに17の生物学的原理を実装した「Cognitive Sparks」というAIフレームワークを構築しました。このプロジェクトは、アインシュタインやファインマンなどの思考ツールを分析した1999年の書籍『Sparks of Genius』(Root-Bernstein著)に着想を得ています。プロジェクト全体(22の設計文書と3,300行のコード)は、Claude Codeを使用して1日で構築され、人間が書いたコードは一切含まれていません。

OpenClaw 2026.3.23では、DeepSeekプロバイダーの追加、Qwenの従量課金制、およびChrome MCPの改善が行われました。
OpenClaw v2026.3.23では、DeepSeekプロバイダープラグイン、Qwenの従量課金制料金、Anthropic思考順序対応のOpenRouter自動価格設定、Chrome MCPタブ待機機能、Discord/Slack/MatrixおよびWeb UIの修正が導入されました。

ビフロストAIゲートウェイ:オープンソースツールがAIインフラのギャップに対応
Bifrostは、オープンソースのGoベースのLLMゲートウェイで、プロバイダー間の自動フェイルオーバー、リクエストを拒否する予算上限、監査ログ、評価用のフックを提供します。ベンチマークでは、高スループット時にLiteLLMよりも約50倍高速であることが示されています。