NAntによる自動化

IDE開発環境は使いやすいですが、夜間にビルドやテストを自動実行させる場合はコマンドラインの方が便利な場合があります。次期バージョンのVisualStudioではMSBuildというビルドツールが用意されるみたいですが、現状だとNAntを利用すると良さそうです。

例えば、yaneSDK4Cs用だとこんな感じになります。

<?xml version="1.0" ?>
<project name="yaneSDK4Cs" default="win32-debug">
    <property name="project.name" value="yaneSDK4Cs" >
    <property name="project.version" value="0.8" >
    <property name="build.debug" value="true" >
    <property name="build.platform" value="WIN32" >

    <target name="win32-debug" descriptoin="win32 - debug build">
        <call target="build" >
    </target>

    <target name="win32-release" description="win32 - release build">
        <property name="build.debug" value="false" >
        <call target="build" >
    </target>

    <target name="linux-debug" descriptoin="linux - debug build">
        <property name="build.platform" value="LINUX" >
        <call target="build" >
    </target>

    <target name="linux-release" description="linux - release build">
        <property name="build.debug" value="false" >
        <property name="build.platform" value="LINUX" >
        <call target="build" >
    </target>

    <target name="build">
        <csc target="library" debug="${build.debug}" unsafe="true" 
        define="${build.platform}" doc="${project.name}.xml" 
        nowarn="1591" output="${project.name}.dll">
            <sources>
                <includes name="*.cs" >
            </sources>
            <lib>
                <includes name="../lib" >
            </lib>
            <references>
                <includes name="ICSharpCode.SharpZipLib.dll" >
            </references>
        </csc>
    </target>

    <target name="doc" description="Document for yaneSDK4Cs">
        <ndoc>
            <assemblies>
                <includes name="${project.name}.dll" >
            </assemblies>
            <summaries>
                <includes name="${project.name}.xml" >
            </summaries>
            <documenters>
                <documenter name="MSDN">
                    <property name="OutputDirectory" value="doc" >
                    <property name="HtmlHelpName" value="${project.name}" >
                    <property name="HtmlHelpCompilerFilename" value="hhc.exe" >
                    <property name="IncludeFavorites" value="False" >
                    <property name="Title" value="yaneuraoGameSDK 4th" >
                    <property name="SplitTOCs" value="False" >
                    <property name="DefaulTOC" value="" >
                    <property name="ShowVisualBasic" value="False" >
                    <property name="ShowMissingSummaries" value="False" >
                    <property name="ShowMissingRemarks" value="False" >
                    <property name="ShowMissingParams" value="False" >
                    <property name="ShowMissingReturns" value="False" >
                    <property name="ShowMissingValues" value="False" >
                    <property name="DocumentInternals" value="False" >
                    <property name="DocumentProtected" value="True" >
                    <property name="DocumentPrivates" value="False" >
                    <property name="DocumentEmptyNamespaces" value="False" >
                    <property name="IncludeAssemblyVersion" value="False" >
                    <property name="CopyrightText" value="" >
                    <property name="CopyrightHref" value="" >
                </documenter>
            </documenters> 
        </ndoc>
    </target>

    <target name="clean">
        <delete failonerror="false" file="${project.name}.dll" >
        <delete failonerror="false" file="${project.name}.pdb" >
        <delete failonerror="false" file="${project.name}.xml" >
        <delete failonerror="false" dir="doc" >
    </target>
</project>

上記ファイルをyaneSDK4Cs.buildとして保存し、次のように実行します。

nant /f:yaneSDK4Cs.build ターゲット名

各ターゲットは

  • win32-debug : Win32デバッグビルド
  • win32-release : Win32リリースビルド
  • linux-debug : Linuxデバッグビルド
  • linux-release : Linuxリリースビルド
  • doc : NDocによるドキュメント生成
  • clean : 出力ファイルを削除

と、なっています。コンパイル時に/docオプションがあると遅くなるので、使わない人は削った方が良いかも。