はじめに
アプリケーションを開発していると、同じような作業を繰り返さなければいけないことがあります。例えば、リリースモードでコンパイルしたり、VSS(Visual Source Safe:ソースコード管理ソフト)から最新ソースを取ってきてビルドしたりというような作業です。このような定型作業には慣れてしまっているかもしれませんが、NAntを使って自動化するとちょっとした手間を省くことができ、プログラミングに専念できるようになります。本稿では、NAntの概要と、使用例について紹介します。
なお、NAntと同様の機能を持つ.NET Framework 2.0同梱ツール「MSBuild」についての紹介記事『MSBuildを活用して開発時の作業を自動化する』も併せてご覧いただくことをおすすめします。
対象読者
Visual Studio (.NET)で開発を行っている方、作業の効率化・自動化に興味のある方を対象としています。
必要な環境
このサンプルはVisual Studio .NET 2003と、NAntのバージョン0.85-rc3で動作確認をしています。NAntは同梱していますので、改めて入手することなく簡単に動作を確認できます(拡張版であるNAntContribは同梱していません)。
サンプルの概要
ダウンロードできるアプリケーションは「(1)Windowsアプリケーションをコンパイル」「(2)アプリケーションを起動」という手順をNAntで実行するサンプルです。
コマンドプロンプトを立ち上げて、ダウンロードファイルを解凍したフォルダ(日本語が含まれない場所を推奨)に移動し、「SampleNAnt.bat」を実行してください。これによって、「NAnt.exe」へのパスが通ります。後は、コマンドプロンプトに表示されるメッセージに従ってNAntを試してみてください。
NAntの特長
NAntは、JavaのAntを.NETで利用できるように移植したオープンソースのビルドツールです。ビルドツールとは、アプリケーションの構築に必要なソースコードのコンパイルを容易にしたり、定型作業を自動化したりできるツールです。NAntでは、「ビルドファイル」というXMLの設定ファイルを書くことによって、手動で行っている定型作業を簡単に実行できるようになります。
単純な処理であれば、Visual Studioのビルドイベントを使うこともできますが、ビルドイベントの機能は、Visual Basic 2003やVisual Basic 2005 Expressに実装されていない、バッチプログラムのため複雑な手順を記述できないといった問題があります。
そこで、多くの環境で動作し、高度な処理を実行できるNAntについて紹介します。
豊富なタスク
NAntの最大の魅力は呼び出せる機能の多さにあります。この機能のことをNAntでは「タスク」と呼んでいます。代表的なタスクには下表のようなものがあります。
タスク名 | 説明 |
copy | ファイルをコピーする。 |
cl | C/C++のソースコードをコンパイルする。 |
csc | C#のソースコードをコンパイルする。 |
cvs | ソース管理リポジトリのCVSのコマンドを実行する。 |
delete | ファイルを削除する。 |
echo | コンソールやファイルなどにメッセージを出力する。 |
exec | システムコマンド(notepad.exe/ping.exeなど)を実行する。 |
メールを送信する。 | |
mkdir | ディレクトリを作成する。 |
ndoc | NDocを実行してドキュメントを生成する。 |
nunit2 | NUnit2でユニットテストを実行する。 |
unzip | 圧縮ファイルを解凍する。 |
solution | Visual Studioのソリューションをコンパイルする。 |
vbc | Visual Basicのソースコードをコンパイルする。 |
zip | 圧縮ファイルを作成する。 |
このように、NAntによってコンパイルをしたり、メールを送信したりすることができます。この他にも多数のタスクがありますので、興味のある方はNAntのタスクリファレンスをご覧ください。
また、NAntの拡張版として提供されているオープンソースライブラリ「NAntContrib」では次のようなタスクも提供されています。
タスク名 | 説明 |
gac | GAC(Global Assembly Cache)を操作する。 |
fxcop | ソースコードの規約をチェックする。 |
mkiisdir | IISの仮想フォルダを作成する。 |
msi | アプリケーションのインストーラを作成する。 |
nunitreport | NUnitのテスト結果をレポートにする。 |
svn | ソース管理リポジトリのSvn(Subversion)のコマンドを実行する。 |
vb6 | Visual Basic6.0のソースコードをコンパイルする(注:正常に動作させるにはパッチが必要)。 |
vsscheckin | ソース管理リポジトリのVSS(Visual Source Safe)にチェックインする。 |
vsscheckout | VSSからチェックアウトする。 |
sql | データベースにSQL文を発行する。 |
このようにNAntContribにも多数の有益なタスクがありますので、興味のある方はNAntContribのタスクリファレンスをご覧ください。
設定が容易
NAntでは、ビルドファイルと呼ばれるXMLの設定ファイルに従ってタスクを実行させることができます。本稿で作成するビルドファイルの完成形は次のようになります。
<?xml version="1.0" encoding="utf-8" ?> <project name="NAntSample" default="build" basedir="."> <!-- プロパティ --> <property name="basename" value="NAntSampleVB2003" /> <!-- buildターゲット --> <target name="build" description="Visual Studioソリューションのビルド"> <solution configuration="Debug" solutionfile="${basename}.sln" /> </target> <!-- runターゲット --> <target name="run" depends="build" description="アプリケーションの実行"> <exec program="${basename}.exe" basedir="bin" /> <echo message="${datetime::now()}に実行しました。" /> </target> </project>
ビルドファイルの書き方については後述しますが、タスクごとに必要となるパラメータを記述すれば目的の処理を呼び出すことができます。XMLの設定と聞くと難しそうに思われるかもしれませんが、Visual Studio .NETでは、XMLのスキーマを認識して、自動補完(補足1の「インテリセンスの設定」参照)も使えますので、バッチファイルよりも簡単に設定を記述することができます。
その他の便利な機能
このほかにも、次のような便利な機能が備わっています。
- 環境に依存しない(Visual Studioをインストールしていないアプリケーションサーバや、Linuxの.NET環境のMonoでもビルドできる)。
- 「ビルドしてからアプリケーションを起動する」というような実行順序(依存関係)の設定ができる。
- アセンブリや環境設定などの情報を取得できる関数が用意されている。
- 条件に応じて分岐を行える。
- エラー発生時に処理を中断し、特定の処理を呼び出すことができる。
このようなメリットがあるため、NAntは、個人、企業、オープンソースといった開発で頻繁に利用されています。