サンプルスクリプト ターゲットごとの解説 その2
mainターゲット
mainターゲットは、メインとなる処理を行うターゲットで、詳細な処理を行っている各ターゲットを呼び出します。
mainターゲット 処理の流れ
- 「Vssget」ターゲットを呼び出し、ローカルワークスペースにプロジェクトおよびファイルを取得します。
- 「build」ターゲットを呼び出し、VSソリューションをビルドします。
- 「installer」ターゲットを呼び出します。ISMファイルを編集し、インストーラを作成します。
<target name="main" depends="" > <!-- VSS DBからソースを取得 --> <call target="Vssget" /> <!-- VSソリューションのビルド --> <call target="build" /> <!-- インストーラ作成 --> <call target="installer" /> </target>
次に、mainターゲット内で実行される各ターゲットの詳細を説明していきます。
Vssgetターゲット
Vssgetターゲットは、VSS DBにあるプロジェクトおよびファイルを、ローカルワークススペースに取得します。
Vssgetターゲット 処理の流れ
- ローカルワークスペース(ソース取得先)が存在する場合は、削除します。
- NAntcontribのvssgetタスクを利用し、VSS DBにあるプロジェクトおよびファイルを取得します。
<target name="Vssget" depends="" > <delete dir="${vsswk.path}" if="${directory::exists(vsswk.path)}" /> <mkdir dir="${vsswk.path}" /> <!-- vssgetタスクを用いて、--> <!-- ローカルワークスペースにプロジェクトおよびファイルを取得 --> <vssget dbpath="${ssini.path}\srcsafe.ini" username="${user}" password="${pass}" localpath="${vsswk.path}" path="$/Root" recursive="true" writable="true" /> </target>
本ターゲットのポイント
ローカルワークスペース「C:\NAntSample3\VSSWork」にRootプロジェクト以下を取得するため、path
属性に、「/$Root」を設定します。パスは、必ず「/$」から始まる記述にしてください。
Rootプロジェクト以下すべてをまとめて取得するため、recursive
属性の値をtrueに設定します。recursive
属性は、指定したプロジェクト以下を再帰的に取得するかどうかを指定するものです。
また、VSS DBから取得したファイルに関して、基本的にはwritable
属性の値をtrueに設定しておきます。writable
属性は、ローカルに取得したファイルの書きこみ可能にするかどうかを指定するものです。
buildターゲット
buildターゲットは、VSS DBから取得したソリューションをビルドし、Buildフォルダに出力します。また、インストーラに含めるドキュメントをビルド出力先フォルダにコピーします。
buildターゲット 処理の流れ
- ビルドを実行する前に、ビルド出力先フォルダが存在する場合は削除します。
- VSS DBからローカルワークスペースに取得したTest1プロジェクトを、NAntのsolutionタスクでビルドします。今回は、リリースモードでビルドするため、
configuration
属性をrelease
に設定します。 - VSS DBからローカルワークスペースに取得したTest2・Test3プロジェクトを、NAntのsolutionタスクでビルドします。今回は、リリースモードでビルドするため、
configuration
属性をrelease
に設定します。 - VSS DBからローカルワークスペースに取得したTest2、およびTest3プロジェクトをNAntのsolutionタスクでビルドします。
- インストーラに含めたいドキュメントをコピーします。コピー先は「C:\NAntSample3\Build\docs」フォルダです。
outputdir
属性で設定します。出力先はbuild.path
プロパティで設定された「C:\NAntSample3\Build」フォルダです。<target name="build" depends="" > <delete dir="${build.path}" if="${directory::exists(build.path)}" /> <mkdir dir="${build.path}" /> <!-- Test1プロジェクトをビルド --> <solution configuration="release" includevsfolders="false" outputdir="${build.path}" > <projects> <include name="${vsswk.path}\NAntSample3\Test1\Test1.csproj" /> </projects> </solution> <!-- Test2・Test3プロジェクトをビルド --> <solution configuration="release" includevsfolders="false" outputdir="${build.path}\Assemblies" > <projects> <include name="${vsswk.path}\NAntSample3\Test2\Test2.csproj" /> <include name="${vsswk.path}\NAntSample3\Test3\Test3.csproj" /> </projects> </solution> <!-- ドキュメント類をビルド出力先へコピー --> <copy file="${vsswk.path}\docs\ReadMe.txt" todir="${build.path}\docs" /> <copy file="${vsswk.path}\docs\リリースノート.txt" todir="${build.path}\docs" /> </target>
「solution」タスクについては、別稿『NAntでアセンブリのバージョンアップデートを自動化する』も併せて参照してください。
installerターゲット
installerターゲットは、InstallShieldのプロジェクトファイル(ISMファイル)を編集し、インストーラ作成を行います。
installerターゲット 処理の流れ
- セットアップ出力先フォルダが存在する場合は、削除します。
- NAntのxmlpokeタスクを利用して、ISMファイル内のパス変数に該当する部分を編集します。
- NAntのxmlpokeタスクを利用して、ISMファイル内の製品名に該当する部分を編集します。NAntSample3のあとに、コマンドライン引数で渡された
release.name
プロパティの値が追加されます。 - InstallShieldコマンド版を実行します。編集されたISMファイルの情報を基に、ビルド出力したファイルを含めたインストーラを作成します。
- インストーラ作成が成功すると、「C:\NAntSample_VCSharp3\Setup\NAntSample3\Release\DiskImages\DISK1」フォルダに、インストーラ(NAntSample3.msi)が出力されます。
<target name="installer" depends=""> <delete dir="${setup.path}" if="${directory::exists(setup.path)}" /> <mkdir dir="${setup.path}" /> <!-- パス変数 PATH_TO_BUILD_FILES に該当する部分を編集--> <xmlpoke file="${ism.path}" xpath="/msi/table[99]/row[7]/td[2]" value="${build.path}" /> <!-- パス変数 PATH_TO_ASSEMBLIES_FILES に該当する部分を編集--> <xmlpoke file="${ism.path}" xpath="/msi/table[99]/row[6]/td[2]" value="${build.path}\Assemblies" /> <!-- パス変数 PATH_TO_DOCS_FILES に該当する部分を編集--> <xmlpoke file="${ism.path}" xpath="/msi/table[99]/row[8]/td[2]" value="${build.path}\docs" /> <!-- パス変数 PATH_TO_SETUP_FILES に該当する部分を編集--> <xmlpoke file="${ism.path}" xpath="/msi/table[99]/row[9]/td[2]" value="${setup.path}" /> <!-- 製品名に該当する部分を編集 --> <!-- (コマンドライン引数で渡されたリリース名 --> <!-- ${release.name}を製品名に追加) --> <xmlpoke file="${ism.path}" xpath="/msi/table[121]/row[1078]/td[3]" value="NAntSample3 ${release.name}" /> <xmlpoke file="${ism.path}" xpath="/msi/table[165]/row[59]/td[2]" value="NAntSample3 ${release.name}" /> <xmlpoke file="${ism.path}" xpath="/msi/table[102]/row[6]/td[3]" value="NAntSample3 ${release.name}" /> <xmlpoke file="${ism.path}" xpath="/msi/table[121]/row[1080]/td[3]" value="NAntSample3 ${release.name}" /> <!-- Install Shieldコマンド版を実行し、インストーラを作成 --> <exec program="${iscmd.path}" verbose="true"> <arg value="-p "${ism.path}"" /> <arg value="-e "n"" /> </exec> </target>
InstallShieldプロジェクトファイルについて
InstallShieldプロジェクトファイル(ISMファイル)は、InstallShield がプロジェクト情報を保存するために利用する作業ファイルです。InstallShieldはISMファイルを使用して配布用のインストーラ(MSIファイル)を作成します。
InstallShield Premier Edition 12では、バイナリとXMLの2種類の保存形式を選べます。今回のサンプルでは、InstallShield IDEを利用せず、テキストエディタやXMLエディタからISMファイルの内容を確認できるというメリットがあるため、XML形式でISMファイルを保存します。
このISMファイルには、インストーラ作成に必要な情報がすべて含まれています。その一部として例えば、製品のプロパティ情報、インストール先のディレクトリ構成(「C:\Program Files\~」)、インストーラに含めるファイルの情報などがあります。
本ターゲットのポイント
ISMファイルを編集するためxmlpokeタスクのxpath
属性に、編集したい部分を指定するためのXPathを記述します。xmlpokeタスクの詳細は、末尾の付録(本稿で使用した主なタスクのリファレンス)に掲載していますので、参照してください。また、InstallShieldコマンド版(IsCmd.exe)を、execタスクを用いて実行します。
本サンプル実行時に指定した引数は、次のとおりです。その他の引数について、詳しくは、InstallShield 12のヘルプを参照してください。
属性 | 説明 |
-p<ISMファイルのパス> | ISMファイルのパス。絶対パス、相対パス、ファイル名のみの指定が可能 |
-e<n> | 「n」を指定した場合、msi形式のインストーラのみを出力 |