SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

サンプルスクリプト ターゲットごとの解説 その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形式のインストーラのみを出力

次のページ
実行結果

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
NAntスクリプトによるビルド効率化TIPS連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/909 2007/02/09 00:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング