XMLとは? Extensible Markup Languageの解説
XML(Extensible Markup Language)は、構造化データと文書のための冗長でタグベースのフォーマットで、buildツールやテストレポートで今も一般的です。
XMLは、ネストしたタグを使って構造化データを表現する、古いが今も広く使われている方法です。JSONやYAMLより冗長ですが、その長い歴史により、多くの重要なCIアーティファクト - Mavenのbuildファイル、JUnitのテストレポート、コードカバレッジ出力 - がXMLです。読み方を知っておくと、buildツールやテストレポーターがXMLを話すときに役立ちます。
XMLとは
XMLは、開始タグと終了タグとして書かれた名前付き要素でデータを包みます。山括弧のタグの間に値を挟む形です。要素はネストしてツリーを形成し、属性を持つことができ、root要素はちょうど1つあります。JSONと違って、XMLはテキストとマークアップを混在できるため、データだけでなく文書にも適していました。
XMLが冗長な理由
すべての値が対応する開始タグと終了タグで囲まれるため、XMLファイルは同等のJSONやYAMLより大きく、ノイズが多くなります。その冗長さはある種の力 - namespace、schema、属性 - を買いますが、単純な設定については、ほとんどのエコシステムがより軽量なフォーマットに移行しました。
schemaによる検証
XMLは、どの要素と属性がどの順序で許可されるかを定義するschema(XSDまたはDTD)に対して検証できます。これにより、ツールは処理前に不正な設定を拒否でき、これはエンタープライズのbuildシステムがXMLに標準化した理由の一部です。
CIパイプラインにおけるXML
2つのXMLアーティファクトがCIを支配しています。MavenとAntはbuildをpom.xmlとbuild.xmlで定義します。そしてJUnit XMLレポートは事実上標準のテスト結果フォーマットです - 多くの言語のtest runnerがこれを出力するため、CIのダッシュボードは合格と失敗のテストを統一的に表示できます。
# A CI step that produces and uploads JUnit XML
steps:
- run: pytest --junitxml=results.xml
- uses: actions/upload-artifact@v4
with:
name: test-results
path: results.xmlLatchkeyについての注記
Latchkeyのrunnerで生成されるJUnit XMLレポートとカバレッジXMLは通常のアーティファクトです。すでに使っているのと同じupload-artifactやレポート用のactionでアップロードして利用でき、Latchkey固有の扱いは不要です。
重要なポイント
- XMLは構造化データを、1つのroot要素を持つ単一のツリーを形成するネストした名前付きタグに格納します。
- JSONやYAMLより冗長ですが、namespace、属性、schemaによる検証をサポートします。
- CIでは、pom.xmlのbuildファイルと普遍的なJUnit XMLテストレポート形式として生き続けています。