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

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

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

 .NETのセールス・ポイントの1つは、開発したアプリケーション(以下、アプリ)が単にコピー(XCopy)しただけで動作するということだろう(もちろん事前に.NET Frameworkがインストールされている必要はあるが)。そういった点から「.NETでは、アプリ自体をインストールするセットアップ・プログラムは不要」と考えている読者諸氏も少なくないのではないだろうか。

 具体的なインストーラの話に入る前に、まずは前半でこの真相について考察してみたい。後半ではインストーラの作成方法について説明し、人気のある3大インストーラの機能を比較する。なお本稿では、主にスタンドアロンのWindowsアプリで活用できるインストーラを想定している。

■なぜインストーラが必要なのか?

 「ソフトウェアには必ず何らかの役割が与えられている」というのは、誰もがすんなりと理解できるだろう。もちろん、インストーラもソフトウェアの1つなので、何らかの役割を担っている。ここではまずその役割を明文化してみようと思う。

●インストーラの役割

 インストーラの役割とは、

アプリ*1を起動させるために必要なデータ(例えばファイルやレジストリなど)を適切な場所に「配置」すること

ではないだろうか。

*1 厳密には、1つのソリューション(=製品)の主体となるアプリ(=メイン・プログラム)を指す。以降で「アプリ」と記述したものは、この「主体となるアプリ」を意味する。

 だが残念なことに、いまのご時世これだけで「インストーラ」と呼ぶにはいささか無理があるといえる。これ以外にも、

・自分が配置したアプリの「更新」を行う
・自分が配置したアプリの「削除」を行う

という2つの役割も併せ持っていないと、「インストーラ」と呼ぶに値しないだろう。このように現在の「インストーラ」は、VB6(Visual Basic 6)全盛の5年以上前までとは異なり、単純に配置する役割を担うだけでは済まない存在となってきている。

インストーラの役割

 ここで、「配置」におけるインストーラの役割についてもう少し深く掘り下げて考察してみよう。具体的には「インストーラで行うべき作業」と「行うべきではない作業」の違いについて考えてみたいと思う。

●インストーラで行うべき作業

 前項の「インストーラの役割」の定義で、「アプリを<動作>させるために必要な……」ではなく、あえて「アプリを<起動>させるために必要な……」と記述したが、これには理由がある。それは、アプリ(=製品の主体となるアプリ)を「動作」させるために必要となる作業にはいくつかの分岐点が存在し、「起動」はその分岐点の1つにある作業にすぎないからだ。

 「起動」させるための作業とは、ご想像のとおり、ユーザーのクライアント環境(=具体的には、ユーザーのコンピュータ・マシンのハード・ディスク・ドライブの「Program Files」などのフォルダ)に、アプリの実行に必要なファイル群(.EXEファイルや.DLLファイルなど)をコピーする(あるいはそれらを圧縮したファイルを展開する)ことである。そのほかの作業としては、例えば、配置すべきファイル群の中にCOM(Component Object Model)コンポーネントがあればその登録作業も必要になるし、アプリによっては拡張子の関連付けが必要な場合もある。また、デスクトップやスタート・メニューに配置するショートカットの作成は必須といってもいいだろう。

 また当然、アプリが起動すれば万事OKというわけもなく、意図したとおりに実行できなければならない。つまり、起動以外にも「動作」させるための作業は必要となることがあり、その場合、「動作」させるための作業の一部はインストーラに求められることがある。具体的には、例えば「通信先のWebサーバのURL」など、一度だけ設定すればよい作業がそれだ。

 これらの作業内容は、インストールの時点で一度実行したら、原則として以後は変わらない(あるいは、変えてはいけない)ものがほとんどである(インストール先のフォルダ・パスなどはその最たる例だ)。そういった種類の作業は、インストーラで行うべきだといえる。

●インストーラで行うべきではない作業

 では逆に、インストーラで行うべきではない作業とはどのようなものか。それは、先ほどの「インストールの時点で一度実行したら、原則として以後は変わらない」という原則に反するものだ。この両者の切り分けは、意外と簡単である。

 それには以下の2点を考えればよい。

・実行ユーザーのアカウントに影響を受けるものか
・インストール後に情報が変わる可能性があるか

 前者は、いうまでもなくインストール作業で行うべきものではない。スタンドアロンのアプリであれば、インストールするユーザーのアカウントが、必ずしも実行するユーザーのアカウントと一致するとは限らないからだ。例えば、「DB(データベース)に接続する接続文字列」に指定するユーザー・アカウント情報は、必ずしもインストール・ユーザーと一致しないことがあるだろう*2

*2 ただし、接続文字列に指定する情報は、アカウント情報だけでなく、接続先のデータベース・サーバなどの情報もあり、そのような情報は通常よほどのことがない限り変わらないので、インストール時にユーザーに設定してもらうこと(=つまり接続文字列の一部の作成をインストーラで行うこと)は考えられる。

インストーラで行うべき作業/行うべきではない作業

 ここまでインストーラの役割について考察してきたが、これらの役割を踏まえて、「本当にインストーラは必要なのか」という点について考えてみたい。

●本当にインストーラは必要なのか?

 多くの業務アプリのインストールで、いまもよく実践されているのがXCopyコマンドによるインストールである。XCopyとは平たくいうと「手動インストール」のことだが、XCopyには以下のような制約や問題がある。

・ショートカットが作成できない(もちろん手作業による作成は可能)
・アンインストールも手動で行わなければならない
・更新時にアプリのバージョン管理を行ってくれない

 これらは、前述の「インストーラで行うべき作業」に該当する。特にスタンドアロンのWindowsアプリであれば、このような作業が求められるケースは多いので、そこではインストーラが必要となる。やはり上記のような役割を果たすには、単なるコピー(XCopy)だけでは難しく、インストーラを利用することが最も現実的な解となるだろう。

 以上がインストーラの役割とそれに基づくインストールが必要な理由だ。それでは以下では、インストーラの作成方法について説明していこう。

 

 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