CodeZine(コードジン)

特集ページ一覧

NAnt+InstallShield活用でビルド・インストーラ作成の自動化を行う

NAntスクリプトによるビルド効率化TIPS その3

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2007/02/09 00:00
目次

サンプルスクリプト ターゲットごとの解説 その2

mainターゲット

 mainターゲットは、メインとなる処理を行うターゲットで、詳細な処理を行っている各ターゲットを呼び出します。

mainターゲット 処理の流れ

  1. 「Vssget」ターゲットを呼び出し、ローカルワークスペースにプロジェクトおよびファイルを取得します。
  2. 「build」ターゲットを呼び出し、VSソリューションをビルドします。
  3. 「installer」ターゲットを呼び出します。ISMファイルを編集し、インストーラを作成します。
nant.build内のmainターゲット
<target name="main" depends="" >
  <!-- VSS DBからソースを取得 -->
  <call target="Vssget" />
  <!-- VSソリューションのビルド -->
  <call target="build" />
  <!-- インストーラ作成 -->
  <call target="installer" />
</target>

 次に、mainターゲット内で実行される各ターゲットの詳細を説明していきます。

Vssgetターゲット

 Vssgetターゲットは、VSS DBにあるプロジェクトおよびファイルを、ローカルワークススペースに取得します。

Vssgetターゲット 処理の流れ

  1. ローカルワークスペース(ソース取得先)が存在する場合は、削除します。
  2. NAntcontribのvssgetタスクを利用し、VSS DBにあるプロジェクトおよびファイルを取得します。
nant.build内のVssgetターゲット
<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ターゲット 処理の流れ

  1. ビルドを実行する前に、ビルド出力先フォルダが存在する場合は削除します。
  2. VSS DBからローカルワークスペースに取得したTest1プロジェクトを、NAntのsolutionタスクでビルドします。今回は、リリースモードでビルドするため、configuration属性をreleaseに設定します。
  3. VSS DBからローカルワークスペースに取得したTest2・Test3プロジェクトを、NAntのsolutionタスクでビルドします。今回は、リリースモードでビルドするため、configuration属性をreleaseに設定します。
  4. また、ビルド出力先はoutputdir属性で設定します。出力先はbuild.pathプロパティで設定された「C:\NAntSample3\Build」フォルダです。
  5. VSS DBからローカルワークスペースに取得したTest2、およびTest3プロジェクトをNAntのsolutionタスクでビルドします。
  6. 出力先は「C:\NAntSample3\Build\Assemblies」フォルダです。
  7. インストーラに含めたいドキュメントをコピーします。コピー先は「C:\NAntSample3\Build\docs」フォルダです。
nant.build内の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ターゲット 処理の流れ

  1. セットアップ出力先フォルダが存在する場合は、削除します。
  2. NAntのxmlpokeタスクを利用して、ISMファイル内のパス変数に該当する部分を編集します。
  3. NAntのxmlpokeタスクを利用して、ISMファイル内の製品名に該当する部分を編集します。NAntSample3のあとに、コマンドライン引数で渡されたrelease.nameプロパティの値が追加されます。
  4. InstallShieldコマンド版を実行します。編集されたISMファイルの情報を基に、ビルド出力したファイルを含めたインストーラを作成します。
  5. インストーラ作成が成功すると、「C:\NAntSample_VCSharp3\Setup\NAntSample3\Release\DiskImages\DISK1」フォルダに、インストーラ(NAntSample3.msi)が出力されます。
nant.build内のinstallerターゲット
<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のヘルプを参照してください。

IsCmd.exe実行時に指定する引数
属性説明
-p<ISMファイルのパス>ISMファイルのパス。絶対パス、相対パス、ファイル名のみの指定が可能
-e<n>「n」を指定した場合、msi形式のインストーラのみを出力

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

バックナンバー

連載:NAntスクリプトによるビルド効率化TIPS

著者プロフィール

  • WINGSプロジェクト 齋藤 利佳(サイトウ リカ)

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

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

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

あなたにオススメ

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