前書き
アプリケーションの開発が終了しても、まだ終りと言うには程遠いものがあります。 近年では、ユーザーは、本格的で完璧なセットアップ・ソリューションが製品に付属しているのを当り前の事として要求するようになっています — そして、セットアップはエンド・ユーザーがアプリケーションに接する一番最初の部分ですから、 セットアップの完全さと信頼性が重要であることはいくら強調しても足りません。
従来からあるセットアップ・ツールは、プログラム的なスクリプト・ベースの手法を使って、アプリケーションのインストールに関係するさまざまなステップを記述してきました。 ファイルのコピー、レジストリ設定の作成、デバイス・ドライバーやサービスの開始など、すべてそうです。 一方、Windows Installer の背景にあるテクノロジは、エンド・ユーザーに対しては同じような見た目や使い勝手を維持しながらも、 重要な哲学的変更をいくつか経ています。 根本的な変更は、命令的な記述から宣言的な記述への移行でした。 すなわち、インストールの個々のステップを記述するのではなく、インストールやアンインストールのさまざまな段階を経た後に、 対象のマシンがどんな状態になっているべきかを、宣言的な形式で定義するのです。 命令的な記述は非常に効率的であるように見えますが、それには、何かエラーが発生しない限りは、という条件が付きます。 しかし、宣言的な記述であれば、予想外の条件、対象マシンの環境の違い、インストールの中断、リソースの共有などに起因するエラーが生じても、 うまく対処することが出来ます。 セットアップの開発者にとって最も優先すべき課題は、インストールの過程でどのような事態が発生しようとも、 対象のマシンを既知の安定した状態に保って、有害な副作用を与えないことです。
広く使われているセットアップ・ツールの開発者たちも、この新しいテクノロジを採用した新しいバージョンのツールを提供して、 そういう性格を持ったセットアップ・プログラムを作成できるようにし始めています。 しかし、多くの開発者の経験が示すように、それらのツールは、比較的単純なインストーラ・パッケージの作成は完璧にこなしますが、 多少複雑な要求に出会った場合には、制約が厳しすぎたり柔軟性が欠けていたりすることが多いのです。
ここで紹介しようとしているツールセット、WiX は、それらとは違う手法を取っています。 従来のセットアップ・ツールでは、グラフィカルなインタフェイスが付属していて、 インストールのプロセスを構成するファイルや関連タスクを開発者が手作業で収集できるようになっているのが通例ですが、 WiX はそういうものではありません。むしろ、プログラミング言語によく似たものです。 WiX では、アプリケーションを作成する通常のプロセスと全く同じように、テキスト・ファイルを使って、 インストールのプロセスに関する全ての要素を記述します。 テキスト・ファイルは、急速に普及してきた XML 形式のものです。 そして、通常のコンパイラがソース・ファイルからアプリケーションを作成するのと全く同じように、 WiX のコンパイラとリンカがセットアップ・プログラムを作成します。 このため、WiX は、自動化されたアプリケーション作成プロセスの一部として組み込むことが、非常に容易に出来るようになっています。 組み込む先は、makefile による古典的なテクノロジに基づいたものでも構いませんし、現代的な統合開発環境の類似した機構であっても構いません。
この統合は、基本的には開発者に快適さを提供するだけのものですが、WiX は、それに加えて、更に別のレベルの統合をも提供します。 それは、第一の統合よりもはるかに利点が多い、セットアップ開発プロセスとアプリケーション開発プロセスの統合です。 伝統的に、セットアップ・プログラムが書かれるのは、メインのアプリケーションがほとんど完成してからの事でした。 しかも、多くの場合は、別の開発者によって書かれるのです。 この手法は、アプリケーションを構成する全てのリソースについて情報を収集するという、退屈で間違いの多いプロセスを必要とします。 通常、ファイルそのものは明白ですが、レジストリ・エントリ、サービス、その他の形式のリソース間依存関係は、 大抵は、後になってからでは再構成するのが困難なものです。 しっかりした開発ドキュメントが欠如している場合、セットアップの開発者は、全ての情報の断片をアプリケーションの開発者から聞き出すか、 もしくはソース・コードから抽出しなければなりません。
統合されたアプリケーション/セットアップ開発環境においては、元の開発者がアプリケーションの開発と同期して WiX のソース・ファイルを修正すべきことになります。 新しいモジュールの開発を開始したり、新しいレジストリ・エントリを追加したり、サービスなどの依存関係を作成したりすると同時に、 並行して、セットアップに対する適切な修正が施されなければなりません。 この手法をとれば、重要な情報が欠落することは決してありませんし、おまけとして、 アプリケーションそのものが完成するのと一緒にセットアップ・プログラムも実質的に完成することになります。
このような事の結果として、WiX は全ての開発者に平等に適している訳ではない、という事が言えます。 学習曲線の勾配が比較的きついこと(このチュートリアルの主要な目的はその困難の克服を支援することではあるのですが)、 不可避的に内部の詳細事項に関わる必要があること、そして、基礎を構成する Windows Installer のテクノロジが複雑であることを考慮に入れると、 経験の少ない開発者や、WiX によって得られる無制限の圧倒的なパフォーマンスが本当は必要でない人にとっては、 もっと単純な、GUI ベースのセットアップ・オーサリング・ツールの方が適しているでしょう。 そういうツールとしては、市販製品でもフリーウェアでも、入手できるソリューションがいくつか有ります。
WiX ツールセットの特徴と利点を要約すると以下の通りです。
- 宣言的な手法
- Windows Installer の機能に対する制約のないアクセス
- GUI ベースの情報の収集ではなく、ソース・コード
- アプリケーションのビルド・プロセスへの完全な統合
- アプリケーション開発との統合の可能性
- (社内および第三者との)チーム開発のサポート
- 無料、オープン・ソース
WiX の成熟度について疑念が有るかもしれませんね。 多数のファイルを配置する必要がある大規模で複雑なアプリケーションでも、WiX でインストーラを作れるだろうか、と。 それに対しては、Microsoft 自身が主要なソフトウェア・パッケージを全部 WiX に切り替えつつある、という事を言っておきます。 ほんの一例ですが、Microsoft Office 2007 のセットアップはすべて WiX で開発されたものです。
まず最初に、WiX ツールセットの作成について Rob Menshing に謝意を表したいと思います。 そして、このチュートリアルに素材を寄稿してくれた Neil Sleightholm、Vadym Stetsyak、Robert Pickering、Marc Borgers、John DeSoi、 Markus Karg、Greg Glass、Stefan Krüger、Nobuo Kihara、Phil Wilson、Peter Tewkesbury、Nicholas Muguira、David Adams、 Mike Green、Chesong Lee および Christophe Michel に謝意を表します。