「システムでデータをやり取りするときにXMLファイルが必要って言われたけど、どうやって作ればいいの?」
「XMLってHTMLと似てるけど、何が違うの?」
そんな疑問を持ったことはありませんか?
XMLファイルは、システム開発やデータ管理の現場では欠かせない存在です。
ウェブサービス間のデータ交換、設定ファイル、データベースの情報保存など、様々な場面で活用されています。
最近では、スマートフォンアプリの設定やゲームのセーブデータでもXMLが使われることが多くなりました。
この記事では、プログラミング初心者の方でも理解できるように、XMLファイルの作り方を基礎から順番に説明します。
実際に手を動かしながら学べるよう、たくさんの具体例も用意しているので、安心して読み進めてください。
XMLとは?基本的な仕組みを理解しよう

XMLの定義と特徴
XML(eXtensible Markup Language)は、データを構造化して保存・交換するためのマークアップ言語です。
「拡張可能な」という意味の通り、自分でタグを定義してデータの意味を表現できるのが大きな特徴です。
XMLの主な特徴:
- 人間が読みやすいテキスト形式
- プラットフォームや言語に依存しない
- 階層構造でデータを表現
- 厳密な文法ルールがある
HTMLとの違い
多くの方がHTMLには馴染みがあると思いますが、XMLとHTMLには重要な違いがあります:
HTML:
- ウェブページの見た目を作るための言語
- 決められたタグ(h1、p、divなど)を使う
- ブラウザーでの表示が目的
XML:
- データの構造と意味を表現する言語
- 自由にタグ名を決められる
- データの保存・交換が目的
XMLが使われる場面
ウェブサービス 異なるシステム間でデータをやり取りするときのフォーマットとして使用されます。
設定ファイル アプリケーションの設定情報を保存するファイル形式として利用されます。
データベース連携 データベースからエクスポートしたデータをXML形式で保存・共有することがあります。
文書管理 Microsoft Wordの.docxファイルや、LibreOfficeの文書ファイルは実際にはXMLベースで作られています。
XMLファイルの基本ルールと文法

必須の基本ルール
ルール1:すべてのタグに終了タグが必要
XMLでは、開始したタグには必ず対応する終了タグが必要です:
<!-- 正しい書き方 -->
<title>XML入門ガイド</title>
<price>1500</price>
<!-- 間違った書き方 -->
<title>XML入門ガイド
<price>1500
ルール2:空要素の書き方
内容がないタグは、省略記法で書くことができます:
<!-- 通常の書き方 -->
<break></break>
<!-- 省略記法(推奨) -->
<break />
ルール3:ルート要素は1つだけ
XMLファイル全体を包む親要素(ルート要素)は必ず1つでなければなりません:
<!-- 正しい書き方 -->
<library>
<book>
<title>プログラミング入門</title>
</book>
<book>
<title>データベース基礎</title>
</book>
</library>
<!-- 間違った書き方(ルート要素が複数) -->
<book>
<title>プログラミング入門</title>
</book>
<book>
<title>データベース基礎</title>
</book>
ルール4:タグの入れ子は正しく
タグの入れ子構造は正しい順番で閉じる必要があります:
<!-- 正しい書き方 -->
<book>
<title>XML入門</title>
<author>田中太郎</author>
</book>
<!-- 間違った書き方 -->
<book>
<title>XML入門
<author>田中太郎</title>
</author>
</book>
タグ名の命名規則
使用できる文字
- 英字(a-z、A-Z)
- 数字(0-9)
- ハイフン(-)
- アンダースコア(_)
- ピリオド(.)
命名時の注意点
<!-- 良い例 -->
<book-title>プログラミング入門</book-title>
<user_name>田中太郎</user_name>
<product.id>12345</product.id>
<!-- 悪い例 -->
<1book>...</1book> <!-- 数字から始まってはいけない -->
<book title>...</book title> <!-- 空白は使えない -->
<book/title>...</book/title> <!-- スラッシュは使えない -->
属性の使い方
タグに追加情報を付加する場合は属性を使用します:
<book id="001" category="技術書" language="ja">
<title>XML完全ガイド</title>
<author>山田花子</author>
<price currency="JPY">2800</price>
</book>
属性使用時の注意点:
- 属性値は必ずクォート(”または’)で囲む
- 同じタグ内で同じ属性名は使えない
- 属性の順番に意味はない
実際にXMLファイルを作成してみよう

必要なツールの準備
テキストエディター
初心者におすすめ:
- Windows:メモ帳、Notepad++
- Mac:テキストエディット、VS Code
- オンライン:VS Code(ブラウザー版)
本格的な開発向け:
- Visual Studio Code
- Atom
- Sublime Text
文字エンコーディングの設定
XMLファイルを作成する際は、文字エンコーディングをUTF-8に設定することを強く推奨します。これにより、日本語を含む多言語対応が可能になります。
ステップバイステップで作成
ステップ1:XML宣言の記述
すべてのXMLファイルの最初には、XML宣言を記述します:
<?xml version="1.0" encoding="UTF-8"?>
各部分の説明:
version="1.0"
:XMLのバージョン指定encoding="UTF-8"
:文字エンコーディングの指定
ステップ2:ルート要素の作成
全体を包むルート要素を作成します:
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<!-- ここに商品データを書いていく -->
</catalog>
ステップ3:データ構造の設計
商品カタログを例に、必要なデータ項目を整理しましょう:
- 商品ID
- 商品名
- 価格
- カテゴリー
- 在庫数
- 説明
ステップ4:完成例
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<product id="001">
<name>ワイヤレスマウス</name>
<price>2980</price>
<category>パソコン周辺機器</category>
<stock>15</stock>
<description>静音設計で快適な操作感のワイヤレスマウスです。</description>
</product>
<product id="002">
<name>USB-Cケーブル</name>
<price>1280</price>
<category>ケーブル</category>
<stock>50</stock>
<description>高速データ転送に対応したUSB-Cケーブル(1m)です。</description>
</product>
<product id="003">
<name>ブルートゥーススピーカー</name>
<price>8900</price>
<category>オーディオ</category>
<stock>8</stock>
<description>コンパクトながら迫力のサウンドを楽しめるスピーカーです。</description>
</product>
</catalog>
ファイルの保存方法
保存手順
- テキストエディターで上記のコードを入力
- 「ファイル」→「名前を付けて保存」を選択
- ファイル名を「catalog.xml」と入力
- ファイルの種類を「すべてのファイル(.)」に変更
- 文字エンコーディングを「UTF-8」に設定
- 保存をクリック
保存時の注意点
拡張子の確認 ファイル名の最後に必ず「.xml」を付けてください。これがないと、XMLファイルとして認識されません。
文字化け対策 日本語を含むXMLファイルでは、必ずUTF-8で保存してください。文字化けを防げます。
より実践的なXMLファイルの例

顧客情報管理
<?xml version="1.0" encoding="UTF-8"?>
<customers>
<customer id="C001" membership="premium">
<personal-info>
<name>
<first>太郎</first>
<last>田中</last>
</name>
<email>taro.tanaka@example.com</email>
<phone>090-1234-5678</phone>
<birthdate>1985-03-15</birthdate>
</personal-info>
<address>
<postal-code>100-0001</postal-code>
<prefecture>東京都</prefecture>
<city>千代田区</city>
<street>丸の内1-1-1</street>
</address>
<purchase-history>
<order date="2024-01-15" total="15600">
<item>ノートパソコン</item>
<item>マウス</item>
</order>
<order date="2024-02-20" total="8900">
<item>外付けHDD</item>
</order>
</purchase-history>
</customer>
<customer id="C002" membership="standard">
<personal-info>
<name>
<first>花子</first>
<last>佐藤</last>
</name>
<email>hanako.sato@example.com</email>
<phone>080-9876-5432</phone>
<birthdate>1992-07-22</birthdate>
</personal-info>
<address>
<postal-code>530-0001</postal-code>
<prefecture>大阪府</prefecture>
<city>大阪市北区</city>
<street>梅田2-2-2</street>
</address>
<purchase-history>
<order date="2024-03-10" total="4500">
<item>ワイヤレスイヤホン</item>
</order>
</purchase-history>
</customer>
</customers>
レストランメニュー
<?xml version="1.0" encoding="UTF-8"?>
<restaurant name="カフェ・ドゥ・パリ" location="東京都渋谷区">
<menu>
<category name="前菜">
<item id="A001" vegetarian="true">
<name>シーザーサラダ</name>
<price>890</price>
<ingredients>
<ingredient>レタス</ingredient>
<ingredient>トマト</ingredient>
<ingredient>チーズ</ingredient>
<ingredient>クルトン</ingredient>
</ingredients>
<allergens>
<allergen>乳製品</allergen>
<allergen>小麦</allergen>
</allergens>
</item>
<item id="A002" vegetarian="false">
<name>スモークサーモンサラダ</name>
<price>1280</price>
<ingredients>
<ingredient>スモークサーモン</ingredient>
<ingredient>ミックスグリーン</ingredient>
<ingredient>アボカド</ingredient>
<ingredient>クリームチーズ</ingredient>
</ingredients>
<allergens>
<allergen>魚類</allergen>
<allergen>乳製品</allergen>
</allergens>
</item>
</category>
<category name="メイン料理">
<item id="M001" vegetarian="false">
<name>グリルチキンのハーブ焼き</name>
<price>1890</price>
<cooking-time>25</cooking-time>
<ingredients>
<ingredient>鶏胸肉</ingredient>
<ingredient>ローズマリー</ingredient>
<ingredient>タイム</ingredient>
<ingredient>じゃがいも</ingredient>
</ingredients>
<allergens>
<allergen>鶏肉</allergen>
</allergens>
</item>
</category>
<category name="デザート">
<item id="D001" vegetarian="true">
<name>ティラミス</name>
<price>680</price>
<ingredients>
<ingredient>マスカルポーネチーズ</ingredient>
<ingredient>エスプレッソ</ingredient>
<ingredient>ココアパウダー</ingredient>
<ingredient>レディフィンガー</ingredient>
</ingredients>
<allergens>
<allergen>乳製品</allergen>
<allergen>卵</allergen>
<allergen>小麦</allergen>
</allergens>
</item>
</category>
</menu>
</restaurant>
イベント管理
<?xml version="1.0" encoding="UTF-8"?>
<events>
<event id="E001" type="セミナー" status="開催予定">
<title>プログラミング入門講座</title>
<description>
初心者向けのプログラミング講座です。
PythonとJavaScriptの基礎を学びます。
</description>
<schedule>
<start-date>2024-04-15</start-date>
<end-date>2024-04-15</end-date>
<start-time>10:00</start-time>
<end-time>17:00</end-time>
</schedule>
<venue>
<name>渋谷コミュニティセンター</name>
<address>東京都渋谷区渋谷1-1-1</address>
<capacity>50</capacity>
</venue>
<organizer>
<name>プログラミング学習会</name>
<contact>info@programming-study.com</contact>
</organizer>
<registration>
<max-participants>40</max-participants>
<current-participants>25</current-participants>
<fee>8000</fee>
<deadline>2024-04-10</deadline>
</registration>
<topics>
<topic>Python基礎文法</topic>
<topic>JavaScript DOM操作</topic>
<topic>実践プロジェクト</topic>
</topics>
</event>
<event id="E002" type="ワークショップ" status="満員">
<title>ウェブデザイン実践講座</title>
<description>
HTML、CSS、JavaScriptを使って
実際にウェブサイトを作成します。
</description>
<schedule>
<start-date>2024-04-22</start-date>
<end-date>2024-04-23</end-date>
<start-time>09:30</start-time>
<end-time>16:30</end-time>
</schedule>
<venue>
<name>新宿クリエイティブスペース</name>
<address>東京都新宿区新宿2-2-2</address>
<capacity>20</capacity>
</venue>
<organizer>
<name>ウェブデザイナーズギルド</name>
<contact>workshop@webdesign-guild.jp</contact>
</organizer>
<registration>
<max-participants>20</max-participants>
<current-participants>20</current-participants>
<fee>15000</fee>
<deadline>2024-04-15</deadline>
</registration>
<requirements>
<requirement>ノートパソコン持参</requirement>
<requirement>HTMLの基礎知識</requirement>
</requirements>
</event>
</events>
XMLファイルの確認と検証

ブラウザーでの表示確認
作成したXMLファイルをブラウザーで開くことで、構造を視覚的に確認できます:
確認手順
- 作成したXMLファイルを右クリック
- 「プログラムから開く」を選択
- ChromeやEdge、Firefoxなどのブラウザーを選択
ブラウザー表示の特徴
正常なXMLファイル タグが階層構造で表示され、折りたたみ・展開ができます。
エラーがあるXMLファイル エラーメッセージが表示され、問題のある行番号も示されます。
オンライン検証ツール
おすすめの検証サイト
XMLValidator.net XMLファイルの構文チェックが無料でできます。エラーがある場合は詳細な説明も表示されます。
W3Schools XML Validator 初心者にも分かりやすいエラーメッセージが特徴です。
検証ツールの使い方
- XMLコードをコピー
- 検証サイトのテキストエリアに貼り付け
- 「Validate」ボタンをクリック
- エラーがあれば修正して再度検証
よくあるエラーと対処法
文法エラー
タグの閉じ忘れ
<!-- エラー例 -->
<product>
<name>商品名
<price>1000</price>
</product>
<!-- 修正版 -->
<product>
<name>商品名</name>
<price>1000</price>
</product>
属性値のクォート忘れ
<!-- エラー例 -->
<product id=001>
<!-- 修正版 -->
<product id="001">
入れ子構造の間違い
<!-- エラー例 -->
<book>
<title>XMLガイド
<author>田中太郎</title>
</author>
</book>
<!-- 修正版 -->
<book>
<title>XMLガイド</title>
<author>田中太郎</author>
</book>
文字化けの問題
原因と対策 文字化けは主に文字エンコーディングの不一致が原因です:
- XML宣言でUTF-8を指定
- エディターでもUTF-8で保存
- 開く際もUTF-8で開く
実用的なXML活用方法

データのインポート・エクスポート
Excelとの連携
Excelでは、XMLファイルからデータをインポートしたり、ExcelデータをXML形式でエクスポートしたりできます:
Excelからのエクスポート手順:
- データを選択
- 「ファイル」→「エクスポート」→「XML」を選択
- XMLスキーマを選択(または作成)
- エクスポート実行
データベースとの連携
多くのデータベース管理システムでは、XMLファイルからのデータインポートが可能です:
MySQLの例:
LOAD XML INFILE 'products.xml'
INTO TABLE products
ROWS IDENTIFIED BY '<product>';
設定ファイルとしての活用
アプリケーション設定
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<database>
<host>localhost</host>
<port>3306</port>
<username>app_user</username>
<password>secure_password</password>
<database-name>myapp_db</database-name>
</database>
<server>
<port>8080</port>
<max-connections>100</max-connections>
<timeout>30</timeout>
</server>
<logging>
<level>INFO</level>
<file-path>/var/log/myapp.log</file-path>
<max-file-size>10MB</max-file-size>
</logging>
<features>
<feature name="user-registration" enabled="true" />
<feature name="email-notifications" enabled="false" />
<feature name="analytics" enabled="true" />
</features>
</configuration>
ウェブサービスとの連携
RSS/Atomフィード
XMLは、ブログやニュースサイトのRSSフィードでも使用されています:
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>テックニュース</title>
<link>https://technews.example.com</link>
<description>最新の技術ニュースをお届けします</description>
<language>ja</language>
<item>
<title>新しいプログラミング言語が発表</title>
<link>https://technews.example.com/new-language</link>
<description>革新的な機能を持つ新言語が登場しました</description>
<pubDate>Mon, 15 Apr 2024 10:00:00 +0900</pubDate>
</item>
<item>
<title>AI技術の最新動向</title>
<link>https://technews.example.com/ai-trends</link>
<description>人工知能分野での最新の進歩について解説</description>
<pubDate>Sun, 14 Apr 2024 15:30:00 +0900</pubDate>
</item>
</channel>
</rss>
より高度なXML技術

名前空間(Namespace)
複数のXMLスキーマを組み合わせる場合に使用されます:
<?xml version="1.0" encoding="UTF-8"?>
<catalog xmlns:product="http://example.com/product"
xmlns:inventory="http://example.com/inventory">
<product:item id="001">
<product:name>ワイヤレスマウス</product:name>
<product:price currency="JPY">2980</product:price>
<inventory:stock>15</inventory:stock>
<inventory:warehouse>東京</inventory:warehouse>
</product:item>
</catalog>
CDATA セクション
XMLの特殊文字をそのまま記述したい場合に使用します:
<?xml version="1.0" encoding="UTF-8"?>
<documentation>
<code-example>
<![CDATA[
if (x < 10 && y > 5) {
console.log("条件を満たしています");
}
]]>
</code-example>
<html-content>
<![CDATA[
<div class="example">
<p>HTMLタグをそのまま記述できます</p>
</div>
]]>
</html-content>
</documentation>
XML Schema(XSD)
XMLファイルの構造と制約を定義するためのスキーマ言語です:
商品データ用のスキーマ例:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="catalog">
<xs:complexType>
<xs:sequence>
<xs:element name="product" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="price" type="xs:decimal"/>
<xs:element name="category" type="xs:string"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XMLファイル作成のベストプラクティス
設計時の考慮事項
データ構造の設計
階層構造の明確化 データの関係性を明確に表現できる階層構造を設計しましょう:
<!-- 良い例:明確な階層構造 -->
<library>
<section name="コンピューター">
<book>
<title>プログラミング入門</title>
<author>田中太郎</author>
</book>
</section>
</library>
<!-- 避けるべき例:フラットな構造 -->
<data>
<section>コンピューター</section>
<book-title>プログラミング入門</book-title>
<book-author>田中太郎</book-author>
</data>
属性vs要素の使い分け
- 属性:メタデータ(ID、分類、状態など)
- 要素:実際のデータ内容
<product id="001" category="electronics" status="active">
<name>ワイヤレスマウス</name>
<description>高精度センサー搭載のワイヤレスマウス</description>
<price>2980</price>
</product>
パフォーマンスの最適化
ファイルサイズの最適化
不要な空白の削除
<!-- 開発時(読みやすさ重視) -->
<product>
<name>商品名</name>
<price>1000</price>
</product>
<!-- 本番時(サイズ最適化) -->
<product><name>商品名</name><price>1000</price></product>
データの正規化
<!-- 最適化前:重複データが多い -->
<orders>
<order>
<customer-name>田中太郎</customer-name>
<customer-email>taro@example.com</customer-email>
<product>商品A</product>
</order>
<order>
<customer-name>田中太郎</customer-name>
<customer-email>taro@example.com</customer-email>
<product>商品B</product>
</order>
</orders>
<!-- 最適化後:参照による正規化 -->
<data>
<customers>
<customer id="C001">
<name>田中太郎</name>
<email>taro@example.com</email>
</customer>
</customers>
<orders>
<order customer-id="C001">
<product>商品A</product>
</order>
<order customer-id="C001">
<product>商品B</product>
</order>
</orders>
</data>
セキュリティ対策
XMLインジェクション対策
外部からの入力をXMLに含める場合は、特殊文字のエスケープが必要です:
<!-- 危険な例:エスケープなし -->
<comment>ユーザー入力: <script>alert('XSS')</script></comment>
<!-- 安全な例:適切なエスケープ -->
<comment>ユーザー入力: <script>alert('XSS')</script></comment>
主なエスケープ文字:
<
→<
>
→>
&
→&
"
→"
'
→'
機密情報の取り扱い
XMLファイルに機密情報を含める場合は、暗号化や適切なアクセス制御が必要です:
<!-- 避けるべき例:平文でパスワード保存 -->
<config>
<database-password>secret123</database-password>
</config>
<!-- 改善例:暗号化された値 -->
<config>
<database-password encrypted="true">AES256:encrypted_value_here</database-password>
</config>
トラブルシューティング

よくある問題と解決方法
文字化け問題
問題の特定
<?xml version="1.0" encoding="UTF-8"?>
<test>
<message>こんにちは世界</message>
</test>
このXMLファイルで文字化けが発生する場合:
- エンコーディング設定の確認
- XML宣言のencoding属性
- エディターの保存エンコーディング
- ブラウザーの表示エンコーディング
- 解決方法
<!-- UTF-8で統一 --> <?xml version="1.0" encoding="UTF-8"?>
パース(解析)エラー
一般的なエラーパターン
1. タグの不一致
<!-- エラー -->
<book>
<title>XMLガイド</title>
</books> <!-- 終了タグが間違っている -->
<!-- 修正 -->
<book>
<title>XMLガイド</title>
</book>
2. 属性値のクォート不足
<!-- エラー -->
<product id=001 name=マウス>
<!-- 修正 -->
<product id="001" name="マウス">
3. 特殊文字のエスケープ忘れ
<!-- エラー -->
<description>価格は100円 < 200円です</description>
<!-- 修正 -->
<description>価格は100円 < 200円です</description>
ファイルが開けない問題
原因と対策
- 拡張子の確認
- ファイル名が「.xml」で終わっているか確認
- Windowsで拡張子が非表示の場合は表示設定を変更
- 関連付けの設定
- XMLファイルをダブルクリックで開けない場合
- 「プログラムから開く」でブラウザーを選択
- ファイルの破損チェック
- テキストエディターで開いて内容を確認
- ファイルサイズが0バイトでないか確認
デバッグ技術
ステップバイステップ検証
1. 最小構成でテスト
<?xml version="1.0" encoding="UTF-8"?>
<test>
<message>テスト</message>
</test>
2. 段階的に複雑化
<?xml version="1.0" encoding="UTF-8"?>
<test>
<message id="001">テスト</message>
<data>
<item>アイテム1</item>
</data>
</test>
3. 本格的なデータ追加 実際のデータを少しずつ追加して、どこでエラーが発生するかを特定します。
ログを活用したデバッグ
XMLを読み込むプログラムでは、詳細なエラーログを確認することが重要です:
// JavaScript例
try {
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlString, "text/xml");
// パースエラーのチェック
const parserError = xmlDoc.getElementsByTagName("parsererror")[0];
if (parserError) {
console.error("XML パースエラー:", parserError.textContent);
}
} catch (error) {
console.error("エラーが発生しました:", error.message);
}
まとめ
XMLファイルの作成について、基本的な仕組みから実践的な活用方法まで詳しく解説しました。
重要なポイントをまとめると:
- XMLの基本: データを構造化して表現するマークアップ言語
- 基本ルール: 開始・終了タグの対応、ルート要素の存在、正しい入れ子構造
- 作成方法: テキストエディターでXML宣言から始めて段階的に構築
- 検証: ブラウザーやオンラインツールでの構文チェックが重要
- 活用場面: データ交換、設定ファイル、文書管理など幅広い用途
コメント