Apache Ant のスキーマが必要になったことはありませんか?

最近、私が取り組んでいたソフトウェアプロジェクトで使用しているAntファイルに問題が発生していました。私はXMLSpyを使ってそのうちの1つのファイルを編集していたのですが、スクリプトにスキーマが割り当てられていなかったため、入力支援やコード補完機能が利用できませんでした。

それは簡単な問題のように思われたので、早速スキーマを探し始めました。

すぐに、同じような内容を求めているStack Overflowの質問を見つけました。その回答は、Antに公式なスキーマやDTDが存在しない、というものでした。その理由は単純で、Antの中核機能を柔軟かつ包括的にモデル化することに加え、外部タスクもすべて含めることが可能であるためです。

すぐに、数年前にもこの場所にいたことを思い出したのですが、今回はXMLSpyのスキーマ生成機能を活用して、何か解決策を見つけようと考えました…

XMLSpy XML editor

もし公式なスキーマが作成されない場合、XMLSpyを使用することで、ご自身が利用する特定の機能やタスクを網羅するスキーマを迅速に作成できます。 より多くの機能を利用するにつれて、XSD(XMLスキーマ定義)に追加していく作業は、非常にわずかな労力であり、その代わりに優れた編集サポートや検証機能が得られます。

XMLSpyは、一連のXMLファイルからスキーマを生成することができます。その方法は、プロジェクトメニューから「新規プロジェクト」を選択してプロジェクトを作成します。プロジェクトウィンドウが開いていない場合は、ウィンドウメニューから開いてください。その後、右クリックして「ファイルを追加」を選択し、プロジェクト内のフォルダにAntファイルを追加します。

ファイルを追加した後、再度フォルダを右クリックし、「DTD/スキーマの生成」を選択してください。

私のプロジェクトには数十種類のAntスクリプトが存在するため、現在行っている開発において、Antの利用状況をかなり網羅的に把握しています。つまり、XMLSpyは、私たちがAntを様々な方法で使用している様子をすべて認識し、これまでAntを使って行ったすべての処理をカバーするスキーマを生成することになります。

スキーマの生成は非常に簡単でした。ただし、XMLSpyはモデル生成に優れていますが、60個のAntファイルを入力すると、どうしても大規模なスキーマが生成されてしまいます。このスクリーンショットで、私が選択したオプションを確認できます。私にとって最も重要なのは、グローバルなデータ型を取得し、いくつかの列挙型を定義することで、スキーマの拡張を容易にすることでした。

新しいXSDを改良する前に、この作業を通して何を達成したいのかを決定する必要がありました。

Antは非常に柔軟性が高く、属性に様々な値を設定でき、また、多くの外部タスクは名前空間を持っていません。私は完璧なスキーマを求めていたわけではなく、このプロジェクトにとって役立つものを目指していました。私の目標は、XMLSpyがAntファイル編集時に、作業を効率化するためのヘルプ機能を提供できる、非常に柔軟なスキーマを構築することでした。

将来的には、より厳密なルールを導入して、一貫性があり正確なAntファイルを作成できるようにしたいと考えていますが、それは今後の課題です。まずは、非常にシンプルな動作確認を行うことが目的でした。

その点を考慮し、私は生成されたスキーマを簡素化することにしました。XMLSpyは、あらゆるケースを網羅するXSDを生成します。技術的には正しいスキーマでしたが、私が望むか必要とするよりも詳細な内容でした。しかし、XSDのビューで、要素を少し移動させ、不要な部分を統合するだけで、非常にシンプルなモデルにすることができました。

最初の確認ポイントは、私が作成した簡略化されたXSDスキーマに対して、約60個のAntファイルすべてを検証できたときでした。整理作業中に意図せずいくつか要素を削除してしまいましたが、それらを復元したことで、問題なく検証できるようになりました。プロジェクトフォルダを右クリックし、「すべて検証」を選択しました。すると、あっという間に5秒ほどで、すべてのファイルが正常に検証されました。

次に重要な点は、XMLSpyで新しいAntファイルを作成する際に、状況に応じたヘルプ機能が利用できたことです。すぐに、新しいタスクや機能を使用するにつれて、多くの新しい要素を追加する必要があることに気づきました。例えば、以前に使用していなかったため、junit要素にsysproperty要素を追加する必要があることがわかりました。

しかし、スキーマビューでは、ここかそこかに要素や属性を追加するのは簡単です。そして、時間の経過とともに、そのような作業はますます少なくなっていくでしょう。

全体的に見て、私のシンプルな目的においては、Antのスキーマを作成することが、小さな成功体験となりました。

もし、私の非常に基本的な構成を、ご自身の構成を作成するための出発点として利用したい場合は、こちらからダウンロードしてください。こちらからダウンロード。そして、それがどのように役立つか、ぜひ教えてください。