連載
NAgileで始める実践アジャイル開発

第4回 ミッション:ビルドを自動化セヨ!

NAgiler 黒石 高広
2006/09/06
Page1 Page2 Page3

■■3. MSBuild概要■■

まず紹介するのは、.NET Framework 2.0の標準機能として提供されているビルド・エンジンの「MSBuild」だ。

 すでに知っていると思うが、@ITにはMSBuildに関する記事が公開されておるし、NAgile.comの中でも資料を公開しておる。外の人にも分かるように、それらの記事のリンクを紹介しておこう。

外の人って何ですか……。ところで、MSBuildが.NET Framework 2.0の機能ということは、.NET Framework 1.xを使って開発をしている場合は利用できないんですか?

 

利用できなくもない。GotDotNet(米国)のWebサイト(厳密にはCodePlex)に「MSBee」というプロジェクトがある。それが.NET Framework 1.1用のMSBuildということだ。せっかくなのでMSBeeのリンクも紹介しておこう。

へー、世の中にはいろんなツールがあるんですね。
 

この業界では、自分が欲しいと思ったものは、すでに誰かがそれを作って提供していることが多い。自分で作るのもよいが、まずは探してみるクセを付けた方がよいだろう。

 

そうですね、世間ではオープンソース・ツールの利用も増えてますしね。で、MSBuildを使ってどのように自動化できるんですか?

 

MSBuildでは、自動化したい作業をXML形式のビルド・ファイルに記述し、コマンドラインから呼び出して実行する。どのようにビルドを自動化できるか、MSBuildのビルド・ファイルの例を下に示しておこう。


サンプル1 MSBuildの例
ファイル全体(msbuild.zip)のダウンロード

簡単に説明すると、Visual SourceSafeからプロジェクトの最新コードを取得し、それらをコンパイルし、それにより作成されたアセンブリを1個所のフォルダへ集めて、ZIPファイルとして圧縮している。紙面……じゃない、大人の事情でビルド・ファイルの一部しか載せていないが、ファイルの全体は上記のリンクよりダウンロードすることも可能だ。

 

何ですか……大人の事情って……。

 

さまつなことだ、気にするでない。このビルド・ファイルをコマンドラインから実行する。すると下のような結果になる。


図2 MSBuildの実行結果

実行結果も一部だけだが、コマンドラインからMSBuild.exeを実行し、その引数にビルド・ファイルを指定するとDefaultTargets属性の中で定義されているターゲットが実行されるというわけだ。ターゲットというのは、ビルド・ファイルの<target>要素のことで、実行したい処理の固まりと思えばよい。

 

なるほど、XMLファイルに作業を記述することで、自動化を行うのですね。確かに、これなら何回でも同じ作業を実行できるし、Windowsのスケジューラに登録しておけば定期的に自動実行することも可能ですね。

 

そうだな、実行するタイミングが分かっているものは、スケジューラに登録した方がよいだろう。そうすることで、コマンドラインからMSBuildを実行することさえも自動化できるからな。

 

ビルド・ファイルを作成するのも簡単そうだし、これなら私にも自動化できそう♪ さっそくMSBuildで自動化を行ってみます!!

 

待て待て。まだ話は途中だ。実は、MSBuildにより標準で実行できるタスクはそれほど多くない。ここでいうタスクとは、MSBuildで実行される最小の作業単位のことだ。例えばファイルのコピーを行う場合は、<copy>:タスクを使用するといった感じで、MSBuildで提供されるタスクを組み合わせてビルド・ファイルの処理を記述していく。実際に、標準のタスクだけでビルドの自動化を行うのは難しいことも多いので、便利なMSBuildの拡張タスク・ライブラリも紹介しておこう。

 

拡張タスク・ライブラリ?

   

要するに、標準で提供されるタスク以外にも便利なタスクをそろえたMSBuildのライブラリということだ。現在のところ、2つの拡張タスク・ライブラリが存在するので、それぞれをダウンロードして試してみるとよいだろう。お勧めは、日々更新も続いている1のMSBuild Community Task Projectだな。

  1. MSBuild拡張タスク・ライブラリ1(MSBuild Community Tasks Project)

  2. MSBuild拡張タスク・ライブラリ2(Microsoft Services (UK) Enterprise Solutions Build Framework (SBF): Home)

どれどれ……っと、ZIP形式で圧縮/解凍を行うタスクまである! すごい便利ですね〜。

   

どうだ、これらを利用して自動化はできそうか?

   

はい!! 頑張れそうです!!

   

MSBuildの説明を一通りしたことだし、続いて「NAnt」も紹介しておこう。

   

はい。お願いします。

■■4. NAnt概要■■

次に紹介するのは、オープンソース・ソフトウェアのビルド・エンジンであるNAntだ。Javaの世界では、「Ant」という名前の有名なソフトウェアの.NET版ビルド・エンジンだな。

 

NAntは、.NET Frameworkのどのバージョンで動作するんですか?

 

NAntの最新バージョンは、.NET Framework 2.0にも対応している。NAntの公式サイトにサポートするバージョンが記載されているので詳しくはそちらを参考にしてくれ。

なるほど、確かに.NET Framework 2.0にも対応してますね。で、NAntはどうやって使うんですか?

 

NAntの基本的な考え方や、ビルド・ファイルを作成してコマンドラインから実行するやり方は、MSBuildとほとんど同じだ。NAntの詳細についてはここでは語らないので、NAgile.comで公開している資料を参考にしてほしい。

本当にほとんど同じなんですか? 説明が面倒くさくなっただけじゃ……。

 

人聞きの悪いことをいうでない。その証拠として、先ほど例として示したMSBuildのビルド・ファイルと同じ作業を、NAntのビルド・ファイルとして示した例が下になる。


サンプル2 NAntのビルド・ファイル例
ファイル全体(nant.zip)のダウンロード

これもビルド・ファイルのすべてを記載しているわけではないので、上記のリンクよりファイル全体をダウンロードして、MSBuildのビルド・ファイルのサンプルと比較しながら見てみるとよいだろう。

 

それも、大人の事情ですか?

 
そのとおりだ。で、このビルド・ファイルを実行した結果は下のようになる。

図3 NAntの実行結果例

NAntの場合、コマンドラインからNAnt.exeを実行し、その引数としてビルド・ファイルを指定する。後はMSBuildと似たようなものだな。

 

なるほどー、確かに何となくMSBuildと同じですね。ひょっとしてNAntにも拡張のタスク・ライブラリが存在するのですか?

   

当然だ、そもそもMSBuildよりもNAntの方が歴史は古いからな。NAntの拡張タスク・ライブラリであるNAntContribのリンクを下記に紹介しておこう。これもダウンロードし、試してみるとよいだろう。

どれどれ……なるほどー、NAntのタスクも充実してますね。うー、MSBuildもNAntもどちらもよさそう……。で、MSBuildとNAntってどちらを使えばよいのでしょうか?

   

当然の質問だな。それでは、次にMSBuildとNAntのどちらを使うべきか議論していくことにしよう。

 

 INDEX
  NAgileで始める実践アジャイル開発
  第4回 ミッション:ビルドを自動化セヨ!
    1.ビルドの自動化とは?
  2.MSBuildとNAntの概要
    3.NAntとMSBuildどっちを使う?
 
インデックス・ページヘ  「NAgileで始める実践アジャイル開発」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間