特集:Windowsアプリの3大インストーラ比較

あなたのアプリにはどのインストーラが最適?

とっちゃん(高萩 俊行)
2008/08/05
Page1 Page2 Page3

■InstallShield/VSセットアップ/WiXの機能比較

 紙面の都合もあるため主だった違いしか記述しないが、以下ではIS/VSセットアップ/WiXの機能比較をしていく。

●全体的な機能の比較

 まずは、全体的な機能の比較だ。最終的に出来上がるインストーラの機能差がそのまま製品インストーラの機能差となるため、この部分は重要だ。

・使用できるWindows Installerの機能

 基本的にISやWiXでは、Windows Installerの機能をすべて使える(ただしWiXは、Windows Installerでも非推奨機能とされている、インストーラから別のインストーラを呼び出す「ネスト・インストール」は非推奨機能としてサポートしていない)。

 これに対し、VSセットアップはもとより簡易性を重視しているため、カスタマイズ性が犠牲になっており、複雑な構成のインストーラは開発できない(さらに悪いことに、インストールするファイル数が増えると、Windows Installerの持つ自動修復機能のチェックにそのファイルの数の負荷がかかるという点も見過ごせない。詳しくは後述の「【コラム】Windows Installerの自動修復機能について」を参照してほしい)。

 また、VSセットアップではUIのカスタマイズ機能も制限されており、画面上(例えばOfficeやWindowsのインストール・ウィザードにあるようなシリアル番号入力画面など)で入力された番号を検証するといった独自の機能を追加作成できない(VSセットアップで利用できるシリアル番号検証機能は、Windows Installerが標準で用意している機能だけとなる。その検証アルゴリズムは、「MSDN:SerialNumberTemplate プロパティ」を参照されたい)。

【コラム】Windows Installerの自動修復機能について

 Windows Installerとほかのインストーラとの違いに、システム・レベル(OS)でのサポートが挙げられる。特に自動修復機能は、OSのサポートなしには実現できない優れた機能といえる。

 だが製品規模が大きくなると、それだけ対象ファイルも増えてしまうため、全部をチェックしていたのでは、あまりにも負荷が高くなりすぎてしまうという問題がある。そのため、Windows Installerでは、この検査単位をFeature(=インストールするComponentのグループ。後述)という単位で行うようになっている。だが、VSセットアップは、このFeatureを設定することができないため、ファイル数が増えてしまうと、その検査に時間がかかってしまい、結果として起動時の処理が明らかに重くなるという欠点がある。なお、自動修復などのWindows Installer特有の機能については、日本語で書かれたホワイト・ペーパーがマイクロソフトから出ているので、そちらを参照していただきたい。

 ・MSDN:アプリケーションの復元: Windows インストーラの隠れた機能を明らかにする

●新規開発性の比較

 続いては新規開発の場面を想定してみよう。インストーラを新たに作成する際の主な作業には、「実際に何をどこに配置するか」という構成をデータとして作成する作業と、インストーラのUIを作る作業の2つがある。

・配置の構成データを作る

 配置の構成データを作る作業については、その作り方やツールの操作方法はもちろん三者三様だが、機能面では3つのツールともそれほど大きな差はない。

 ただしVSセットアップでは、Windows Installerのデータ管理構造の根幹である、Component(=インストーラで取り扱われる最小の管理単位)とFeature(=同時にインストールするComponentのグループ。カスタム・インストールの単位)が扱えず、内部のデータ構成を一致させる処理ができないという問題がある。

 そのため、ほかの製品との依存関係が持てず、複数のバリエーションを持つカスタム・インストーラは作成できない。Componentだけ一致させるのであればマージ・モジュール(.msmファイル)を利用することである程度は一致させられるが、マージ・モジュールはもともと、共有ファイルの管理用なので、インストーラのバリエーション管理のような用途には向かない。従ってVSセットアップは、単一の固定インストーラの作成だけにとどめておくのがよいだろう。

・インストーラのUIを作る

 インストーラのUIの作成とカスタマイズも、VSセットアップとそれ以外で分かれる。

 VSセットアップは、あらかじめ用意された標準UIしか使えない。標準UIのカスタマイズは一応可能だが、ダイアログの表示順の入れ替えや、ダイアログ内のいくつかのコントロールの表記文字列を多少操作できるという程度の編集しか行えない。そのため、製品独自のUIを用意することはできない。

 一方、ISとWiXでは、標準UIのカスタマイズに加えて、独自のUIも作成できる。ただしWiXでは標準UIをカスタマイズする場合、そのUIがライブラリとして提供されているため、表示順を入れ替えるだけでも、ライブラリのソースを取得し、それを編集しなければならないというデメリットがある(※前述のGUIツールを使っている場合はISと同等)。ただし実際には、その製品ごと(というよりはブランド単位)で独自のUIを作り込むことが多いため、このデメリットはあまり障害とはならないだろう。

 ISではVSセットアップ同様に標準UIを簡単にカスタマイズできるので、この点ではISが一歩抜きんでているといえる。

●更新機能の比較

 最後は更新機能、すなわちアップデータの作成だ。これについては、まずアップデータの種類を解説すべきかもしれないが、アップデータの細かい解説を行っているとそれだけで記事1本以上のボリュームとなってしまうので、ここでは割愛させていただく*4

*4 詳細な解説については、以前筆者が、ある勉強会でセッションを行った際の資料である「わんくま同盟 大阪勉強会 #12」の「Windows Installer 概要」の後半部分などを参照していただきたい(恥ずかしながらビデオもあるので、そちらも見ていただければ幸いだ)。

 さて更新機能だが、どのような更新パターン(「Major Upgrade」「Minor Update」など)を利用するかについては、製品の構成やサポートの方針、製品のライフサイクルなども考慮していく必要があるため、一概にどれがよいとはいえない。なお、上記の資料で解説している「Small Update/Small Upgrade」(=小さな修正。QFEのような緊急パッチなど)については原則として行わない方がいいだろう(インストーラのバージョンを変えずに内部データだけを更新してしまうので、更新判定も含めて適用状況を簡単に把握できないため)。外部にリリースしない開発中のテスト・バージョンなら何ら問題はないが、そういう特殊な状況以外では利用しない方がよい。

 では、それぞれのツールではどの更新パターンをサポートしているのだろうか。これもやはり2つのグループに分かれる。

・更新パターンへの対応

 まずVSセットアップだが、これは「Major Upgrade」(=新バージョン。例えばOffice XPからOffice 2007など)の更新パターンしかサポートしていない。Major Upgradeの場合、同一プロジェクトを更新している限り、新旧の依存関係を意識する必要がないため、更新に伴う煩わしさが半減されるというメリットがあるのだが、必ずフルセット(=差分ではないすべてを含むもの)での配布となるため、アプリの規模が大きい場合、無駄にインストーラのサイズが大きくなるという問題がある。

 これに対し、ISとWiXはその作成方法に違いがあるとはいえ、どちらもMajor Upgradeだけでなく「Minor Update」(=マイナー・アップデート。例えばService Pack 1など)と呼ばれる更新パターンもサポートしており、(更新ファイルだけの)差分による配布が可能になっている(.mspファイルとして配布する。WiXの場合、.mspファイルを作成するために別途Windows Installer SDKが必要になる)。そのため、規模の大きめなアプリやコンテンツなど、更新されないモジュールが多い製品のアップデータは、こちらが向いているといえる。

 最後となるが、Windows Installer SDKについても触れておこう。現在の最新版はWindows Installer 4.5用のSDKだ。本来なら、Windows SDK(Windowsの統合SDK)に含まれるものなのだが、更新のタイミングで現在は分離配布されている(将来統合される予定)。Windows Installer SDKには、Orcaという.msiファイルの直接編集が可能なツールが含まれている。このツールは、.msiファイルの編集のほかにも、.mspファイルを一時的に適用して適用状況を確認するなどの機能を持っているため、大変便利なツールである。

なお、最新の4.5は、XP SP2以降のOSにのみ対応しているが、4.0や4.5で追加された機能を呼び出さない限り、2000などの古いOSでの利用も問題ない。End of Article

 

 INDEX
  Windowsアプリの3大インストーラ比較
  あなたのアプリにはどのインストーラが最適?
    1.なぜインストーラが必要なのか?
    2.インストーラを作成するには?/インストーラの作成を取り巻く環境
  3.InstallShield/VSセットアップ/WiXの機能比較
 


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH