Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

MSBuildを活用して開発時の作業を自動化する

.NET Framework 2.0に同梱されるビルドツールを利用して作業の効率化を図る

  • LINEで送る
  • このエントリーをはてなブックマークに追加

.NET Framework 2.0に含まれているMSBuildというビルドツールを利用すると、アプリケーション開発で繰り返しがちな定型作業を省力化して、プログラミングそのものに専念できるようになります。本稿では、MSBuildの概要と使用例について紹介します。

目次

はじめに

 アプリケーションの開発中は、思いのほか同じような定型作業を繰り返しているものです。.NET Framework 2.0に含まれているMSBuildというツールを利用すると、そうした手間を省くことができ、プログラミングそのものに専念できるようになります。本稿では、MSBuildの概要と使用例について紹介します。なお、MSBuildと同様の機能を持つオープンソースライブラリ「NAnt」についての紹介記事『NAntを活用して開発時の作業を自動化する』も併せてご覧いただくことをおすすめします。

対象読者

 Visual Studio(.NET)にて開発を行っている方、作業の効率化・自動化に興味のある方を対象としています。

必要な環境

 本稿のサンプルプログラムは.NET Framework 2.0と同時にインストールされるMSBuildにて動作確認をしています。そのため、添付ファイルを解凍して、バッチファイルを実行するだけで簡単に動作を確認することができます。

サンプルの概要

 まず、本稿のサンプルファイルをダウンロードします。サンプルのプロジェクトファイルは

  1. Windowsアプリケーションをコンパイル。
  2. アプリケーションを実行。

 という手順で、MSBuildを使って実行します。

 ビルドの実行は以下の手順になります。

  1. コマンドプロンプトを起動する。
  2. ダウンロードファイルを解凍したフォルダに移動する。
  3. 「1.Simple.bat」を実行して、ビルドを実行する。

MSBuildの特長

 「MSBuild(Microsoft Build Engine)」は、Microsoft製品(WindowsプラットフォームやVisual Studio)で利用できる新しいビルドツールです。ビルドツールを利用すると、Visual Studioがインストールされていないサーバ環境でも容易にアプリケーションをコンパイルしたり、繰り返し手作業で行うべき作業を自動化したりできます。

 MSBuildでは、「MSBuildプロジェクトファイル形式(以下、プロジェクトファイル)」というXMLの設定ファイルを書くことによって、手動で行っている定型作業を簡単に実行することが可能になります。

Microsoft純正ツール

 MSBuildの最大の魅力は.NET Framework 2.0に同梱されていることです。このため、別途新しいソフトウェアをインストールする必要はありません。また、Microsoftが正式にサポートしているため、安心してプロジェクトで利用することができます。

 なお、.NET Framework 1.1で利用する場合には、マイクロソフトのコード共有サイト「CodePlex」から、「MSBee」という同機能のツールをダウンロードすることができます。

豊富なタスク

 MSBuildは、呼び出せる機能の多さにも魅力があります。この機能のことをMSBuildでは「タスク」と呼んでいます。標準で利用できるタスクには下表のようなものがあります。

MSBuildのタスク(標準機能)
タスク名説明
ALアセンブリリンカ「Al.exe」を実行。
AspNetCompilerASP.NETのプリコンパイラ「aspnet_compiler.exe」を実行。
AssignCultureカルチャIDの割り当て。
CallTargetターゲットの呼び出し。
Copyファイルを新しい場所にコピー。
CreateItem入力されたアイテムでアイテムコレクションを作成。
CreateProperty渡された値を使用してプロパティを作成。
CscC#コンパイラ「CSC.exe」を実行。
Delete指定されたファイルを削除。
Error条件の評価に基づいてビルドを停止し、エラーをログに記録。
Exec指定されたプログラムを実行。
FindUnderPathコレクション内のどのアイテムが、指定されたフォルダ(サブフォルダ)に格納されているかを確認。
GenerateApplicationManifestClickOnceアプリケーションマニフェスト(またはネイティブマニフェスト)の作成。
GenerateBootstrapperアプリケーションを、自動的に検出、ダウンロード、インストールする方法を提供。
GenerateDeploymentManifestClickOnce配置マニフェストを生成。
GenerateResource.txtおよび.resxファイルを.resourcesバイナリファイルに変換(「resgen.exe」類似機能)。
GetAssemblyIdentity指定されたファイルからアセンブリIDを取得し出力。
GetFrameworkPath.NET Frameworkアセンブリのパスを取得。
GetFrameworkSdkPath.NET Framework SDKのパスを取得。
LCライセンスコンパイラ「Lc.exe」を実行。
MakeDirディレクトリを作成。
Messageビルド中のメッセージをログに記録。
MSBuild他のMSBuildプロジェクトからMSBuildプロジェクトをビルド。
ReadLinesFromFileテキストファイルからアイテムの一覧を読み込み。
RegisterAssemblyアセンブリのメタデータからレジストリに追加(「Regasm.exe」類似機能)。
RemoveDirディレクトリを削除。
ResGen.txtおよび.resxファイルを.resourcesバイナリファイルに変換(「resgen.exe」類似機能)。
ResolveAssemblyReference指定したアセンブリに依存するすべてのアセンブリを解決。
ResolveComReferenceタイプライブラリ名または.tlbファイルの一覧から、ライブラリのディスク上の位置を解決。
ResolveKeySource厳密な名前のキーのソースを確認。
ResolveNativeReferenceネイティブ参照を解決。
SGenアセンブリの種類に対応するXMLシリアル化アセンブリを作成。
SignFile証明書で指定されたファイルに署名。
Touchファイルのアクセス時刻および更新時刻を設定。
UnregisterAssemblyCOM相互運用のために、指定されたアセンブリの登録を解除(RegisterAssemblyタスクの逆)。
VbcVB.NETコンパイラ「vbc.exe」を実行。
VCBuildVisualC++プロジェクトをビルドする「vcbuild.exe」を実行。
Warning条件の評価に基づいてビルド中の警告をログに記録。
WriteLinesToFile指定したテキストファイルに書き込み。

 このタスク一覧を見ると、MSBuildを使って、コンパイルしたり、ファイルを操作したりといったビルドに関する基本的な操作ができることが分かります。各機能の詳細について興味のある方は以下のサイトを参照してください。

拡張タスクと独自タスクの利用
 標準で用意されているタスクの他に、MSBuildの拡張として提供されているライブラリ「The MSBuild Community Tasks Project」やMicrosoft Services (UK) Enterprise Solutions Build Framework (SBF)」をダウンロードすれば、ソースコード管理ソフトやユニットテストといった、自動化に有益なタスクを連携させることもできます。興味のある方は、本稿の「MSBuildの追加ライブラリの使用」をご覧ください。
 また、独自にタスクを作成することもできます。詳細は、MSDNの「タスクを記述する」を参照してください。

設定が容易

 また、MSBuildでは、プロジェクトファイルと呼ばれるXMLの設定ファイルに従ってタスクを実行させることができます。本稿で作成するプロジェクトファイルの完成形は次のようになります。

sample.proj
<Project DefaultTargets="build"  
 xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <!-- =========== プロパティ ========== -->
    <PropertyGroup>
        <ProjectName>MsBuildSample</ProjectName>
    </PropertyGroup>
    <!-- ======= アイテムグループ ======== -->
    <ItemGroup>
        <CSFile Include="**\*.cs"/>
        <Reference Include="System.dll"/>
        <Reference Include="System.Data.dll"/>
        <Reference Include="System.Drawing.dll"/>
        <Reference Include="System.Windows.Forms.dll"/>
        <Reference Include="System.XML.dll"/>
    </ItemGroup>
    <!-- =========== ターゲット ========== -->
    <!-- buildターゲット(C#プロジェクトをコンパイル) -->
    <Target Name="build" >
        <CSC
            Sources="@(CSFile)"
            References="@(Reference)"
            OutputAssembly="$(ProjectName).exe"
            TargetType="winexe" />
    </Target>
    <!-- runターゲット(C#プロジェクトのEXEを実行) -->
    <Target Name="run" DependsOnTargets="build">
        <Exec Command="$(ProjectName).exe"/>
        <Message Text="アプリケーションを実行しました。" />
    </Target>
</Project>

 複雑そうに見えるかもしれませんが、タスクに応じたパラメータを記述するだけなので、バッチファイルよりも簡単に設定を記述することができます。

 MSBuildには、この他にも「実行順序の指定」「条件に応じた分岐」「エラー発生時の処理」など、便利な制御機能も備わっています。このようにビルドツールとして十分な機能を備えているため、MSBuildが利用される機会が増えてきています。

プロジェクトファイル作成とMSBuildの実行手順

 引き続き、MSBuildで必要な設定について紹介します。MSBuildを実行するには、一般的に次の手順が必要になります。

  1. プロジェクトファイルの作成
  2. プロジェクトファイルの記述
    1. プロジェクト(プロジェクトファイルの基本定義)の記述
    2. プロパティ(使用する変数)の記述
    3. アイテムグループ(使用する入力項目グループ)の記述
    4. ターゲット(MSBuildから呼び出す機能単位)の記述
  3. MSBuildの実行

 ここでは、「Windowsアプリケーションプロジェクトをコンパイルして、アプリケーションを実行する」というシナリオを紹介します。

プロジェクトファイルの作成

 作業内容を記述するプロジェクトファイルはXMLファイルです。Visual Studioから作成する場合は、ソリューションエクスプローラでプロジェクトを右クリックし、メニューから[新しい項目の追加]-[XMLファイル]を選択して作成します。

 プロジェクトファイルの名前には「*.proj」という拡張子を付けることを推奨します。これは、「*.proj」という拡張子にしておくと、MSBuildを実行する際に、自動でファイルを検出することができるためです。

 プロジェクトファイルの1行目には、以下のようなXMLの宣言が書かれています。これはそのまま残しておきます。

<?xml version="1.0" encoding="utf-8" ?>

 また、テキストファイルで作成する場合、encodingの設定はutf-8で保存するように注意してください。

「MSBuildのプロジェクトファイル」 = 「C#やVBのプロジェクトファイル」
 本稿では詳しく解説しませんが、Visual Studioが生成するプロジェクトファイル(Visual Basic.NETの場合は「*.vbproj」、Visual C#の場合は「*.csprj」)も、MSBuildのプロジェクトファイル形式になっています。Visual Studioではなく、テキストエディタでプロジェクトファイルを開くと、これから紹介するXML形式と同じであることが分かります。そのため、Visual Studioが生成するプロジェクトファイルがあれば、Visual Studioを開かなくても、MSBuildを使ってビルドすることができます。
 興味のある方は、本稿のサンプルファイルをダウンロードして、そこに含まれる「3.Project.bat」を実行し、C#のプロジェクトファイルを、MSBuildで読み込んでコンパイルさせてみてください。
 また、MSBuildでは、ソリューションファイルを利用してビルドを行うこともできます。複数のプロジェクトが存在するソリューションの開発をしている場合は、ソリューションファイルを指定してビルドを行うとよいでしょう。詳細については、以下の記事を参照してください。

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 青木 淳夫 (株式会社ネクストスケープ)(アオキ アツオ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5