インストーラー作成ツールの選択

# 概要
一般的なWin32 APIを使ったアプリケションソフトウェアを作ったら、インストーラーが必要になります。ここでは、新たにインストーラーを作成しなければならなくなった時、どのようなインストーラー作成ツールが選択可能か考えていきたいと思います。
# ツール選択の基準
次のような選択基準で考えてみます。
### メンテナンスが続いている
バグへの対応のほか、新OSへの対応など、メンテナンスネタは尽きません。メンテナンスが続くということは、ちゃんとユーザーもいるということです。安心してツールを使い続けるためにも重要なことです。
### 情報が豊富である
入門にも、困ったときの調査にも、情報が豊富であれば当然助けになります。情報が豊富であれば、よく使われているということであり、枯れた環境になるのも早いはずです。
### ある程度以上、自由度が高い
インストーラーはできる限り機能を少なくするのが理想ですが、配布するアプリの都合で、どうしても標準的でない機能が必要になったりすることはあります。また、多くのインストーラーに分割された製品群をインストールする場合、ユーザーに優しいインストーラーにしたい、という要求もあるでしょう。自由度の高さが助けになることは多いと思います。
### 無料
購入費用の負担が無くなることだけが無料であるメリットではありません。インストール物が更新されるたびに、インストーラーもビルドが必要です。InstallShieldのように、実装もビルドも同じ人間がやらなければならないことを前提としたライセンス体系だと、一人に仕事が集中するようになります。ちょっとした改造するにも、メンテナンスリリースのためにインストーラーをビルドするにも、その人が必要になります。将来のことを考えれば、手離れの良いインストーラーを実装したいものです。
### 要求された機能を持っている
たまに、こういうこともあります。特別な要求のために、使えるツールが決まってしまうことがあります。例えば、WiX ToolsetではPackage Bundleという、いくつかの子インストーラーを束ねてインストールする機能があります。２つの製品で同じMSI形式のインストーラーが含まれていたとしましょう。一般的には、両製品を同じ環境にインストールした後、一方をアンインストールすると、両製品が共有していた機能までアンインストールされてしまいます。しかし、Package Bundleで2つの製品を作成すると共有管理の機能が働いて、必要とされる製品がすべてアンインストールされない限り、共有する機能はアンインストールされません。この機能の利用を前提としたインストーラーと子インストーラーを共有するなら、WiX Toolset以外選択肢が無くなってしまうわけです。

# Windows Installerについて
Windowsは、Windows Installerというアプリをインストールするための仕組みを持っています。インストーラー作成ツールは、Windows Installerの仕組みを使ったものと、使わないものに分類できます。Windows Installerは難解で、日本語の情報も少なく、習得するのは非常にハードルが高いものです。Windows Installerの仕組みを使わないインストーラー作成ツールでも良い物はありますので、そういったツールを選択するのも悪くない選択です。
ただ、Windows Installerの仕組みを使うインストーラー作成ツールにも、メリットはあります。基本的に、Windows Installerの仕組みを使うインストーラー作成ツール同士なら、ツールを乗り換えるのが容易です。将来メンテナンスがされなくなったら別のツールに移行するかもしれないわけですから、この点も考えておいたほうが良いでしょう。また、Windows Installerにはマージモジュールというインストーラーの部品を使うための仕組みがあります。例えば、Visual Studioで開発したアプリが使用するVisual C++のランタイムライブラリは、マージモジュールも提供されていて、インストーラーに組み込むことが出来ます。Windows Installerの仕組みを使えない場合は、`VCRedist_x86.exe`などのインストーラーをインストーラーから呼び出してインストールすることになります。このように個別にランタイムライブラリのインストーラーを実行してしまうと、他のプログラムがこのランタイムライブラリを使っているかもしれないため、安易にアンインストールすることができなくなります。でも、マージモジュールでインストールしてあると、共有管理の仕組みが働いて、不要になったらアンインストールされます。きれいさっぱり、元の状態に戻せるのも、メリットの1つでしょう。

# インストーラー作成ツール
最後に、調査の結果使えそうだと思ったインストーラー作成ツールを紹介します。少ないです。
## Windows Installerの仕組みを使わないツール
２種類紹介します。
### Inno Setup
[Inno Setup](http://www.jrsoftware.org/isinfo.php)は、基本的に.iniファイルのような書式でソースファイルを記述していきます。カスタマイズは、今となってはマイナーなPascal言語ですが、それほど複雑なことをやるわけではないので、他の言語の心得があれば簡単に習得できます。Inno Script Studio script editorというGUIツールも用意されていますが、起動も早く安定していて、秀逸な出来です。
Windows Installerの仕組みを使わないツールとしては、イチオシです。
### Nullsoft Scriptable Install System (NSIS)
[NSIS](http://nsis.sourceforge.net/Main_Page)も比較的使われているツールだと思います。NSIS本体は最低限の機能しか持っていませんが、多くの方がプラグインで色々な機能を提供しています。業務で使う場合は、各プラグインのライセンスがどうなっているか気をつける必要があるでしょう。
## Windows Installerの仕組みを使うツール
１つだけ紹介します。無料で、まともに使えるツールって他にあるんでしょうか。
**［2025/04/17］** WiX Toolset V6は収益をあげている団体が使用する場合、保守料金を支払う必要がある、と発表されました。[https://github.com/sponsors/wixtoolset](https://github.com/sponsors/wixtoolset)　[https://www.firegiant.com/blog/2025/4/7/wix-v600-available/](https://www.firegiant.com/blog/2025/4/7/wix-v600-available/)

### WiX Toolset
[WiX Toolset](http://wixtoolset.org/)は、XMLで実装します。Visual Studio向けのサポート機能が充実していて、Visual Studioを持っていれば、雛形を自動作成してすぐにインストーラーを作り始めることもできますし、Visual Studioのインテリセンスを使ってXMLの入力を補完してくれるので、是非セットで使いましょう。WiX Toolsetでは、拡張子が.MSIの単体のインストーラーの他に、複数のインストーラーを１つに束ねた、Package Bundleという.EXE形式のインストーラーも作成できます。ただ、Package Bundleはカスタマイズ性は低い（高度なこともできるようだが難しすぎるので、結局低いも同じ）ので、使うとしてもかなり限定した使い方になるでしょう。マイクロソフトのエンジニアが作っているそうなので、ツールとしての安心感は高いです。
カスタマイズのためには、Windows Installerの深い知識が必要になることもありますので、覚悟の上採用する必要があると思います。

# インストーラーを作っていて思うこと
もうWin32アプリケーションの時代でも無いんじゃないかとも思いつつ、せっかく学んだのでインストーラーについて書いています。インストーラーといえばInstallShieldという気もしますが、値が張りすぎです。特に多言語のインストーラーを作ろうとすると、すごいことになります。しかも、登録した本人しか使えないし、使っているPCが監視されていたりします。InstallShieldはじっくりライセンス文を読んで使いましょう。痛い目に会います。