Swift → XML コンバーター
Swift の struct やデータを詰めたインスタンスを貼り付けると、きれいな XML が返ってきます。
このツールでできること
Swift の struct を模した XML を手書きしたことがあるなら — plist、レガシー ERP とやり取りする SOAP クライアント、XMLParser 用のテストフィクスチャなど — どれだけ中括弧を打ち込むはめになるかご存知のはずです。ここに Swift を貼り付ければ、ワンパスで整形式の XML が返ってきます。単一の struct でも、複数の struct と enum を含むファイルでも、データを詰めた let order = Order(...) インスタンスでも、結果は同じ — すべてのプロパティが保持された完全な XML ドキュメントです。
単純な文字列置換ではありません。コンバーターは Swift が実際にどうシリアライズするかを理解しており、Codable ベースの XMLEncoder が扱うのとほぼ同じ挙動です。Decimal はそのまま数値テキスト、Date は ISO-8601 文字列、UUID は標準の 8-4-4-4-12 形式の hex 文字列、Optional<T> が nil の場合は要素が消えるのではなく空要素として出力されます。配列は一貫したコンテナ形状に従い、各配列は要素型にちなんだ名前の子を 1 つずつ持つラッパー要素になります。
Coding のカスタマイズも尊重されます。ネストした enum CodingKeys: String, CodingKey は出力のプロパティ名をリマップするので、struct を触らずに orderId を XML 上では OrderId として出すことができます。ネストした struct や enum はインラインで展開されます。複数の型を貼り付けた場合、それぞれが形を保ったまま出力に現れます — このコンバーターは Swift API Design Guidelines と同じ大枠の設計目標に従っているので、名前やケーシングも予想どおりの挙動になります。
使い方
ステップは 3 つです。5 行の struct を貼り付けても、モデルファイル丸ごとでも手順は同じです。
Swift を貼り付け(またはサンプルを試す)
左のエディターに Swift をそのまま貼り付けてください。struct、関連値付き enum、データを詰めた let インスタンス、複数の型を含むファイル — どれも問題ありません。まず現実的な例を見たい場合は Load Sample をクリックしてください。
import 文を削ったり、@propertyWrapper を外したり、Swift の構文を整える必要はありません。Xcode で見たままのコードを貼り付けるだけです。
「変換」をクリック
緑色の 変換 ボタンをクリックします。ツールが Swift を読み込み、すべての型とプロパティを保持したまま XML をワンパスで組み立てます。処理中は短いローディングインジケーターが表示されます。
XML をコピー
右側のパネルに、標準的な XML パーサー(XMLParser、lxml、System.Xml、いずれでも)が受け入れる、インデント付きで整形式の XML が入ります。そのまま plist、SOAP ボディ、テストフィクスチャに貼り付けて使えます。
こんな場面で本当に助かる
iOS / macOS の plist 生成
Swift の設定 struct から、Xcode にそのまま落とし込める Info.plist スタイルの XML ドキュメントを生成できます — <code><key></key></code> ペアの手打ちも、空白文字のバグもありません。デコード側は Apple の <a href="https://developer.apple.com/documentation/foundation/propertylistserialization" target="_blank" rel="noopener">PropertyListSerialization</a> API とよく組み合わさります。
Apple プラットフォーム上の SOAP クライアント
Swift のリクエスト型を SOAP としてアプリから送り出す必要があるとき — struct を貼り付け、XML ボディを SoapUI や Postman に落とし、エンベロープを手書きせずに契約を検証できます。
テストフィクスチャのシード
ユニットテスト中の <code>let order = Order(...)</code> を、XCTest の統合テスト、モックサーバー、今なお XML を話すバックエンドシステム向けの XML シードファイルに変換できます。
ドキュメントの同期を保つ
実際の Swift モデルから直接、README、社内 Wiki、XSD 連携のスキーマドキュメント用の XML 例を生成できるので、ドキュメントとコードがズレることがありません。
よくある質問
複数の struct を一度に貼り付けられますか?
はい — ファイル丸ごと貼り付けてかまいません。トップレベルの struct や enum はそれぞれ、ネスト型を展開しデフォルト値を埋めた形で出力されます。黙って捨てられることはありません。
CodingKeys は反映されますか?
はい。ネストした enum CodingKeys: String, CodingKey は XML 出力のプロパティ名をリマップします — case orderId = "OrderId" は <orderId> ではなく <OrderId> として出力されます。CodingKeys に載っていないプロパティは Swift 側の名前がそのまま使われます。これは実運用での Codable の挙動と一致します。
Decimal、Date、Optional はどう扱われますか?
Decimal はそのまま数値テキストとして出ます。Date は ISO-8601 文字列に、UUID は標準の 8-4-4-4-12 形式の hex 文字列になります。Optional<T> が nil の場合は要素が消えるのではなく空要素になります — XSD で検証するコンシューマー向けに形が一定に保たれます。
関連値付きの enum や配列はどうなりますか?
関連値付きの enum は、どの case かを示すディスクリミネーター属性と、関連値のための子要素を伴って出力されます — ラウンドトリップに十分な情報量です。配列は要素型にちなんだ名前の子を 1 つずつ持つコンテナ要素になります。Dictionary<K,V> は <Entry><Key/><Value/></Entry> のコンテナになります。
貼り付けたコードは保存されますか?
コードは変換のためにバックエンドへ送られますが保存されません — ペイロードのログも取りません。オンラインツールの常として、本当に機密性の高いコードは貼り付ける前に目を通してください。
property wrapper、プロトコル、computed property が混ざっていたら?
property wrapper は出力では内部の値に展開されます。プロトコルは形を定義するものであり内容ではないので直接 XML は生成しません — ただし準拠型はしっかり出力されます。computed property は状態ではなく派生値なのでスキップします。構文エラーがあれば目立つものだけでも先に直してください — パーサーは寛容ですが超能力はありません。
ほかに役立つツール
Swift → XML はパズルのひとピースです。以下のツールと組み合わせると便利です: